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

📄 pyzc3.lst

📁 基于80196KB开发的C程序,在伟福和星研环境中编译通过,用于学习8096系列单片机的中断编程技术.并成功地用于某地机动车检测业务.
💻 LST
📖 第 1 页 / 共 4 页
字号:
          007E                        @0011: 
  156     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
  157     1                                            buffer.    */
  158     1       }
          0088                        @000D: 
          0088  F0                           ret     
                                      
                ; Function Statistics for: getchar
                ;    Code Size :   27     Parameter Count:   
                ;    Stack Size:         Parameter Size :   
                ;    OReg Size :         Stack Depth    :   

  159             
  16              void receive(void)              /*  serial interrupt routine  */
  161             {
          0089                        receive: 
          0089  C800               R         push    ?OVRBASE
  162     1        unsigned char c;   
  163     1       sp_status_image |= sp_stat;       /*  image sp_stat into status_image  */
          008B  900002             E         orb     sp_status_image,sp_stat
  164     1       
  165     1       /*   If the input buffer is full, the last character can be handled
  166     1            as desired.  */
  167     1       
  168     1        if(end_rec_buff+1==begin_rec_buff || (end_rec_buff==RECEIVE_BUF_SIZE-1 &&
  169     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
C196  Compiler   pyzc3                                                                      14-Dec-106 09:06:41  Page   6
                 Assembly Listing of Object Code


          009E  D707                         bne     @0013
          00A0  980600             R         cmpb    R0,begin_rec_buff
          00A3  D702                         bne     @0013
          00A5                        @0014: 
  17      1           {
  171     2            ;  /*  input overrun code  */
  172     2           }
  173     1       else
          00A5  20AB                         br      @0015
          00A7                        @0013: 
  174     1           {
  175     2       
  176     2       /*   The next statement makes the buffer circular by starting over when the
  177     2            index reaches the end of the buffer.   */
  178     2       
  179     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: 
  18      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]
  181     2                                                     buffer  */
  182     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
  183     2            {
  184     3             triggle_in=1;
          00EF  B10102             R         ldb     triggle_in,#1
  185     3             mess[8]=mess[8]+1;
          00F2  B30108001C         R         ldb     Tmp0,mess+8
          00F7  171C                         incb    Tmp0
          00F9  C70108001C         R         stb     Tmp0,mess+8
  186     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]
C196  Compiler   pyzc3                                                                      14-Dec-106 09:06:41  Page   7
                 Assembly Listing of Object Code


  187     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]
  188     3             hso_byte=receive_buff[(end_rec_buff+RECEIVE_BUF_SIZE-2)%RECEIVE_BUF_SIZE];    
          0122  BC051C             R         ldbse   Tmp0,end_rec_buff
          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: 
  189     3            } 
  19      2            c=getchar(); //Discard a char,since now deal it in serial_in_interrupt.
          0135  2F37                         call    getchar
          0137  B01C00             R         ldb     c,Tmp0
  191     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
  192     2                 {
  193     3                 ;    /*  User code for framing error  */
  194     3                 clrbit(sp_status_image, FE_BIT);
          0143  71EF02             R         andb    sp_status_image,#0EFH
          0146                        @0018: 
  195     3                 } 
  196     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
  197     2                 {
  198     3                 ;    /*  User code for overrun error  */
  199     3                 clrbit(sp_status_image, OE_BIT);
          014F  71FB02             R         andb    sp_status_image,#0FBH
          0152                        @0019: 
          0152                        @0015: 
  2       3                 } 
  2       2           }
  2       1        clrbit(sp_status_image,RI_BIT);   /*  clear RI bit in status_image.  */
          0152  71BF02             R         andb    sp_status_image,#0BFH
  2       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

  2               
  2               /*   The seperate txd and rxd interrupts can more efficiently process
  2                    the interrupts than the generic serial interrupt as this one 
  2                    does.
  2               */                 
  2               
  21              void serial_isr(void)
C196  Compiler   pyzc3                                                                      14-Dec-106 09:06:41  Page   8
                 Assembly Listing of Object Code


  211             {
          0158                        serial_isr: 
          0158  F2                           pushf   
          0159  C81C                         push    Tmp0
          015B  C81E                         push    Tmp2
          015D  C820                         push    Tmp4
          015F  C822                         push    Tmp6
  212     1       sp_status_image |= sp_stat;       /*  image sp_stat into status_image  */
          0161  900002             E         orb     sp_status_image,sp_stat
  213     1       
  214     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
  215     1            receive();
          016D  2F1A                         call    receive
  216     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
  217     1            transmit();
          017A  2E93                         call    transmit
          017C                        @001D: 
          017C                        @001C: 
  218     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
                ;    Code Size :   46     Parameter Count:   
                ;    Stack Size:         Parameter Size :   
                ;    OReg Size :         Stack Depth    :  18

  219             
  22              void init_serial()
  221             {
          0186                        init_serial: 
  222     1       
  223     1       /*
  224     1       * Serial port configuration:
  225     1       *   serial mode     = 1
  226     1       *   even parity     = disabled
  227     1       *   serial receive  = enabled
  228     1       *   serial transmit = enabled
  229     1       */
  23      1       
  231     1         _SetSFR_bit (ioc1, TXD_ENABLE_BIT);
          0186  B10F00             E         ldb     wsr,#0FH
          0189  B00000             E         ldb     tmpreg,ioc1
          018C  912000             R         orb     tmpreg,#2
C196  Compiler   pyzc3                                                                      14-Dec-106 09:06:41  Page   9
                 Assembly Listing of Object Code


          018F  1101               R         clrb    tmpreg+1
          0191  1100               E         clrb    wsr
          0193  B00000             E         ldb     ioc1,tmpreg
  232     1         _WriteSFR   (sp_con, 0x9);
          0196  1100               E         clrb    wsr
          0198  B10900             E         ldb     sp_con,#9
  233     1       
  234     1       /*
  235     1       * Baud Rate = 0
  236     1       */
  237     1       
  238     1         _WriteSFR   (baud_rate, 0x70);
          019B  1100               E         clrb    wsr
          019D  B17000             E         ldb     baud_rate,#7
  239     1         _WriteSFR   (baud_rate, 0x82);
          01A0  1100               E         clrb    wsr
          01A2  B18200             E         ldb     baud_rate,#82H
  24      1       
  241     1       /*
  242     1       * Interrupts:
  243     1       *   transmit interrupt = disabled
  244     1       *   receive interrupt  = disabled
  245     1       *   serial interrupt   = enabled
  246     1       */
  247     1       
  248     1         _SetSFR_bit (int_mask, SERIAL_INT);
          01A5  2000                         br      @0024
          01A7                        @0024: 
          01A7  B00000             E         ldb     tmpreg,int_mask
          01AA  914000             R         orb     tmpreg,#4
          01AD  1101               R         clrb    tmpreg+1
          01AF  2000                         br      @0025
          01B1                        @0025: 
          01B1  B00000             E         ldb     int_mask,tmpreg
  249     1         _ClrSFR_bit (int_mask1, TXD_INTERRUPT);
          01B4  2000                         br      @0026
          01B6                        @0026: 
          01B6  AC0000             E         ldbze   tmpreg,imask1
          01B9  61FEFF00           R         and     tmpreg,#0FFFEH
          01BD  2000                         br      @0027
          01BF                        @0027: 
          01BF  B00000             E         ldb     imask1,tmpreg
  25      1         _ClrSFR_bit (int_mask1, RXD_INTERRUPT);
          01C2  2000                         br      @0028
          01C4                        @0028: 
          01C4  AC0000             E         ldbze   tmpreg,imask1

⌨️ 快捷键说明

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