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

📄 ex.lst

📁 这是购买周立功的试验箱时候松的源代码。很经典的代码。希望学习单片机的朋友好好研究。短小精悍。有意思。这是第三部分。后面还有好多。不知道管理员能否让我通过?
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:04:15 PAGE     1


MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN Ex.OBJ
ASSEMBLER INVOKED BY: d:\Keil\C51\BIN\A51.EXE Ex.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

  0097                 1             SDA             BIT     P1.7    ;I2C总线定义
  0096                 2             SCL             BIT     P1.6
  0090                 3             RST             BIT     P1.0
  00B2                 4             KEY_INT         BIT     P3.2
  0040                 5             MTD             EQU     40H     ;发送数据缓冲器
  0049                 6             MRD             EQU     49H     ;接收数据缓冲区
                       7             
                       8             ;定义器件地址,变
  0070                 9             ZLG7290         EQU     70H     ;ZLG7290的器件地址
  0010                10             ACK             BIT     10H     ;应答标志位
  0050                11             SLA             DATA    50H     ;器件的从地址
  0051                12             SUBA            DATA    51H     ;器件的子地址
  0052                13             NUMBYTE         DATA    52H     ;读/写的字节数变量
                      14     
8000                  15             ORG             8000H
8000 028100           16             LJMP    MAIN
8100                  17             ORG             8100H
                      18     
                      19     ;-------主程序如下:
8100                  20     MAIN:
8100 758170           21             MOV     SP,#70H 
8103 C290             22             CLR     RST
8105 128146           23             LCALL   DELAY
8108 D290             24             SETB    RST
810A 128146           25             LCALL   DELAY
810D                  26     MAINLOOP:
810D 30B202           27             JNB     KEY_INT,KEY_HANDLE
8110 80FB             28             SJMP    MAINLOOP
8112                  29     KEY_HANDLE:
8112 755070           30             MOV     SLA,#ZLG7290    ;指定器件地址
8115 755101           31             MOV     SUBA,#01H       ;指定子地址
8118 755201           32             MOV     NUMBYTE,#01H    ;发送2字节数据
811B 12826B           33             LCALL   IRDNBYTE        ;调用写2字节数据程序
811E 128146           34             LCALL   DELAY
8121 7F08             35             MOV     R7,#08H
8123 7460             36             MOV     A,#60H
8125                  37     HANDLELOOP:
                      38             
8125 F540             39             MOV     MTD,A
8127 C0E0             40             PUSH    ACC
8129 8F30             41             MOV     30H,R7
812B 854941           42             MOV     MTD+1,MRD
812E 755070           43             MOV     SLA,#ZLG7290    ;指定器件地址
8131 755107           44             MOV     SUBA,#07H       ;指定子地址
8134 755202           45             MOV     NUMBYTE,#02H    ;发送2字节数据
8137 12823F           46             LCALL   IWRNBYTE        ;调用写2字节数据程序
                      47     
813A 128146           48             LCALL   DELAY
                      49             USING   2
813D AF30             50             MOV     R7,30H
813F D0E0             51             POP     ACC
8141 04               52             INC     A
8142 DFE1             53             DJNZ    R7,HANDLELOOP
8144 80C7             54             SJMP    MAINLOOP
                      55     
8146                  56     DELAY:
8146 7F80             57             MOV     R7,#80H
8148 DF01             58     MIN:    DJNZ    R7,YS500
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:04:15 PAGE     2

814A 22               59             RET
814B 128151           60     YS500:  LCALL   YS500US
814E 028148           61             LJMP    MIN
8151 7E80             62     YS500US:MOV     R6,#80H
8153 DEFE             63             DJNZ    R6,$
8155 22               64             RET
8156 7F20             65     DELAY1: MOV     R7,#20H
8158 DFFE             66             DJNZ    R7,$
815A 22               67             RET
                      68     
                      69     ;$include (VI2C_ASM.INC) ;包含VIIC软件包
                +1    70     ;------------------------------------------------------------------------------------------
                             --------------
                +1    71     ;                 MCS-51单片机模拟I2C软件包(V1.1)
                +1    72     ;    文件名:VI2C_ASM.INC
                +1    73     ;    功能说明:本模拟I2C软件包包含了I2C操作的底层子程序,使用前要定义
                +1    74     ;好SCL和SDA。在标准8051模式(12 Clock)下,对主频要求是不高于12MHz(即1个
                +1    75     ;机器周期1us);若Fosc>12MHz则要增加相应的NOP指令数。(总线时序符合I2C标
                +1    76     ;准模式,100Kbit/S)
                +1    77     ;    版本说明:本版新增了两个子程序,IWRNBYTEEXT,IRDNBYTEEXT两个子程序,
                +1    78     ;这两个子程序用于主从通讯上及一此特殊器件的读写操作较为方便.
                +1    79     ;                                         更新时间:2002.06.04
                +1    80     ;------------------------------------------------------------------------------------------
                             --------------
                +1    81     
                +1    82     ;启动I2C总线子程序      
815B D297       +1    83     START:    SETB  SDA
815D 00         +1    84               NOP
815E D296       +1    85               SETB  SCL                             ;起始条件建立时间大于4.7us
8160 00         +1    86               NOP
8161 00         +1    87               NOP
8162 00         +1    88               NOP
8163 00         +1    89               NOP
8164 00         +1    90               NOP
8165 C297       +1    91               CLR   SDA      
8167 00         +1    92               NOP                                   ;起始条件锁定时大于4us
8168 00         +1    93               NOP
8169 00         +1    94               NOP
816A 00         +1    95               NOP
816B 00         +1    96               NOP
816C C296       +1    97               CLR   SCL                             ;钳住总线,准备发数据
816E 00         +1    98               NOP
816F 22         +1    99               RET
                +1   100     
                +1   101     ;结束总线子程序
8170 C297       +1   102     STOP:     CLR    SDA
8172 00         +1   103               NOP
8173 D296       +1   104               SETB   SCL                            ;发送结束条件的时钟信号
8175 00         +1   105               NOP                                   ;结束总线时间大于4us
8176 00         +1   106               NOP            
8177 00         +1   107               NOP
8178 00         +1   108               NOP
8179 00         +1   109               NOP
817A D297       +1   110               SETB  SDA                             ;结束总线
817C 00         +1   111               NOP                                   ;保证一个终止信号和起始信号的空闲时间大于4.
                             7us
817D 00         +1   112               NOP
817E 00         +1   113               NOP
817F 00         +1   114               NOP
8180 22         +1   115               RET
                +1   116     
                +1   117     ;发送应答信号子程序
8181 C297       +1   118     MACK:     CLR   SDA                             ;将SDA置0 
8183 00         +1   119               NOP
8184 00         +1   120               NOP
8185 D296       +1   121               SETB  SCL
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:04:15 PAGE     3

8187 00         +1   122               NOP                                   ;保持数据时间,即SCL为高时间大于4.7us
8188 00         +1   123               NOP
8189 00         +1   124               NOP
818A 00         +1   125               NOP
818B 00         +1   126               NOP
818C C296       +1   127               CLR   SCL
818E 00         +1   128               NOP
818F 00         +1   129               NOP
8190 22         +1   130               RET
                +1   131     
                +1   132     ;发送非应答信号
8191 D297       +1   133     MNACK:    SETB  SDA                             ;将SDA置1 
8193 00         +1   134               NOP
8194 00         +1   135               NOP
8195 D296       +1   136               SETB  SCL
8197 00         +1   137               NOP
8198 00         +1   138               NOP                                   ;保持数据时间,即SCL为高时间大于4.7us
8199 00         +1   139               NOP
819A 00         +1   140               NOP
819B 00         +1   141               NOP
819C C296       +1   142               CLR   SCL
819E 00         +1   143               NOP
819F 00         +1   144               NOP
81A0 22         +1   145               RET
                +1   146     
                +1   147     ;检查应答位子程序
                +1   148     ;返回值,ACK=1时表示有应答
81A1 D297       +1   149     CACK:   SETB  SDA
81A3 00         +1   150             NOP
81A4 00         +1   151             NOP
81A5 D296       +1   152             SETB  SCL
81A7 C210       +1   153             CLR   ACK
81A9 00         +1   154             NOP
81AA 00         +1   155             NOP
81AB A297       +1   156             MOV   C,SDA
81AD 4002       +1   157             JC    CEND
81AF D210       +1   158             SETB  ACK                               ;判断应答位
81B1 00         +1   159     CEND:   NOP
81B2 C296       +1   160             CLR   SCL
81B4 00         +1   161             NOP
81B5 22         +1   162             RET
                +1   163     
                +1   164     ;发送字节子程序
                +1   165     ;字节数据放入ACC       
                +1   166     ;每发送一字节要调用一次CACK子程序,取应答位            
81B6 7808       +1   167     WRBYTE: MOV   R0,#08H
81B8 33         +1   168     WLP:    RLC   A                                 ;取数据位
81B9 4006       +1   169             JC    WR1
81BB 8012       +1   170             SJMP  WR0                               ;判断数据位
81BD D8F9       +1   171     WLP1:   DJNZ  R0,WLP
81BF 00         +1   172             NOP
81C0 22         +1   173             RET
81C1 D297       +1   174     WR1:    SETB  SDA                               ;发送1
81C3 00         +1   175             NOP
81C4 D296       +1   176             SETB  SCL
81C6 00         +1   177             NOP
81C7 00         +1   178             NOP
81C8 00         +1   179             NOP
81C9 00         +1   180             NOP
81CA 00         +1   181             NOP
                +1   182     
81CB C296       +1   183             CLR   SCL
81CD 80EE       +1   184             SJMP  WLP1
81CF C297       +1   185     WR0:    CLR   SDA                               ;发送0
81D1 00         +1   186             NOP
81D2 D296       +1   187             SETB  SCL
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:04:15 PAGE     4

81D4 00         +1   188             NOP
81D5 00         +1   189             NOP
81D6 00         +1   190             NOP
81D7 00         +1   191             NOP
81D8 00         +1   192             NOP
                +1   193     
                +1   194     
81D9 C296       +1   195             CLR   SCL
81DB 80E0       +1   196             SJMP  WLP1
                +1   197     
                +1   198     ;读取字节子程序                    
                +1   199     ;读出的值在ACC
                +1   200     ;每取一字节要发送一个应答/非应答信号 
81DD 7808       +1   201     RDBYTE: MOV   R0,#08H
81DF D297       +1   202     RLP:    SETB  SDA
81E1 00         +1   203             NOP
81E2 00         +1   204             NOP
81E3 00         +1   205             NOP
81E4 00         +1   206             NOP
81E5 D296       +1   207             SETB  SCL                               ;时钟线为高,接收数据位
81E7 00         +1   208             NOP   
81E8 00         +1   209             NOP
81E9 00         +1   210             NOP                                     ;+1
81EA 00         +1   211             NOP                                     ;+1
81EB 00         +1   212             NOP                                     ;+1
81EC 00         +1   213             NOP                                     ;+1
81ED 00         +1   214             NOP                                     ;+1
                +1   215     
                +1   216     
81EE A297       +1   217             MOV   C,SDA                             ;读取数据位
81F0 EA         +1   218             MOV   A,R2
81F1 C296       +1   219             CLR   SCL                               ;将SCL拉低,时间大于4.7us
81F3 33         +1   220             RLC   A                                 ;进行数据位的处理
81F4 FA         +1   221             MOV   R2,A
81F5 00         +1   222             NOP
81F6 00         +1   223             NOP
81F7 00         +1   224             NOP
81F8 00         +1   225             NOP                                     ;+1
81F9 00         +1   226             NOP                                     ;+1
81FA 00         +1   227             NOP                                     ;+1
81FB 00         +1   228             NOP
81FC 00         +1   229             NOP
81FD 00         +1   230             NOP                                     ;+1
81FE 00         +1   231             NOP
81FF 00         +1   232             NOP                                     ;+1
8200 00         +1   233             NOP                                     ;+1
                +1   234     

⌨️ 快捷键说明

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