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

📄 24cxx.lst

📁 基于msc单片机仿真机的仿真程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  24CXX                                                                09/16/2006 15:07:00 PAGE     1


MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN 24CXX.OBJ
ASSEMBLER INVOKED BY: D:\Keil\C51\BIN\A51.EXE 24CXX.ASM SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

  0094                 1             SDA             BIT     P1.4    ;I2C总线定义
  00B7                 2             SCL             BIT     P3.7
  0040                 3             MTD             EQU     40H     ;写数据缓冲器
  0049                 4             MRD             EQU     49H     ;读数据缓冲区
                       5             
                       6     ;-------;定义器件地址,
  00A0                 7             CSI24WC02       EQU     0A0H    ;器件地址
  0010                 8             ACK             BIT     10H     ;应答标志位
  0050                 9             SLA             DATA    50H     ;器件的从地址
  0051                10             SUBA            DATA    51H     ;器件的子地址
  0052                11             NUMBYTE         DATA    52H     ;读/写的字节数变量
                      12     
0000                  13             ORG             0000H
0000 020100           14             LJMP    MAIN
0100                  15             ORG             0100H
                      16     
                      17     ;-------主程序如下:
0100                  18     MAIN:
0100 758170           19             MOV     SP,#70H 
0103 12012C           20             LCALL   DELAY
                      21     
0106 754015           22             MOV     MTD,#15H
0109 75418A           23             MOV     MTD+1,#8AH
010C 7550A0           24             MOV     SLA,#CSI24WC02  ;指定器件地址
010F 755100           25             MOV     SUBA,#00H       ;指定子地址
0112 755202           26             MOV     NUMBYTE,#02H    ;写2字节数据
0115 120225           27             LCALL   IWRNBYTE        ;调用写2字节数据程序
                      28     
0118 12012C           29             LCALL   DELAY
                      30     
011B 7550A0           31             MOV     SLA,#CSI24WC02  ;指定器件地址
011E 755100           32             MOV     SUBA,#00H       ;指定子地址
0121 755202           33             MOV     NUMBYTE,#02H    ;读2字节数据
0124 120251           34             LCALL   IRDNBYTE        ;调用读2字节数据程序
0127 12012C           35             LCALL   DELAY
012A 80FE             36             SJMP    $
                      37     
012C                  38     DELAY:
012C 7F00             39             MOV     R7,#00H
012E DF01             40     MIN:    DJNZ    R7,YS500
0130 22               41             RET
0131 120137           42     YS500:  LCALL   YS500US
0134 02012E           43             LJMP    MIN
0137 7E00             44     YS500US:MOV     R6,#00H
0139 DEFE             45             DJNZ    R6,$
013B 22               46             RET
013C 7F20             47     DELAY1: MOV     R7,#20H
013E DFFE             48             DJNZ    R7,$
0140 22               49             RET
                      50     ;------------------------------------------------------------------------------------------
                             --------------
                      51     ;                 MCS-51单片机模拟I2C软件包(V1.1)
                      52     ;    文件名:VI2C_ASM.INC
                      53     ;    功能说明:本模拟I2C软件包包含了I2C操作的底层子程序,使用前要定义
                      54     ;好SCL和SDA。在标准8051模式(12 Clock)下,对主频要求是不高于12MHz(即1个
                      55     ;机器周期1us);若Fosc>12MHz则要增加相应的NOP指令数。(总线时序符合I2C标
                      56     ;准模式,100Kbit/S)
                      57     ;    版本说明:本版新增了两个子程序,IWRNBYTEEXT,IRDNBYTEEXT两个子程序,
A51 MACRO ASSEMBLER  24CXX                                                                09/16/2006 15:07:00 PAGE     2

                      58     ;这两个子程序用于主从通讯上及一此特殊器件的读写操作较为方便.
                      59     ;                                         更新时间:2002.06.04
                      60     ;------------------------------------------------------------------------------------------
                             --------------
                      61     
                      62     ;启动I2C总线子程序      
0141 D294             63     START:    SETB  SDA
0143 00               64               NOP
0144 D2B7             65               SETB  SCL                             ;起始条件建立时间大于4.7us
0146 00               66               NOP
0147 00               67               NOP
0148 00               68               NOP
0149 00               69               NOP
014A 00               70               NOP
014B C294             71               CLR   SDA      
014D 00               72               NOP                                   ;起始条件锁定时大于4us
014E 00               73               NOP
014F 00               74               NOP
0150 00               75               NOP
0151 00               76               NOP
0152 C2B7             77               CLR   SCL                             ;钳住总线,准备发数据
0154 00               78               NOP
0155 22               79               RET
                      80     
                      81     ;结束总线子程序
0156 C294             82     STOP:     CLR    SDA
0158 00               83               NOP
0159 D2B7             84               SETB   SCL                            ;发送结束条件的时钟信号
015B 00               85               NOP                                   ;结束总线时间大于4us
015C 00               86               NOP            
015D 00               87               NOP
015E 00               88               NOP
015F 00               89               NOP
0160 D294             90               SETB  SDA                             ;结束总线
0162 00               91               NOP                                   ;保证一个终止信号和起始信号的空闲时间大于4.
                             7us
0163 00               92               NOP
0164 00               93               NOP
0165 00               94               NOP
0166 22               95               RET
                      96     
                      97     ;发送应答信号子程序
0167 C294             98     MACK:     CLR   SDA                             ;将SDA置0 
0169 00               99               NOP
016A 00              100               NOP
016B D2B7            101               SETB  SCL
016D 00              102               NOP                                   ;保持数据时间,即SCL为高时间大于4.7us
016E 00              103               NOP
016F 00              104               NOP
0170 00              105               NOP
0171 00              106               NOP
0172 C2B7            107               CLR   SCL
0174 00              108               NOP
0175 00              109               NOP
0176 22              110               RET
                     111     
                     112     ;发送非应答信号
0177 D294            113     MNACK:    SETB  SDA                             ;将SDA置1 
0179 00              114               NOP
017A 00              115               NOP
017B D2B7            116               SETB  SCL
017D 00              117               NOP
017E 00              118               NOP                                   ;保持数据时间,即SCL为高时间大于4.7us
017F 00              119               NOP
0180 00              120               NOP
0181 00              121               NOP
A51 MACRO ASSEMBLER  24CXX                                                                09/16/2006 15:07:00 PAGE     3

0182 C2B7            122               CLR   SCL
0184 00              123               NOP
0185 00              124               NOP
0186 22              125               RET
                     126     
                     127     ;检查应答位子程序
                     128     ;返回值,ACK=1时表示有应答
0187 D294            129     CACK:   SETB  SDA
0189 00              130             NOP
018A 00              131             NOP
018B D2B7            132             SETB  SCL
018D C210            133             CLR   ACK
018F 00              134             NOP
0190 00              135             NOP
0191 A294            136             MOV   C,SDA
0193 4002            137             JC    CEND
0195 D210            138             SETB  ACK                               ;判断应答位
0197 00              139     CEND:   NOP
0198 C2B7            140             CLR   SCL
019A 00              141             NOP
019B 22              142             RET
                     143     
                     144     ;发送字节子程序
                     145     ;字节数据放入ACC       
                     146     ;每发送一字节要调用一次CACK子程序,取应答位            
019C 7808            147     WRBYTE: MOV   R0,#08H
019E 33              148     WLP:    RLC   A                                 ;取数据位
019F 4006            149             JC    WR1
01A1 8012            150             SJMP  WR0                               ;判断数据位
01A3 D8F9            151     WLP1:   DJNZ  R0,WLP
01A5 00              152             NOP
01A6 22              153             RET
01A7 D294            154     WR1:    SETB  SDA                               ;发送1
01A9 00              155             NOP
01AA D2B7            156             SETB  SCL
01AC 00              157             NOP
01AD 00              158             NOP
01AE 00              159             NOP
01AF 00              160             NOP
01B0 00              161             NOP
                     162     
01B1 C2B7            163             CLR   SCL
01B3 80EE            164             SJMP  WLP1
01B5 C294            165     WR0:    CLR   SDA                               ;发送0
01B7 00              166             NOP
01B8 D2B7            167             SETB  SCL
01BA 00              168             NOP
01BB 00              169             NOP
01BC 00              170             NOP
01BD 00              171             NOP
01BE 00              172             NOP
                     173     
                     174     
01BF C2B7            175             CLR   SCL
01C1 80E0            176             SJMP  WLP1
                     177     
                     178     ;读取字节子程序                    
                     179     ;读出的值在ACC
                     180     ;每取一字节要发送一个应答/非应答信号 
01C3 7808            181     RDBYTE: MOV   R0,#08H
01C5 D294            182     RLP:    SETB  SDA
01C7 00              183             NOP
01C8 00              184             NOP
01C9 00              185             NOP
01CA 00              186             NOP
01CB D2B7            187             SETB  SCL                               ;时钟线为高,接收数据位
A51 MACRO ASSEMBLER  24CXX                                                                09/16/2006 15:07:00 PAGE     4

01CD 00              188             NOP   
01CE 00              189             NOP
01CF 00              190             NOP                                     ;+1
01D0 00              191             NOP                                     ;+1
01D1 00              192             NOP                                     ;+1
01D2 00              193             NOP                                     ;+1
01D3 00              194             NOP                                     ;+1
                     195     
                     196     
01D4 A294            197             MOV   C,SDA                             ;读取数据位
01D6 EA              198             MOV   A,R2
01D7 C2B7            199             CLR   SCL                               ;将SCL拉低,时间大于4.7us
01D9 33              200             RLC   A                                 ;进行数据位的处理
01DA FA              201             MOV   R2,A
01DB 00              202             NOP
01DC 00              203             NOP
01DD 00              204             NOP
01DE 00              205             NOP                                     ;+1
01DF 00              206             NOP                                     ;+1
01E0 00              207             NOP                                     ;+1
01E1 00              208             NOP
01E2 00              209             NOP
01E3 00              210             NOP                                     ;+1
01E4 00              211             NOP
01E5 00              212             NOP                                     ;+1
01E6 00              213             NOP                                     ;+1
                     214     
                     215     
01E7 D8DC            216             DJNZ  R0,RLP                            ;未够8位,再来一次
01E9 22              217             RET
                     218     

⌨️ 快捷键说明

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