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

📄 ex.lst

📁 这是购买周立功的试验箱时候松的源代码。很经典的代码。希望学习单片机的朋友好好研究。短小精悍。有意思。这是第三部分。后面还有好多。不知道管理员能否让我通过?
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:03:59 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
  0040                 3             MTD             EQU     40H     ;发送数据缓冲器
  0049                 4             MRD             EQU     49H     ;接收数据缓冲区
                       5             
                       6             ;定义器件地址,变
  00A0                 7             CSI24WC02       EQU     0A0H    ;ZLG7290的器件地址
  0010                 8             ACK             BIT     10H     ;应答标志位
  0050                 9             SLA             DATA    50H     ;器件的从地址
  0051                10             SUBA            DATA    51H     ;器件的子地址
  0052                11             NUMBYTE         DATA    52H     ;读/写的字节数变量
                      12     
8000                  13             ORG             8000H
8000 028100           14             LJMP    MAIN
8100                  15             ORG             8100H
                      16     
                      17     ;-------主程序如下:
8100                  18     MAIN:
8100 758170           19             MOV     SP,#70H 
8103 12812C           20             LCALL   DELAY
                      21     
8106 754012           22             MOV     MTD,#12H
8109 754134           23             MOV     MTD+1,#34H
810C 7550A0           24             MOV     SLA,#CSI24WC02  ;指定器件地址
810F 755100           25             MOV     SUBA,#00H       ;指定子地址
8112 755202           26             MOV     NUMBYTE,#02H    ;发送2字节数据
8115 128225           27             LCALL   IWRNBYTE        ;调用写2字节数据程序
                      28     
8118 12812C           29             LCALL   DELAY
                      30     
811B 7550A0           31             MOV     SLA,#CSI24WC02  ;指定器件地址
811E 755100           32             MOV     SUBA,#00H       ;指定子地址
8121 755202           33             MOV     NUMBYTE,#02H    ;发送2字节数据
8124 128251           34             LCALL   IRDNBYTE        ;调用写2字节数据程序
8127 12812C           35             LCALL   DELAY
812A 80FE             36             SJMP    $
                      37     
812C                  38     DELAY:
812C 7F00             39             MOV     R7,#00H
812E DF01             40     MIN:    DJNZ    R7,YS500
8130 22               41             RET
8131 128137           42     YS500:  LCALL   YS500US
8134 02812E           43             LJMP    MIN
8137 7E00             44     YS500US:MOV     R6,#00H
8139 DEFE             45             DJNZ    R6,$
813B 22               46             RET
813C 7F20             47     DELAY1: MOV     R7,#20H
813E DFFE             48             DJNZ    R7,$
8140 22               49             RET
                      50     
                      51     ;$include (VI2C_ASM.INC) ;包含VIIC软件包
                +1    52     ;------------------------------------------------------------------------------------------
                             --------------
                +1    53     ;                 MCS-51单片机模拟I2C软件包(V1.1)
                +1    54     ;    文件名:VI2C_ASM.INC
                +1    55     ;    功能说明:本模拟I2C软件包包含了I2C操作的底层子程序,使用前要定义
                +1    56     ;好SCL和SDA。在标准8051模式(12 Clock)下,对主频要求是不高于12MHz(即1个
                +1    57     ;机器周期1us);若Fosc>12MHz则要增加相应的NOP指令数。(总线时序符合I2C标
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:03:59 PAGE     2

                +1    58     ;准模式,100Kbit/S)
                +1    59     ;    版本说明:本版新增了两个子程序,IWRNBYTEEXT,IRDNBYTEEXT两个子程序,
                +1    60     ;这两个子程序用于主从通讯上及一此特殊器件的读写操作较为方便.
                +1    61     ;                                         更新时间:2002.06.04
                +1    62     ;------------------------------------------------------------------------------------------
                             --------------
                +1    63     
                +1    64     ;启动I2C总线子程序      
8141 D297       +1    65     START:    SETB  SDA
8143 00         +1    66               NOP
8144 D296       +1    67               SETB  SCL                             ;起始条件建立时间大于4.7us
8146 00         +1    68               NOP
8147 00         +1    69               NOP
8148 00         +1    70               NOP
8149 00         +1    71               NOP
814A 00         +1    72               NOP
814B C297       +1    73               CLR   SDA      
814D 00         +1    74               NOP                                   ;起始条件锁定时大于4us
814E 00         +1    75               NOP
814F 00         +1    76               NOP
8150 00         +1    77               NOP
8151 00         +1    78               NOP
8152 C296       +1    79               CLR   SCL                             ;钳住总线,准备发数据
8154 00         +1    80               NOP
8155 22         +1    81               RET
                +1    82     
                +1    83     ;结束总线子程序
8156 C297       +1    84     STOP:     CLR    SDA
8158 00         +1    85               NOP
8159 D296       +1    86               SETB   SCL                            ;发送结束条件的时钟信号
815B 00         +1    87               NOP                                   ;结束总线时间大于4us
815C 00         +1    88               NOP            
815D 00         +1    89               NOP
815E 00         +1    90               NOP
815F 00         +1    91               NOP
8160 D297       +1    92               SETB  SDA                             ;结束总线
8162 00         +1    93               NOP                                   ;保证一个终止信号和起始信号的空闲时间大于4.
                             7us
8163 00         +1    94               NOP
8164 00         +1    95               NOP
8165 00         +1    96               NOP
8166 22         +1    97               RET
                +1    98     
                +1    99     ;发送应答信号子程序
8167 C297       +1   100     MACK:     CLR   SDA                             ;将SDA置0 
8169 00         +1   101               NOP
816A 00         +1   102               NOP
816B D296       +1   103               SETB  SCL
816D 00         +1   104               NOP                                   ;保持数据时间,即SCL为高时间大于4.7us
816E 00         +1   105               NOP
816F 00         +1   106               NOP
8170 00         +1   107               NOP
8171 00         +1   108               NOP
8172 C296       +1   109               CLR   SCL
8174 00         +1   110               NOP
8175 00         +1   111               NOP
8176 22         +1   112               RET
                +1   113     
                +1   114     ;发送非应答信号
8177 D297       +1   115     MNACK:    SETB  SDA                             ;将SDA置1 
8179 00         +1   116               NOP
817A 00         +1   117               NOP
817B D296       +1   118               SETB  SCL
817D 00         +1   119               NOP
817E 00         +1   120               NOP                                   ;保持数据时间,即SCL为高时间大于4.7us
817F 00         +1   121               NOP
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:03:59 PAGE     3

8180 00         +1   122               NOP
8181 00         +1   123               NOP
8182 C296       +1   124               CLR   SCL
8184 00         +1   125               NOP
8185 00         +1   126               NOP
8186 22         +1   127               RET
                +1   128     
                +1   129     ;检查应答位子程序
                +1   130     ;返回值,ACK=1时表示有应答
8187 D297       +1   131     CACK:   SETB  SDA
8189 00         +1   132             NOP
818A 00         +1   133             NOP
818B D296       +1   134             SETB  SCL
818D C210       +1   135             CLR   ACK
818F 00         +1   136             NOP
8190 00         +1   137             NOP
8191 A297       +1   138             MOV   C,SDA
8193 4002       +1   139             JC    CEND
8195 D210       +1   140             SETB  ACK                               ;判断应答位
8197 00         +1   141     CEND:   NOP
8198 C296       +1   142             CLR   SCL
819A 00         +1   143             NOP
819B 22         +1   144             RET
                +1   145     
                +1   146     ;发送字节子程序
                +1   147     ;字节数据放入ACC       
                +1   148     ;每发送一字节要调用一次CACK子程序,取应答位            
819C 7808       +1   149     WRBYTE: MOV   R0,#08H
819E 33         +1   150     WLP:    RLC   A                                 ;取数据位
819F 4006       +1   151             JC    WR1
81A1 8012       +1   152             SJMP  WR0                               ;判断数据位
81A3 D8F9       +1   153     WLP1:   DJNZ  R0,WLP
81A5 00         +1   154             NOP
81A6 22         +1   155             RET
81A7 D297       +1   156     WR1:    SETB  SDA                               ;发送1
81A9 00         +1   157             NOP
81AA D296       +1   158             SETB  SCL
81AC 00         +1   159             NOP
81AD 00         +1   160             NOP
81AE 00         +1   161             NOP
81AF 00         +1   162             NOP
81B0 00         +1   163             NOP
                +1   164     
81B1 C296       +1   165             CLR   SCL
81B3 80EE       +1   166             SJMP  WLP1
81B5 C297       +1   167     WR0:    CLR   SDA                               ;发送0
81B7 00         +1   168             NOP
81B8 D296       +1   169             SETB  SCL
81BA 00         +1   170             NOP
81BB 00         +1   171             NOP
81BC 00         +1   172             NOP
81BD 00         +1   173             NOP
81BE 00         +1   174             NOP
                +1   175     
                +1   176     
81BF C296       +1   177             CLR   SCL
81C1 80E0       +1   178             SJMP  WLP1
                +1   179     
                +1   180     ;读取字节子程序                    
                +1   181     ;读出的值在ACC
                +1   182     ;每取一字节要发送一个应答/非应答信号 
81C3 7808       +1   183     RDBYTE: MOV   R0,#08H
81C5 D297       +1   184     RLP:    SETB  SDA
81C7 00         +1   185             NOP
81C8 00         +1   186             NOP
81C9 00         +1   187             NOP
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:03:59 PAGE     4

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

⌨️ 快捷键说明

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