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

📄 ex.lst

📁 这是购买周立功的试验箱时候松的源代码。很经典的代码。希望学习单片机的朋友好好研究。短小精悍。有意思。这是第三部分。后面还有好多。不知道管理员能否让我通过?
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:04:34 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             ;定义器件地址,变
  00A2                 7             PCF8563         EQU     0A2H    ;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 128135           20             LCALL   DELAY
                      21     
8106 754000           22             MOV     MTD,#00H
8109 754112           23             MOV     MTD+1,#12H
810C 754200           24             MOV     MTD+2,#00H
810F 754330           25             MOV     MTD+3,#30H
8112 754412           26             MOV     MTD+4,#12H
8115 7550A2           27             MOV     SLA,#PCF8563    ;指定器件地址
8118 755100           28             MOV     SUBA,#00H       ;指定子地址
811B 755205           29             MOV     NUMBYTE,#05H    ;发送2字节数据
811E 12822E           30             LCALL   IWRNBYTE        ;调用写2字节数据程序
                      31     
8121 128135           32             LCALL   DELAY
8124                  33     MAINLOOP:
8124 7550A2           34             MOV     SLA,#PCF8563    ;指定器件地址
8127 755102           35             MOV     SUBA,#02H       ;指定子地址
812A 755203           36             MOV     NUMBYTE,#03H    ;发送2字节数据
812D 12825A           37             LCALL   IRDNBYTE        ;调用写2字节数据程序
8130 128135           38             LCALL   DELAY
8133 80EF             39             SJMP    MAINLOOP
                      40     
8135                  41     DELAY:
8135 7F00             42             MOV     R7,#00H
8137 DF01             43     MIN:    DJNZ    R7,YS500
8139 22               44             RET
813A 128140           45     YS500:  LCALL   YS500US
813D 028137           46             LJMP    MIN
8140 7E00             47     YS500US:MOV     R6,#00H
8142 DEFE             48             DJNZ    R6,$
8144 22               49             RET
8145 7F20             50     DELAY1: MOV     R7,#20H
8147 DFFE             51             DJNZ    R7,$
8149 22               52             RET
                      53     
                      54     ;$include (VI2C_ASM.INC) ;包含VIIC软件包
                +1    55     ;------------------------------------------------------------------------------------------
                             --------------
                +1    56     ;                 MCS-51单片机模拟I2C软件包(V1.1)
                +1    57     ;    文件名:VI2C_ASM.INC
A51 MACRO ASSEMBLER  EX                                                                   03/21/2004 15:04:34 PAGE     2

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

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

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

⌨️ 快捷键说明

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