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

📄 ex.lst

📁 时钟芯片PCF8563的51单片机程序 时钟不超过12MHZ
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  EX                                                                   11/07/2006 08:35:29 PAGE     1


MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN Ex.OBJ
ASSEMBLER INVOKED BY: F:\program files\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     
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 120135           20             LCALL   DELAY
                      21     
0106 754000           22             MOV     MTD,#00H
0109 754112           23             MOV     MTD+1,#12H
010C 754200           24             MOV     MTD+2,#00H
010F 754330           25             MOV     MTD+3,#30H
0112 754412           26             MOV     MTD+4,#12H
0115 7550A2           27             MOV     SLA,#PCF8563    ;指定器件地址
0118 755100           28             MOV     SUBA,#00H       ;指定子地址
011B 755205           29             MOV     NUMBYTE,#05H    ;发送2字节数据
011E 12022E           30             LCALL   IWRNBYTE        ;调用写2字节数据程序
                      31     
0121 120135           32             LCALL   DELAY
0124                  33     MAINLOOP:
0124 7550A2           34             MOV     SLA,#PCF8563    ;指定器件地址
0127 755102           35             MOV     SUBA,#02H       ;指定子地址
012A 755203           36             MOV     NUMBYTE,#03H    ;发送2字节数据
012D 12025A           37             LCALL   IRDNBYTE        ;调用读2字节数据程序
0130 120135           38             LCALL   DELAY
0133 80EF             39             SJMP    MAINLOOP
                      40     
0135                  41     DELAY:
0135 7F00             42             MOV     R7,#00H
0137 DF01             43     MIN:    DJNZ    R7,YS500
0139 22               44             RET
013A 120140           45     YS500:  LCALL   YS500US
013D 020137           46             LJMP    MIN
0140 7E00             47     YS500US:MOV     R6,#00H
0142 DEFE             48             DJNZ    R6,$
0144 22               49             RET
0145 7F20             50     DELAY1: MOV     R7,#20H
0147 DFFE             51             DJNZ    R7,$
0149 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                                                                   11/07/2006 08:35:29 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总线子程序      
014A D297       +1    68     START:    SETB  SDA
014C 00         +1    69               NOP
014D D296       +1    70               SETB  SCL                             ;起始条件建立时间大于4.7us
014F 00         +1    71               NOP
0150 00         +1    72               NOP
0151 00         +1    73               NOP
0152 00         +1    74               NOP
0153 00         +1    75               NOP
0154 C297       +1    76               CLR   SDA      
0156 00         +1    77               NOP                                   ;起始条件锁定时大于4us
0157 00         +1    78               NOP
0158 00         +1    79               NOP
0159 00         +1    80               NOP
015A 00         +1    81               NOP
015B C296       +1    82               CLR   SCL                             ;钳住总线,准备发数据
015D 00         +1    83               NOP
015E 22         +1    84               RET
                +1    85     
                +1    86     ;结束总线子程序
015F C297       +1    87     STOP:     CLR    SDA
0161 00         +1    88               NOP
0162 D296       +1    89               SETB   SCL                            ;发送结束条件的时钟信号
0164 00         +1    90               NOP                                   ;结束总线时间大于4us
0165 00         +1    91               NOP            
0166 00         +1    92               NOP
0167 00         +1    93               NOP
0168 00         +1    94               NOP
0169 D297       +1    95               SETB  SDA                             ;结束总线
016B 00         +1    96               NOP                                   ;保证一个终止信号和起始信号的空闲时间大于4.
                             7us
016C 00         +1    97               NOP
016D 00         +1    98               NOP
016E 00         +1    99               NOP
016F 22         +1   100               RET
                +1   101     
                +1   102     ;发送应答信号子程序
0170 C297       +1   103     MACK:     CLR   SDA                             ;将SDA置0 
0172 00         +1   104               NOP
0173 00         +1   105               NOP
0174 D296       +1   106               SETB  SCL
0176 00         +1   107               NOP                                   ;保持数据时间,即SCL为高时间大于4.7us
0177 00         +1   108               NOP
0178 00         +1   109               NOP
0179 00         +1   110               NOP
017A 00         +1   111               NOP
017B C296       +1   112               CLR   SCL
017D 00         +1   113               NOP
017E 00         +1   114               NOP
017F 22         +1   115               RET
                +1   116     
                +1   117     ;发送非应答信号
0180 D297       +1   118     MNACK:    SETB  SDA                             ;将SDA置1 
0182 00         +1   119               NOP
0183 00         +1   120               NOP
0184 D296       +1   121               SETB  SCL
A51 MACRO ASSEMBLER  EX                                                                   11/07/2006 08:35:29 PAGE     3

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

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

⌨️ 快捷键说明

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