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

📄 i2c.lst

📁 基于PROTEUS和Keil做的I2C仿真程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  I2C                                                                  08/25/2006 15:57:59 PAGE     1


MACRO ASSEMBLER A51 V8.00
OBJECT MODULE PLACED IN I2C.OBJ
ASSEMBLER INVOKED BY: E:\Program Files\Keil\C51\BIN\A51.EXE I2C.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     
                       2     
                       3     
  0010                 4     ACK             BIT             10H                     ;应答标志位
  0050                 5     SLA             DATA    50H                     ;器件地址字
  0051                 6     SUBA    DATA    51H                     ;器件子地址
  0052                 7     NUMBYTE DATA    52H                     ;读/写字节数
                       8     
  0095                 9     SDA             BIT             P1.5
  0094                10     SCL             BIT             P1.4            ;I2C总线定义
  0030                11     MTD             EQU             30H                     ;发送数据缓存区首地址(30H-3FH)
  0040                12     MRD             EQU             40H                     ;接收数据缓存区首地址(40H-4FH)
                      13     
                      14     
0000 2180             15                     AJMP    MAIN
0080                  16                     ORG             80H
                      17     
                      18     
                      19     
                      20     
                      21     
                      22                             
                      23     ;*********************************************************************
                      24     ;名称:IWRNBYTE
                      25     ;描述:向器件指定子地址写N个数据
                      26     ;入口参数:器件地址字SLA,子地址SUBA,发送数据缓冲区MTD,发送字节数NUMBYTE
                      27     ;*********************************************************************
0080                  28     IWRNBYTE:
0080 AB52             29                     MOV             R3,NUMBYTE
0082 1200E7           30                     LCALL   START           ;启动总线
0085 E550             31                     MOV             A,SLA
0087 120143           32                     LCALL   WRBYTE          ;发送器件地址字
008A 12012E           33                     LCALL   CACK
008D 301017           34                     JNB             ACK,RETWRN      ;无应答则退出
0090 E551             35                     MOV             A,SUBA          ;指定子地址
0092 120143           36                     LCALL   WRBYTE
0095 12012E           37                     LCALL   CACK
0098 7930             38                     MOV             R1,#MTD
009A E7               39     WRDA:   MOV             A,@R1
009B 120143           40                     LCALL   WRBYTE          ;开始写入数据
009E 12012E           41                     LCALL   CACK
00A1 3010DC           42                     JNB             ACK,IWRNBYTE
00A4 09               43                     INC             R1
00A5 DBF3             44                     DJNZ    R3,WRDA         ;判断是否写完
00A7 1200FB           45     RETWRN: LCALL   STOP
00AA 22               46                     RET
                      47     ;*********************************************************************
                      48     ;名称:IRDNBYTE
                      49     ;描述:从器件指定子地址读取N个数据
                      50     ;入口参数:器件地址字SLA,子地址SUBA,接收数据缓存区MRD,接收字节数NUMBYTE
                      51     ;*********************************************************************
00AB                  52     IRDNBYTE:
00AB AB52             53                     MOV             R3,NUMBYTE
00AD 1200E7           54                     LCALL   START
00B0 E550             55                     MOV             A,SLA
00B2 120143           56                     LCALL   WRBYTE          ;发送器件地址字
00B5 12012E           57                     LCALL   CACK
00B8 301022           58                     JNB             ACK,RETRDN
A51 MACRO ASSEMBLER  I2C                                                                  08/25/2006 15:57:59 PAGE     2

00BB E551             59                     MOV             A,SUBA          ;指定子地址
00BD 120143           60                     LCALL   WRBYTE
00C0 12012E           61                     LCALL   CACK
00C3 1200E7           62                     LCALL   START           ;重新启动总线
00C6 E550             63                     MOV             A,SLA
00C8 04               64                     INC             A                       ;准备进行读操作
00C9 120143           65                     LCALL   WRBYTE
00CC 12012E           66                     LCALL   CACK
00CF 3010D9           67                     JNB             ACK,IRDNBYTE
00D2 7940             68                     MOV             R1,#MRD
00D4 12016A           69     RON1:   LCALL   RDBYTE          ;读操作开始
00D7 F7               70                     MOV             @R1,A
00D8 DB07             71                     DJNZ    R3,SACK
00DA 12011E           72                     LCALL   MNACK           ;最后一字节发非应答位
00DD 1200FB           73     RETRDN: LCALL   STOP
00E0 22               74                     RET
00E1 12010E           75     SACK:   LCALL   MACK
00E4 09               76                     INC             R1
00E5 80ED             77                     SJMP    RON1    
                      78     ;*********************************************************************
                      79     ;名称:STRRT
                      80     ;描述:启动I2C总线子程序—发送I2C总线起始条件
                      81     ;*********************************************************************
00E7 D295             82     START:  SETB    SDA                     ;发送起始条件数据信号
00E9 00               83                     NOP                                     ;起始条件建立时间大于4.7us
00EA D294             84                     SETB    SCL                     ;发送起始条件的时钟信号
00EC 00               85                     NOP
00ED 00               86                     NOP
00EE 00               87                     NOP
00EF 00               88                     NOP
00F0 00               89                     NOP                                     ;起始条件锁定时间大于4.7us
00F1 C295             90                     CLR     SDA                     ;发送起始信号
00F3 00               91                     NOP
00F4 00               92                     NOP
00F5 00               93                     NOP
00F6 00               94                     NOP                                     ;起始条件锁定时间大于4.7us
00F7 C294             95                     CLR             SCL                     ;钳住I2C总线,准备发送或接收数据
00F9 00               96                     NOP
00FA 22               97                     RET
                      98     ;*********************************************************************
                      99     ;名称:STOP
                     100     ;描述:停止I2C总线子程序—发送I2C总线停止条件
                     101     ;*********************************************************************
00FB C295            102     STOP:   CLR     SDA             ;发送停止条件的数据信号
00FD 00              103                     NOP                             
00FE 00              104                     NOP
00FF D294            105                     SETB    SCL             ;发送停止条件的时钟信号
0101 00              106                     NOP
0102 00              107                     NOP
0103 00              108                     NOP
0104 00              109                     NOP
0105 00              110                     NOP                                     ;起始条件建立时间大于4.7us
0106 D295            111                     SETB    SDA             ;发送I2C总线停止信号
0108 00              112                     NOP
0109 00              113                     NOP
010A 00              114                     NOP
010B 00              115                     NOP
010C 00              116                     NOP                                     ;延迟时间大于4.7us
010D 22              117                     RET
                     118     ;*********************************************************************
                     119     ;名称:MACK
                     120     ;描述:发送应答信号子程序
                     121     ;*********************************************************************
010E C295            122     MACK:   CLR             SDA                     ;将SDA置0
0110 00              123                     NOP
0111 00              124                     NOP
A51 MACRO ASSEMBLER  I2C                                                                  08/25/2006 15:57:59 PAGE     3

0112 D294            125                     SETB    SCL
0114 00              126                     NOP
0115 00              127                     NOP
0116 00              128                     NOP
0117 00              129                     NOP
0118 00              130                     NOP                                     ;保持数据时间,大于4.7us
0119 C294            131                     CLR             SCL
011B 00              132                     NOP
011C 00              133                     NOP
011D 22              134                     RET
                     135     ;*********************************************************************
                     136     ;名称:MNACK
                     137     ;描述:发送非应答信号子程序
                     138     ;*********************************************************************
011E D295            139     MNACK:  SETB    SDA                     ;将SDA置1
0120 00              140                     NOP
0121 00              141                     NOP
0122 D294            142                     SETB    SCL
0124 00              143                     NOP
0125 00              144                     NOP
0126 00              145                     NOP
0127 00              146                     NOP

⌨️ 快捷键说明

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