📄 master.lst
字号:
00DF C2EA 131 CLR I2CRS
00E1 22 132 RETOUR: RET
133
134 ;----------------------------------------------------------------------
135 ; RCVBYTE: receives one byte of data from an I2C slave device.
136 ;----------------------------------------------------------------------
137
00E2 138 RCVBYTE:
139
00E2 750808 140 MOV BITCNT,#8 ;Set bit count.
141
00E5 C2EE 142 CLR MDE ;Data pin of the master is now an input
00E7 C2ED 143 CLR MCO
00E9 D2ED 144 LOOP2: SETB MCO
00EB C2ED 145 CLR MCO
00ED A2EC 146 MOV C,MDI ;Get data bit from pin.
00EF 33 147 RLC A ;Rotate bit into result byte.
148
00F0 D508F6 149 DJNZ BITCNT,LOOP2 ;Repeat until all bits received.
150
151 ;result byte is in the accumulator
152
00F3 C0E0 153 PUSH ACC ;Save result byte in the stack
154
00F5 D2EE 155 SETB MDE ;Data pin of the master must be an..
156 ;..output for the acknowledge
00F7 E530 157 MOV A,BYTECNT
00F9 B40104 158 CJNE A,#1,SACK ;Check for last byte of frame.
00FC D2EF 159 SETB MDO ;Send no acknowledge on last byte.
00FE 8002 160 SJMP NACK
161
0100 C2EF 162 SACK: CLR MDO ;Send acknowledge bit.
163
0102 D2ED 164 NACK: SETB MCO ;Send acknowledge clock.
0104 D0E0 165 POP ACC ;Restore accumulator
0106 117B 166 ACALL DELAY
0108 C2ED 167 CLR MCO
010A D2EF 168 SETB MDO ;Clear acknowledge bit.
010C 117B 169 ACALL DELAY
010E C2EE 170 CLR MDE
171
0110 22 172 RET
173
174 ;----------------------------------------------------------------------
MASTER PAGE 4
175 ; RCVDATA: receives one or more bytes of data from an I2C slave device.
176 ;----------------------------------------------------------------------
177
0111 0532 178 RCVDATA: INC SLAVEADD ;Set for READ of slave.
0113 11A9 179 ACALL BITSTART ;Acquire bus and send slave address.
0115 204007 180 JB NoAck,RDEX ;Check for slave not responding.
181
0118 11E2 182 RDLoop: ACALL RCVBYTE ;Receive next data byte.
011A F7 183 MOV @R1,A ;Save data byte in buffer.
011B 09 184 INC R1 ;Advance buffer pointer.
011C D530F9 185 DJNZ BYTECNT,RDLoop ;Repeat untill all bytes received.
186
011F 117D 187 RDEX: ACALL SENDSTOP ;Done, send an I2C stop.
0121 22 188 RET
189
190 ;======================================================================
191 ; Main program
192 ;======================================================================
193
0122 194 START:
195
0122 758140 196 MOV SP,#040h
0125 C240 197 CLR NOACK
0127 753288 198 MOV SLAVEADD,#088H
012A 753003 199 MOV BYTECNT,#3
012D 75E8A8 200 MOV I2CCON,#0A8h
201
202 ; code for a write mode ( master-transmitter to slave-receiver )
203
204 ; MOV DPTR,#080H ; master transmits to slave
205 ; MOV A,#055H ; datas which are located in
206 ; MOVX @DPTR,A ; the external memory
207 ; MOV DPTR,#081H
208 ; MOV A,#044H
209 ; MOVX @DPTR,A
210 ; MOV DPTR,#082H
211 ; MOV A,#033H
212 ; MOVX @DPTR,A
213
214 ; MOV DPTR,#080h
215 ; ACALL SENDATA
216
217 ; code for a read mode ( master reads immediately after first byte )
218
0130 7935 219 MOV R1,#035h
0132 3111 220 ACALL RCVDATA
221
222 END
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
MASTER PAGE 5
ACC. . . . . . . . . . . . . . . D ADDR 00E0H PREDEFINED
BITCNT . . . . . . . . . . . . . D ADDR 0008H
BITSTART . . . . . . . . . . . . C ADDR 00A9H
BUSY . . . . . . . . . . . . . . B ADDR 0041H
BYTECNT. . . . . . . . . . . . . D ADDR 0030H
DELAY. . . . . . . . . . . . . . C ADDR 007BH
ERROR. . . . . . . . . . . . . . B ADDR 0042H
FAULT. . . . . . . . . . . . . . C ADDR 00BDH
FLAGS. . . . . . . . . . . . . . D ADDR 0028H
I2CCON . . . . . . . . . . . . . D ADDR 00E8H PREDEFINED
I2CRS. . . . . . . . . . . . . . B ADDR 00EAH PREDEFINED
LOOP . . . . . . . . . . . . . . C ADDR 0093H
LOOP2. . . . . . . . . . . . . . C ADDR 00E9H
MCO. . . . . . . . . . . . . . . B ADDR 00EDH PREDEFINED
MDE. . . . . . . . . . . . . . . B ADDR 00EEH PREDEFINED
MDI. . . . . . . . . . . . . . . B ADDR 00ECH PREDEFINED
MDO. . . . . . . . . . . . . . . B ADDR 00EFH PREDEFINED
MISTAKE. . . . . . . . . . . . . B ADDR 00B4H
NACK . . . . . . . . . . . . . . C ADDR 0102H
NEXT . . . . . . . . . . . . . . C ADDR 00A6H
NEXT1. . . . . . . . . . . . . . C ADDR 00D5H
NOACK. . . . . . . . . . . . . . B ADDR 0040H
P3 . . . . . . . . . . . . . . . D ADDR 00B0H PREDEFINED
RCVBYTE. . . . . . . . . . . . . C ADDR 00E2H
RCVDATA. . . . . . . . . . . . . C ADDR 0111H
RDEX . . . . . . . . . . . . . . C ADDR 011FH
RDLOOP . . . . . . . . . . . . . C ADDR 0118H
RETOUR . . . . . . . . . . . . . C ADDR 00E1H
SACK . . . . . . . . . . . . . . C ADDR 0100H
SENDATA. . . . . . . . . . . . . C ADDR 00C4H NOT USED
SENDBYTE . . . . . . . . . . . . C ADDR 008AH
SENDSTOP . . . . . . . . . . . . C ADDR 007DH
SLAVEADD . . . . . . . . . . . . D ADDR 0032H
SLOOP. . . . . . . . . . . . . . C ADDR 00CBH
SP . . . . . . . . . . . . . . . D ADDR 0081H PREDEFINED
START. . . . . . . . . . . . . . C ADDR 0122H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -