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

📄 pyzc2.lst

📁 基于80196KB开发的C程序,在伟福和星研环境中编译通过,用于学习8096系列单片机的中断编程技术.并成功地用于某地机动车检测业务.
💻 LST
📖 第 1 页 / 共 4 页
字号:
  139     2                                   transmitting.  */
  14      2          }
  141     1       }
          006B  CC00               E         pop     ?FRAME01
          006D  F0                           ret     
                                      
                ; Function Statistics for: putchar
                ;    Code Size :   66     Parameter Count:   1
                ;    Stack Size:         Parameter Size :   2
                ;    OReg Size :         Stack Depth    :   2

  142             
  143             unsigned char getchar()
  144             {
C196  Compiler   pyzc2                                                                      13-Dec-106 22:07:20  Page   5
                 Assembly Listing of Object Code


          006E                        getchar: 
          006E  2000                         br      @000F
          0070                        @000E: 
  145     1       while(begin_rec_buff==end_rec_buff);  /*  remain in loop while there is
          0070                        @000F: 
          0070  980506             R         cmpb    begin_rec_buff,end_rec_buff
          0073  DFFB                         be      @000E
  146     1                        not a character avaliable. */
  147     1       if(++begin_rec_buff>RECEIVE_BUF_SIZE - 1)  /*  make buffer appear    */
          0075  1706               R         incb    begin_rec_buff
          0077  991306             R         cmpb    begin_rec_buff,#13H
          007A  DA02                         ble     @0011
  148     1            begin_rec_buff=0;                     /*  circular.  */
          007C  1106               R         clrb    begin_rec_buff
          007E                        @0011: 
  149     1       return(receive_buff[begin_rec_buff]);      /*  return the character in
          007E  BC061C             R         ldbse   Tmp0,begin_rec_buff
          0081  B31D14001C         R         ldb     Tmp0,receive_buff[Tmp0]
          0086  2000                         br      @000D
  15      1                                            buffer.    */
  151     1       }
          0088                        @000D: 
          0088  F0                           ret     
                                      
                ; Function Statistics for: getchar
                ;    Code Size :   27     Parameter Count:   
                ;    Stack Size:         Parameter Size :   
                ;    OReg Size :         Stack Depth    :   

  152             
  153             void receive(void)              /*  serial interrupt routine  */
  154             {
          0089                        receive: 
          0089  C800               R         push    ?OVRBASE
  155     1        unsigned char c;   
  156     1       sp_status_image |= sp_stat;       /*  image sp_stat into status_image  */
          008B  900002             E         orb     sp_status_image,sp_stat
  157     1       
  158     1       /*   If the input buffer is full, the last character can be handled
  159     1            as desired.  */
  16      1       
  161     1        if(end_rec_buff+1==begin_rec_buff || (end_rec_buff==RECEIVE_BUF_SIZE-1 &&
  162     1                !begin_rec_buff))
          008E  BC051C             R         ldbse   Tmp0,end_rec_buff
          0091  071C                         inc     Tmp0
          0093  BC061E             R         ldbse   Tmp2,begin_rec_buff
          0096  881E1C                       cmp     Tmp0,Tmp2
          0099  DF0A                         be      @0014
          009B  991305             R         cmpb    end_rec_buff,#13H
          009E  D707                         bne     @0013
          00A0  980600             R         cmpb    R0,begin_rec_buff
          00A3  D702                         bne     @0013
          00A5                        @0014: 
  163     1           {
  164     2            ;  /*  input overrun code  */
  165     2           }
C196  Compiler   pyzc2                                                                      13-Dec-106 22:07:20  Page   6
                 Assembly Listing of Object Code


  166     1       else
          00A5  20AB                         br      @0015
          00A7                        @0013: 
  167     1           {
  168     2       
  169     2       /*   The next statement makes the buffer circular by starting over when the
  17      2            index reaches the end of the buffer.   */
  171     2       
  172     2            if(++end_rec_buff > RECEIVE_BUF_SIZE - 1) end_rec_buff=0;
          00A7  1705               R         incb    end_rec_buff
          00A9  991305             R         cmpb    end_rec_buff,#13H
          00AC  DA02                         ble     @0016
          00AE  1105               R         clrb    end_rec_buff
          00B0                        @0016: 
  173     2            receive_buff[end_rec_buff]=sbuf;  /*    place character in
          00B0  BC051C             R         ldbse   Tmp0,end_rec_buff
          00B3  C71D140000         E         stb     sbuf,receive_buff[Tmp0]
  174     2                                                     buffer  */
  175     2            if(receive_buff[end_rec_buff]==0x45 && receive_buff[(end_rec_buff+RECEIVE_BUF_SIZE-1)%RECEIVE_BUF
                -_SIZE]==0x00 && receive_buff[(end_rec_buff+RECEIVE_BUF_SIZE-5)%RECEIVE_BUF_SIZE]==0x53)
          00B8  B31D14001C         R         ldb     Tmp0,receive_buff[Tmp0]
          00BD  99451C                       cmpb    Tmp0,#45H
          00C0  D773                         bne     @0017
          00C2  BC051C             R         ldbse   Tmp0,end_rec_buff
          00C5  6513001C                     add     Tmp0,#13H
          00C9  061C                         ext     Tmp0
          00CB  FE8D14001C                   div     Tmp0,#14H
          00D0  9B1F140000         R         cmpb    R0,receive_buff[Tmp2]
          00D5  D75E                         bne     @0017
          00D7  BC051C             R         ldbse   Tmp0,end_rec_buff
          00DA  650F001C                     add     Tmp0,#0FH
          00DE  061C                         ext     Tmp0
          00E0  FE8D14001C                   div     Tmp0,#14H
          00E5  B31F14001E         R         ldb     Tmp2,receive_buff[Tmp2]
          00EA  99531E                       cmpb    Tmp2,#53H
          00ED  D746                         bne     @0017
  176     2            {
  177     3             triggle_in=1;
          00EF  B10102             R         ldb     triggle_in,#1
  178     3             mess[1]=~mess[1];
          00F2  AF0101001C         R         ldbze   Tmp0,mess+1
          00F7  021C                         not     Tmp0
          00F9  C70101001C         R         stb     Tmp0,mess+1
  179     3             pwm0_byte=receive_buff[(end_rec_buff+RECEIVE_BUF_SIZE-4)%RECEIVE_BUF_SIZE];
          00FE  BC051C             R         ldbse   Tmp0,end_rec_buff
          0101  4510001C20                   add     Tmp4,Tmp0,#1
          0106  0620                         ext     Tmp4
          0108  FE8D140020                   div     Tmp4,#14H
          010D  B323140007         R         ldb     pwm0_byte,receive_buff[Tmp6]
  18      3             ioport1_byte=receive_buff[(end_rec_buff+RECEIVE_BUF_SIZE-3)%RECEIVE_BUF_SIZE];
          0112  6511001C                     add     Tmp0,#11H
          0116  061C                         ext     Tmp0
          0118  FE8D14001C                   div     Tmp0,#14H
          011D  B31F140008         R         ldb     ioport1_byte,receive_buff[Tmp2]
  181     3             hso_byte=receive_buff[(end_rec_buff+RECEIVE_BUF_SIZE-2)%RECEIVE_BUF_SIZE];    
          0122  BC051C             R         ldbse   Tmp0,end_rec_buff
C196  Compiler   pyzc2                                                                      13-Dec-106 22:07:20  Page   7
                 Assembly Listing of Object Code


          0125  6512001C                     add     Tmp0,#12H
          0129  061C                         ext     Tmp0
          012B  FE8D14001C                   div     Tmp0,#14H
          0130  B31F140009         R         ldb     hso_byte,receive_buff[Tmp2]
          0135                        @0017: 
  182     3            } 
  183     2            c=getchar(); //Discard a char,since now deal it in serial_in_interrupt.
          0135  2F37                         call    getchar
          0137  B01C00             R         ldb     c,Tmp0
  184     2            if(checkbit(sp_status_image, FE_BIT))
          013A  5110021C           R         andb    Tmp0,sp_status_image,#1
          013E  981C00                       cmpb    R0,Tmp0
          0141  DF03                         be      @0018
  185     2                 {
  186     3                 ;    /*  User code for framing error  */
  187     3                 clrbit(sp_status_image, FE_BIT);
          0143  71EF02             R         andb    sp_status_image,#0EFH
          0146                        @0018: 
  188     3                 } 
  189     2            if(checkbit(sp_status_image, OE_BIT))
          0146  5104021C           R         andb    Tmp0,sp_status_image,#4
          014A  981C00                       cmpb    R0,Tmp0
          014D  DF03                         be      @0019
  19      2                 {
  191     3                 ;    /*  User code for overrun error  */
  192     3                 clrbit(sp_status_image, OE_BIT);
          014F  71FB02             R         andb    sp_status_image,#0FBH
          0152                        @0019: 
          0152                        @0015: 
  193     3                 } 
  194     2           }
  195     1        clrbit(sp_status_image,RI_BIT);   /*  clear RI bit in status_image.  */
          0152  71BF02             R         andb    sp_status_image,#0BFH
  196     1       }
          0155  CC00               R         pop     ?OVRBASE
          0157  F0                           ret     
                                      
                ; Function Statistics for: receive
                ;    Code Size :  2     Parameter Count:   
                ;    Stack Size:         Parameter Size :   
                ;    OReg Size :    1     Stack Depth    :   4

  197             
  198             /*   The seperate txd and rxd interrupts can more efficiently process
  199                  the interrupts than the generic serial interrupt as this one 
  2                    does.
  2               */                 
  2               
  2               void serial_isr(void)
  2               {
          0158                        serial_isr: 
          0158  F2                           pushf   
          0159  C81C                         push    Tmp0
          015B  C81E                         push    Tmp2
          015D  C820                         push    Tmp4
          015F  C822                         push    Tmp6
C196  Compiler   pyzc2                                                                      13-Dec-106 22:07:20  Page   8
                 Assembly Listing of Object Code


  2       1       sp_status_image |= sp_stat;       /*  image sp_stat into status_image  */
          0161  900002             E         orb     sp_status_image,sp_stat
  2       1       
  2       1       if(checkbit(sp_status_image, RI_BIT))
          0164  5140021C           R         andb    Tmp0,sp_status_image,#4
          0168  981C00                       cmpb    R0,Tmp0
          016B  DF04                         be      @001B
  2       1            receive();
          016D  2F1A                         call    receive
  2       1       else if(checkbit(sp_status_image, TI_BIT))
          016F  200B                         br      @001C
          0171                        @001B: 
          0171  5120021C           R         andb    Tmp0,sp_status_image,#2
          0175  981C00                       cmpb    R0,Tmp0
          0178  DF02                         be      @001D
  21      1            transmit();
          017A  2E93                         call    transmit
          017C                        @001D: 
          017C                        @001C: 
  211     1       }
          017C  CC22                         pop     Tmp6
          017E  CC20                         pop     Tmp4
          0180  CC1E                         pop     Tmp2
          0182  CC1C                         pop     Tmp0
          0184  F3                           popf    
          0185  F0                           ret     
                                      
                ; Function Statistics for: serial_isr

⌨️ 快捷键说明

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