⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exp1.lst

📁 《单片机仿真入门实用教程》实例(包括源代码) 单片机仿真教程。
💻 LST
📖 第 1 页 / 共 2 页
字号:
   \   000000C0   9100....           LDS     R16, time_left
   \   000000C4   2300               TST     R16
   \   000000C6   F031               BREQ    ??Do_States_10
     85                  {
     86                      --time_left;
   \   000000C8   ....               LDI     R30, time_left
   \   000000CA   E0F0               LDI     R31, 0
   \   000000CC   8100               LD      R16, Z
   \   000000CE   950A               DEC     R16
   \   000000D0   8300               ST      Z, R16
     87                      return;                 //return to main
   \   000000D2   9508               RET
     88                  }                           //time expired, so..
     89                  time_left=5;                //give 5 seconds to WARNING
   \                     ??Do_States_10:
   \   000000D4   E005               LDI     R16, 5
   \   000000D6   9300....           STS     time_left, R16
     90                  current_state=NS_WARNING;   //time expired, move
   \   000000DA   E003               LDI     R16, 3
   \   000000DC   E010               LDI     R17, 0
   \   000000DE   ....               LDI     R30, current_state
   \   000000E0   E0F0               LDI     R31, 0
   \   000000E2   8300               ST      Z, R16
   \   000000E4   8311               STD     Z+1, R17
   \   000000E6   9508               RET
     91                  break;                      //to the next state
     92            
     93            case  NS_WARNING:
     94                  EW_GRN_LITE=0;
   \                     ??Do_States_11:
   \   000000E8   98C2               CBI     0x18, 0x02
     95                  NS_GRN_LITE=0;
   \   000000EA   98C5               CBI     0x18, 0x05
     96                  NS_RED_LITE=0;              //north-south has the yellow..
   \   000000EC   98C3               CBI     0x18, 0x03
     97                  EW_RED_LITE=1;
   \   000000EE   9AC0               SBI     0x18, 0x00
     98                  EW_YEL_LITE=0;              //and east-west has the red..
   \   000000F0   98C1               CBI     0x18, 0x01
     99                  NS_YEL_LITE=1;
   \   000000F2   9AC4               SBI     0x18, 0x04
    100            
    101                  if(time_left!=0)            //count down the time
   \   000000F4   9100....           LDS     R16, time_left
   \   000000F8   2300               TST     R16
   \   000000FA   F031               BREQ    ??Do_States_12
    102                  {
    103                      --time_left;
   \   000000FC   ....               LDI     R30, time_left
   \   000000FE   E0F0               LDI     R31, 0
   \   00000100   8100               LD      R16, Z
   \   00000102   950A               DEC     R16
   \   00000104   8300               ST      Z, R16
    104                      return;                 //return to main
   \   00000106   9508               RET
    105                  }                           //time expired, so..
    106                  if(FOUR_WAY_STOP)           //if 4-way requested then start
   \                     ??Do_States_12:
   \   00000108   9BCB               SBIS    0x19, 0x03
   \   0000010A   C007               RJMP    ??Do_States_13
    107                      current_state=FLASHER;  //the flasher
   \   0000010C   E004               LDI     R16, 4
   \   0000010E   E010               LDI     R17, 0
   \   00000110   ....               LDI     R30, current_state
   \   00000112   E0F0               LDI     R31, 0
   \   00000114   8300               ST      Z, R16
   \   00000116   8311               STD     Z+1, R17
   \   00000118   9508               RET
    108                  else                        //otherwise..
    109                  {
    110                      time_left=30;           //give 30 seconds to MOVING
   \                     ??Do_States_13:
   \   0000011A   E10E               LDI     R16, 30
   \   0000011C   9300....           STS     time_left, R16
    111                      current_state=EW_MOVING;
   \   00000120   E000               LDI     R16, 0
   \   00000122   E010               LDI     R17, 0
   \   00000124   ....               LDI     R30, current_state
   \   00000126   E0F0               LDI     R31, 0
   \   00000128   8300               ST      Z, R16
   \   0000012A   8311               STD     Z+1, R17
   \   0000012C   9508               RET
    112                  }                           //time expired, move
    113                  break;                      //to the next state
    114            
    115            case  FLASHER:
    116                  EW_GRN_LITE=0;              //all yellow and
   \                     ??Do_States_14:
   \   0000012E   98C2               CBI     0x18, 0x02
    117                  NS_GRN_LITE=0;              //green lites off
   \   00000130   98C5               CBI     0x18, 0x05
    118                  EW_YEL_LITE=0;
   \   00000132   98C1               CBI     0x18, 0x01
    119                  NS_YEL_LITE=0;
   \   00000134   98C4               CBI     0x18, 0x04
    120            
    121                  flash_toggle^=1;            //toggle LSB..
   \   00000136   E001               LDI     R16, 1
   \   00000138   ....               LDI     R30, flash_toggle
   \   0000013A   E0F0               LDI     R31, 0
   \   0000013C   8110               LD      R17, Z
   \   0000013E   2710               EOR     R17, R16
   \   00000140   8310               ST      Z, R17
    122                  if(flash_toggle&1)
   \   00000142   ....               LDI     R30, flash_toggle
   \   00000144   E0F0               LDI     R31, 0
   \   00000146   8100               LD      R16, Z
   \   00000148   FF00               SBRS    R16, 0
   \   0000014A   C003               RJMP    ??Do_States_15
    123                  {
    124                      NS_RED_LITE=1;          //blink red lights
   \   0000014C   9AC3               SBI     0x18, 0x03
    125                      EW_RED_LITE=0;
   \   0000014E   98C0               CBI     0x18, 0x00
   \   00000150   C002               RJMP    ??Do_States_16
    126                  }
    127                  else
    128                  {
    129                      NS_RED_LITE=0;          //alternately
   \                     ??Do_States_15:
   \   00000152   98C3               CBI     0x18, 0x03
    130                      EW_RED_LITE=1;
   \   00000154   9AC0               SBI     0x18, 0x00
    131                  }
    132                  if(!FOUR_WAY_STOP)          //if no longer a 4-way stop
   \                     ??Do_States_16:
   \   00000156   99CB               SBIC    0x19, 0x03
   \   00000158   C00D               RJMP    ??Do_States_17
    133                      current_state=EW_WARNING;
   \   0000015A   E001               LDI     R16, 1
   \   0000015C   E010               LDI     R17, 0
   \   0000015E   ....               LDI     R30, current_state
   \   00000160   E0F0               LDI     R31, 0
   \   00000162   8300               ST      Z, R16
   \   00000164   8311               STD     Z+1, R17
   \   00000166   9508               RET
    134                  break;                      //then return to normal
    135            default:
    136                      current_state=NS_WARNING;
   \                     ??Do_States_18:
   \   00000168   E003               LDI     R16, 3
   \   0000016A   E010               LDI     R17, 0
   \   0000016C   ....               LDI     R30, current_state
   \   0000016E   E0F0               LDI     R31, 0
   \   00000170   8300               ST      Z, R16
   \   00000172   8311               STD     Z+1, R17
   \                     ??Do_States_17:
   \   00000174   9508               RET
    137                  break;                      //set any unknown state to a good one!!
    138            }
    139          }
    140          

   \                                 In segment CODE, align 2, keep-with-next
    141          void  main(void)
   \                     main:
    142          {
    143                DDRB=0xFF;                    //portb all out
   \   00000000   EF0F               LDI     R16, 255
   \   00000002   BB07               OUT     0x17, R16
    144                DDRA=0x00;                    //porta all in
   \   00000004   E000               LDI     R16, 0
   \   00000006   BB0A               OUT     0x1A, R16
    145          
    146                current_state=NS_WARNING;     //initialize to a good starting
   \   00000008   E003               LDI     R16, 3
   \   0000000A   E010               LDI     R17, 0
   \   0000000C   ....               LDI     R30, current_state
   \   0000000E   E0F0               LDI     R31, 0
   \   00000010   8300               ST      Z, R16
   \   00000012   8311               STD     Z+1, R17
    147                                              //state (as safe as possible)
    148                while(1)
    149                {
    150                    __delay_cycles(100000);     //1 second delay.., this time could
   \                     ??main_0:
   \   00000014   EA07               LDI     R16, 167
   \   00000016   E611               LDI     R17, 97
   \   00000018   5001               SUBI    R16, 1
   \   0000001A   4010               SBCI    R17, 0
   \   0000001C   F7E9               BRNE    $-4
   \   0000001E   C000               RJMP    $+2
   \   00000020   0000               NOP
    151                                              //be used for other needed processes
    152                    Do_States();              //call the state machine, it knows
   \   00000022   ....               RCALL   Do_States
   \   00000024   CFF7               RJMP    ??main_0
    153                                              //where it is and what to do next
    154                }
    155          }

   \                                 In segment SWITCH, align 2, keep-with-next
   \                     `?<Jumptable for Do_States>_0`:
   \   00000000   0000               DW      0
   \   00000002   00                 DB      0
   \   00000003   ....               DW      (??Do_States_18) /2
   \   00000005   0005               DW      5
   \   00000007   ....               DW      (??Do_States_0) /2
   \   00000009   ....               DW      (??Do_States_4) /2
   \   0000000B   ....               DW      (??Do_States_7) /2
   \   0000000D   ....               DW      (??Do_States_11) /2
   \   0000000F   ....               DW      (??Do_States_14) /2
   \   00000011   00                 DB      0

   Maximum stack usage in bytes:

     Function       CSTACK RSTACK
     --------       ------ ------
     Do_States          0      2
     main               0      2
       -> Do_States     0      2


   Segment part sizes:

     Function/Label               Bytes
     --------------               -----
     _A_DDRB                         1
     _A_PORTB                        1
     _A_PINA                         1
     _A_DDRA                         1
     time_left                       1
     current_state                   2
     flash_toggle                    1
     Do_States                     374
     main                           38
     ?<Jumptable for Do_States>_0   18
      Others                         6

 
   4 bytes in segment ABSOLUTE
 412 bytes in segment CODE
   6 bytes in segment INITTAB
  18 bytes in segment SWITCH
   4 bytes in segment TINY_Z
 
 430 bytes of CODE memory (+ 6 bytes shared)
   4 bytes of DATA memory (+ 4 bytes shared)

Errors: none
Warnings: none

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -