

========

LDmicro       ( MCU)
Microchip PIC16  Atmel AVR.      MCU 
   ,  , C,  BASIC.   
      .     
   MCU.

,   ,     ' '
( ).      :

   ||                                                                    ||
   ||    Xbutton1           Tdon           Rchatter           Yred       ||
 1 ||-------]/[---------[TON 1.000 s]-+-------]/[--------------( )-------||
   ||                                 |                                  ||
   ||    Xbutton2           Tdof      |                                  ||
   ||-------]/[---------[TOF 2.000 s]-+                                  ||
   ||                                                                    ||
   ||                                                                    ||
   ||                                                                    ||
   ||    Rchatter            Ton             Tnew           Rchatter     ||
 2 ||-------]/[---------[TON 1.000 s]----[TOF 1.000 s]---------( )-------||
   ||                                                                    ||
   ||                                                                    ||
   ||                                                                    ||
   ||------[END]---------------------------------------------------------||
   ||                                                                    ||
   ||                                                                    ||

:
TON -     ., TOF -     ..
 --] [--  - ,      
  ( ).  --( )-- - , 
    ( ).     
       .  
     LDmicro  .

      :

    *     ,    
       .   
     .

    *  ,      
     ()   ().  
           (,
    ,   .).

    *      ,      .
        ,  ,  
            
     ,      ,  
        ;     
     .

LDmicro      PIC16  AVR.  MCU :
     *PIC16F877
     *PIC16F628
     *PIC16F876 ()
     *PIC16F88 ()
     *PIC16F819 ()
     *PIC16F887 ()
     *PIC16F886 ()
     *ATmega128
     *ATmega64
     *ATmega162 ()
     *ATmega32 ()
     *ATmega16 ()
     *ATmega8 ()

, . " "     ,   
     (. ).

    .-   MCU AVR  PIC16,
        (   GPL 3 ..  free
. ).     - ,      
,   .


 LDmicro       .
    ,    
 .       
,        
     PIC  AVR .     
'.hex' ,         
   PIC / AVR .

LDmicro ,     -    
 .   ,     
     .   
 ,     .   ,
          
( :  , ,  ).


==========

 ,   C    .  
    ,  
    C.      -.
 ,  LDmicro     PlcCycle().
      PlcCycle()    
,     I/O (/  ,  ..)
    PlcCycle(). .   
   .

   LDmicro    - -,
   ( VM)     .   
/(VM),     (.    ldinterpret.c
 . ).        ,   
 VM.           
' '   . .     
  (ldinterpret.c).

  
=======================

Ldmicro.exe      .  
          
      ,   ,      ,   .

 LDmicro      ,
( 'ldmicro.exe asd.ld'),  LDmicro   `asd.ld',
  .      'asd.ld'  .
..    ldmicro.exe   '.ld',         '.ld' .

 LDmicro      
'ldmicro.exe /c src.ld dest.hex',    'src.ld',
     'dest.hex'. LDmicro    
,    .   
     .      
LDmicro  .



======

 LDmicro         .
LDmicro       ,    
    .

   , 
    ( ->  ) 
`Xnew'.  'X' ,       MCU.
   ,    MCU  
.      . :

    * Xname --    MCU
    * Yname --    MCU
    * Rname -- ' :   
    * Tname -- ;    ,    ,  
    * Cname -- ,   (+)   (-)
    * Aname --  (integer 16bit)   
    * name  --    (integer 16bit)

     ,
     .     
     . ,     (TON) -
 'Tdelay'   (TOF) - 'Tdelay'    (  ),
         .   , 
   (RTO) - 'Tdelay'     (RES 
RTO/C)   - 'Tdelay',       
.

     ,     ' _ '.
      .   -
(   . ).

 (MOV, ADD, EQU  ..)     .
 ,         .
    , ,   ,
      .

  16  .  ,    
 -32768  32767.     .
        (0, 1234, -56).
       ASCII ('A', 'z'),  
  .    ASCII   
 ,     .

         .
     ;
     .   
  . 'XName','Yname'  'Aname' 
      MCU.    
  ( -> ).   
   /  (I/O),     .

        .
        
 .    ,   <Tab>   
.      ,   
        (  )
    (  ),   .
   . ,     
.

      (rung).    
,  " ->    / "   .
          
  .      .

     ,       ,
       HEX    .


==========

    ,  " ->  "  
<Ctrl+M>.   -   .   .
,   (TRUE)   , ,
   (FALSE)  .  <>, 
   .       , 
" ->  - ",   <Ctrl+R>.  
    ,   .

      ,  
      ,     
   'XName"  .   
          . 
,        ,   
  (  ).

   
=========================

     '.HEX' ,   
  MCU.      MCU,   " ->
".       /  
  'XName'  'Yname'.      
     .   ,   
    .

     ,     , 
   ,     MCU.  
   " ->  ...".   , 
    ; 10      
.    (    ..),
          "".

       .  " ->
",  " ->  ...".   , 
LDmicro c  Intel IHEX      .

    ,   "HEX"   MCU.
     ()!   PIC16, 
   "HEX" ,    "" 
.  AVR      .

 
=================

> CONTACT, NORMALLY OPEN
 ,      Xname           Rname          Yname
                              ---] [----     ----] [----    ----] [----

      .
    (    . )



> CONTACT, NORMALLY CLOSED
 ,     Xname           Rname          Yname
                             ----]/[----     ----]/[----    ----]/[----

      .
          ", "


> COIL, NORMAL
 ,                    Rname           Yname
                             ----( )----     ----( )----

     .
           ()

> COIL, NEGATED
 , .                 Rname           Yname
                             ----(/)----     ----(/)----

     .     " "
           ()


> COIL, SET-ONLY
 ,            Rname           Yname
                             ----(S)----     ----(S)----

          SET.
         ",  "
           ()


> COIL, RESET-ONLY
 ,              Rname           Yname
                             ----(R)----     ----(R)----

          RESET.
         ",  "
           ()


> TURN-ON DELAY
              Tdon
                           -[TON 1.000 s]-

         0->1    "0" 
    1 .      "1".    1->0
       "0" .    , 
      "0".   1 .  ( 
        , ..  . - 10 ms  
        10 ms .   .).

     'Tname'   "+"  0   TON.  
     'Tname',   'MOV'.
            ,   
     (. ).


> TURN-OFF DELAY
             Tdoff
                           -[TOF 1.000 s]-

         1->0    "1" 
    1 .      "0".    0->1
       "1" .    , 
      "1".   1 .  ( 
        , ..  . - 10 ms  
        10 ms .   .).

     'Tname'   "+"  0   TOF.  
     'Tname',   'MOV'.



> RETENTIVE TIMER
              Trto
                           -[RTO 1.000 s]-

         "1".  
    "1"   1 .,    "1".   
     , ..  "1" - 0.6,  "0" - 2,  
    "1" - 0.4,      "1" (..  
       "1" . ).  
        ,   "1",   ,
          RES ( RTO/).

     'Tname'   "+"  0   RTO.  
     'Tname',   'MOV'.



> RESET
 RESET                        Trto             Citems
                           ----{RES}----     ----{RES}----

         .   
    / -    .     
    ,     .  
    "1"  , "0"      
     .        ().
    Note! RES resets only numeric counter inside RTO, CTU/CTD,
    not their outputs!


> ONE-SHOT RISING
         _    _
                            --[_/ OSR/ \_]--

      :     .
     :    "0".    
      "1",       "0"  
      "1",       
       .    ,
        .

> ONE-SHOT FALLING
            _      _
                            --[ \_OSF/ \_]--

      :     .
     :    "0".    
      "0",       "1"  
      "1",       
       .    ,
        .


> SHORT CIRCUIT, OPEN CIRCUIT
 , 
                           ----+----+----      ----+     +----

       ,     .

> MASTER CONTROL RELAY
 -
                           -{MASTER RLY}-

            . 
      - "0",      
    "0" (    . ). 
      -    :    
    (  ),   .


> MOVE
 ()   {destvar :=  }      {Tret :=     }
                          -{ 123     MOV}-    -{ srcvar  MOV}-

        "1"    destvar
     (123)   (srcvar).   "0"  
    .   destvar ()    
    .    0   .    
       ().


> ARITHMETIC OPERATION
      {ADD  kay  :=}       {SUB  Ccnt :=}
                           -{ 'a' + 10   }-     -{ Ccnt - 10  }-

                            {MUL  dest :=}       {DIV  dv :=  }
                           -{ var * -990 }-     -{ dv / -10000}-

        "1",    
     .      (
      )  .  signed 16 bit.
    ,     '' "1" -  
       .   ,   
     ,      
       .    , 
    8 / 3 = 2.       ().

> COMPARE
              [var ==]        [var >]        [1 >=]
                      -[ var2 ]-      -[ 1   ]-      -[ Ton]-

                       [var !=]       [-4 <   ]       [1 <=]
                      -[ var2 ]-     -[ vartwo]-     -[ Cup]-
        "0"   "0".     "1" 
      "1",       .
           (,
    ,   ,  , ,   )
      ,     16- .

> COUNTER
                       Cname          Cname
                           --[CTU >=5]--  --[CTD > -5]--

      (CTU, +)   (CTD, -) 
    Cname       (.. 0->1).
     "1"   CTU >= 5 (CTD > -5),  "0"   .
        CTU  CTD    Cname.
       ,  . 
       RESET,   MOVE Cname->0 .
       -32768  32767,    0.

> CIRCULAR COUNTER
            Cname
                           --{CTC 0:7}--

          CTU,   ,
        ,    
      0. ,     : 0, 1,
    2, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 2,....   
       "=="   'CNAME '.   
     ,   .   
    Cname       (.. 0->1).
           ().


> SHIFT REGISTER
           {SHIFT REG   }
                           -{ reg0..3    }-

          (   -
     FIFO- . ).
    ,      'reg0', 'reg1', 'reg2'
    'reg3'.     'reg0' ( MOV 
    . ).       '0->1',
          .  , 
       : 'reg3: = reg2','reg2: = reg1'  'reg1: = reg0'.
    'reg0"   .       
     .        ().

> LOOK-UP TABLE
           {dest :=     }
                          -{ LUT[i]     }-

         16-  .
       "1" ,   'Dest'    
    LUT[i].   ,  "i"    0  (n-1).
        ,     
     .        ().

> PIECEWISE LINEAR TABLE
       {yvar :=     }
                          -{ PWL[xvar]  }-

           .   ,
    ,  ,      
             .
    ,     ,  
      "",    "".   
      , ,  , :

        f(0)   = 2
        f(5)   = 10
        f(10)  = 50
        f(100) = 100

      

        (x0, y0)   = (  0,   2)
        (x1, y1)   = (  5,  10)
        (x2, y2)   = ( 10,  50)
        (x3, y3)   = (100, 100)

       .     4   
    .   "xvar"   
    "yvar". ,    xvar = 10,  yvar = 50.

       xvar  ,    
       ,   yvar  
       ,      . ,
    xvar =  55   yvar = 75. (    - (10, 50)  (100, 100).
    55  10  100,  75   50  100,   (55, 75)  
    ,     .)

            "". 
          , 
         16-  , 
    LDmicro  . ,     :

        (x0, y0)    = (  0,   0)
        (x1, y1)    = (300, 300)

        ,      
    . ,     ,  
      :

        (x0, y0)    = (  0,   0)
        (x1, y1)    = (150, 150)
        (x2, y2)    = (300, 300)

    -          .
      .-  ,     
      . ,      'xvar'
       "x"    ,   ""
       .       
    ().

> A/D CONVERTER READ
                  Aname
                           --{READ ADC}--

    LDmicro        
     MCU.    "1",    
          'Aname'.  
          
    .        MCU    .
        ,   'Aname'  
    .

       , 0    .
       "0",    Vdd ( ) 
       "1023".    AVR,    AREF  Vdd.
          
     ,  ,     .
              .
          -    "  ".
           ().

> SET PWM DUTY CYCLE
 PWM                   duty_cycle
                           -{PWM 32.8 kHz}-

    LDmicro      -  
     MCU.    "1",   PWM   
      duty_cycle.    
     0  100. 0    ,  100 
      .

         ,  . ,   ,
         ,    ,   
       . LDmicro   
    .   ,    .   
      .

           ().
    -         
      .  PWM   MCU     2-
     . PWM   CCP2 ( CCP1)  PIC16  OC2 ( OC1A)
     AVR.

> MAKE PERSISTENT
      saved_var
                         --{PERSIST}--

        "1"    "saved_var" 
      EEPROM.  ,  "saved_var" ,   MCU
     .       
    . "saved_var"      .  
            ,
     -     EEPROM ~ 100000.
           ().

> UART (SERIAL) RECEIVE
   UART                 var
                           --{UART RECV}--

    LDmicro      UART   MCU.
     AVR    UART   UART1 ( UART0).
        " ->  ".
             
     . LDmicro  ,     .

        "0"    .    
    "1"        UART.
        ,   - "false".  
    ,  ASCII    'var'   
     - "true"      .

> UART (SERIAL) SEND
   UART              var
                           --{UART SEND}--

    LDmicro      UART   MCU.
     AVR    UART   UART1 ( UART0).
        " ->  ".
             
     . LDmicro  ,     .

        "0",    .    
    "1",       UART. ASCII  
         'var'.  
     - "true"  UART  (  . ), 
          UART  -  
    "false".

    ,       . 
       ,      
    ,   ,   ,  
       .    
    (    "true"),     "false",
    ..  UART  .

         (),  
      .    
      ,       ,  
    .

> FORMATTED STRING OVER UART
  C  UART         var
                                   -{"Pressure: \3\r\n"}-

    LDmicro      UART   MCU.
     AVR    UART   UART1 ( UART0).
        " ->  ".
             
     . LDmicro  ,     .

         (.. 0->1).  
       UART.     
     '\3' ( \1.. \5.. \10  .. . ), 
        "var",  
       .     ('\3') 
       3 , : 'var' = 35,  
     UART    - 'Pressure:  35\r\n' (  
        35).  'var' = 1432, 
      ,    1432  3- .
          '\4'.


      ,   '\-3d' ( `\-4d'
     ..).   LDmicro    
     ,   '-'  .

      (.. )   
     (    ,    )
         "  UART", 
      .

           , 
    -    .      
     '\xx'   .

      '\\'    "\".  
         :
        * \r   -- carriage return ( )
        * \n   -- newline ( )
        * \f   -- formfeed ( )
        * \b   -- backspace ()
        * \t   -- horizontal tab
        * \v   -- vertical tab
        * \a   -- alert
        * \xAB --  ASCII c   0xAB (hex)

      "1"    ,    "0".
           (,
       AVR  PIC16 -  . ).
         .
         ,   
        .


   
=====================================

,  LDmicro     16-bit .
 ,     ,  
     -32768  32767.   ,
        
  .

, ,      = (1 / ) * 1200,
 ""    1  20.  ""   1200  60 -
   16-  ,   
  .   ,   
 .   ,   :

   ||         {DIV  temp  :=}          ||
   ||---------{ 1 / x       }----------||
   ||                                  ||
   ||          {MUL  y  :=  }          ||
   ||----------{ temp * 1200}----------||
   ||                                  ||

   ,  :

   ||           {DIV  y  :=}           ||
   ||-----------{ 1200 / x }-----------||

,   ,    
: y = 0. ,   'temp'  .
,  x = 3,  (1 / x) = 0.333,    ; 
 temp = 0.  y = temp * 1200 = 0.    
  ,    OK.

      ,   
     0 (.  . ),  
 "" , : 32767 + 1 = -32768.  , 
    -100  100 (  signed char
. ).

       ,
   . ,     = 1.8*x,
  y = (9/5)*x ( ,   1.8 = 9/5), 
   y = (9*x)/5,   :

   ||         {MUL  temp  :=}          ||
   ||---------{ x * 9       }----------||
   ||                                  ||
   ||           {DIV  y  :=}           ||
   ||-----------{ temp / 5 }-----------||

       x < (32767 / 9)  x < 3640.  
 'x',  'temp'  .   
 x (        ,
. ).


 
======================


        .
 ,     -  :

   ||       Xa               Ya        ||
 1 ||-------] [--------------( )-------||
   ||                                  ||
   ||       Xb               Yb        ||
   ||-------] [------+-------( )-------||
   ||                |                 ||
   ||                |       Yc        ||
   ||                +-------( )-------||
   ||                                  ||

 :

   ||       Xa               Ya        ||
 1 ||-------] [--------------( )-------||
   ||                                  ||
   ||                                  ||
   ||                                  ||
   ||                                  ||
   ||       Xb               Yb        ||
 2 ||-------] [--------------( )-------||
   ||                                  ||
   ||                                  ||
   ||                                  ||
   ||                                  ||
   ||       Xb               Yc        ||
 3 ||-------] [--------------( )-------||
   ||                                  ||


 ,        
 ,       .
     ,  ,   
  ,        
 .

  ,    ,   
 ,   .     ,  
    .   ,   ,  
     .

                  *                 *                  *

 ,       , 
     . ,  
   ,    'Xa'  'Xb'  
(  Xb  "" Xa,    
. ):

   ||       Xa         {v  :=       }  ||
 1 ||-------] [--------{ 12      MOV}--||
   ||                                  ||
   ||       Xb         {v  :=       }  ||
   ||-------] [--------{ 23      MOV}--||
   ||                                  ||
   ||                                  ||
   ||                                  ||
   ||                                  ||
   ||      [v >]             Yc        ||
 2 ||------[ 15]-------------( )-------||
   ||                                  ||

      ,        
  . ,     4-
    'XB3:0'    'v':

   ||                                   {v  :=       }  ||
 3 ||-----------------------------------{ 0       MOV}--||
   ||                                                   ||
   ||       Xb0                  {ADD  v  :=}           ||
   ||-------] [------------------{ v + 1    }-----------||
   ||                                                   ||
   ||       Xb1                  {ADD  v  :=}           ||
   ||-------] [------------------{ v + 2    }-----------||
   ||                                                   ||
   ||       Xb2                  {ADD  v  :=}           ||
   ||-------] [------------------{ v + 4    }-----------||
   ||                                                   ||
   ||       Xb3                  {ADD  v  :=}           ||
   ||-------] [------------------{ v + 8    }-----------||
   ||                                                   ||


  MOV      
,  'v'     -   
 0.         
 .


======

LDmicro     ,     
 -   .   ,  
PIC  AVR   ,    ,     
 .

     .   
   ,      
  (    . ).

        ,
        MCU,    ,
 , ,     .   -
  .

    /  ('.ld'), ,
        '.ld' ( 
  LDmicro,     . ).

,       ..

:
    * Marcelo Solano, for reporting a UI bug under Win98
    * Serge V. Polubarjev, for not only noticing that RA3:0 on the
      PIC16F628 didn't work but also telling me how to fix it
    * Maxim Ibragimov, for reporting and diagnosing major problems
      with the till-then-untested ATmega16 and ATmega162 targets
    * Bill Kishonti, for reporting that the simulator crashed when the
      ladder logic program divided by zero
    * Mohamed Tayae, for reporting that persistent variables were broken
      on the PIC16F628
    * David Rothwell, for reporting several user interface bugs and a
      problem with the "Export as Text" function


,   
=======================================

  ,  LDMICRO  ,  
        
  .       
     LDMICRO  ,
 LDMICRO.

     :
    /     
GNU General Public License,  Free Software Foundation,
  3 ,  (  )    .

    ,    , 
 - .  GNU General Public License  
 .

    GNU General Public License 
  .  ,  <http://www.gnu.org/licenses/>.


COPYING, AND DISCLAIMER
=======================

DO NOT USE CODE GENERATED BY LDMICRO IN APPLICATIONS WHERE SOFTWARE
FAILURE COULD RESULT IN DANGER TO HUMAN LIFE OR DAMAGE TO PROPERTY. THE
AUTHOR ASSUMES NO LIABILITY FOR ANY DAMAGES RESULTING FROM THE OPERATION
OF LDMICRO OR CODE GENERATED BY LDMICRO.

This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License along
with this program. If not, see <http://www.gnu.org/licenses/>.


Jonathan Westhues

Rijswijk      -- Dec 2004
Waterloo ON   -- Jun, Jul 2005
Cambridge MA  -- Sep, Dec 2005
                 Feb, Mar 2006
                 Feb 2007
Seattle WA    -- Feb 2009

Email: user jwesthues, at host cq.cx



:  ..
  06.2011..


