📄 i2cslave.lst
字号:
121 ; address => no need to store it.
0083 3000FD 122 JNB GO,$ ; wait for the interrupt. If it is in
123 ; recieve mode, it will wait here for
124 ; a second interrupt, when it
125 ; recieves the data bit
0086 C200 126 CLR GO ; flag cleared for the next interrupt
0088 2002F6 127 JB TR,RESET ; if the slave has just transmitted,
128 ; wait for another interrupt. If it has
129 ; recieved a data byte send it out the UART
130
008B 131 SENDUART:
008B B2B4 132 CPL LED ; LED changes each time one byte has been
133 ; recieved and another transmitted
134
008D E531 135 MOV A,INPUT ; send value recieved out the UART
008F 1200BA 136 CALL SENDVAL
0092 740A 137 MOV A,#10
0094 1200A6 138 CALL SENDCHAR ; send LF + CR
0097 740D 139 MOV A,#13
0099 1200A6 140 CALL SENDCHAR
141
009C 3098E2 142 JNB RI, RESET ; repeat (unless UART data received)
143
144
145 ; WHEN UART DATA RECEIVED, MOVE DATA TO I2C OUTPUT...
146
009F 859932 147 MOV OUTPUT, SBUF ; update OUTPUT byte to new value
00A2 C298 148 CLR RI ; must clear RI
00A4 80DB 149 JMP RESET ; back to main loop
150
151
152
153 ;======================================================================
154 ; SUBROUTINES
155 ;======================================================================
156
157 ;____________________________________________________________________
158 ; SENDCHAR
159 ; sends ASCII value contained in A to UART
160
00A6 161 SENDCHAR:
162
00A6 3099FD 163 JNB TI,$ ; wait til present char gone
00A9 C299 164 CLR TI ; must clear TI
00AB F599 165 MOV SBUF,A
00AD 22 166 RET
167
168
169 ;____________________________________________________________________
170 ; HEX2ASCII
171 ; converts A into the hex character representing the value of A's
172 ; least significant nibble
173
00AE 174 HEX2ASCII:
I2CSLAVE PAGE 4
175
00AE 540F 176 ANL A,#00Fh
00B0 B40A00 177 CJNE A,#00Ah,$+3
00B3 4002 178 JC IO0030
00B5 2407 179 ADD A,#007h
00B7 2430 180 IO0030: ADD A,#'0'
00B9 22 181 RET
182
183
184 ;____________________________________________________________________
185 ; SENDVAL
186 ; converts the hex value of A into two ASCII chars, and then spits
187 ; these two characters up the UART. does not change the value of A.
188
00BA 189 SENDVAL:
00BA C0E0 190 PUSH ACC
00BC C4 191 SWAP A
00BD 11AE 192 CALL HEX2ASCII
00BF 11A6 193 CALL SENDCHAR ; send high nibble
00C1 D0E0 194 POP ACC
00C3 C0E0 195 PUSH ACC
00C5 11AE 196 CALL HEX2ASCII
00C7 11A6 197 CALL SENDCHAR ; send low nibble
00C9 D0E0 198 POP ACC
199
00CB 22 200 RET
201 ;____________________________________________________________________
202
203 END
VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND
I2CSLAVE PAGE 5
ACC. . . . . . . . . . . . . . . D ADDR 00E0H PREDEFINED
BYTECNT. . . . . . . . . . . . . D ADDR 0030H NOT USED
EA . . . . . . . . . . . . . . . B ADDR 00AFH PREDEFINED
ENDINT1. . . . . . . . . . . . . C ADDR 0052H
ENDINT2. . . . . . . . . . . . . C ADDR 0054H NOT USED
EX0. . . . . . . . . . . . . . . B ADDR 00A8H PREDEFINED
FIRST. . . . . . . . . . . . . . B ADDR 0001H
GO . . . . . . . . . . . . . . . B ADDR 0000H
HEX2ASCII. . . . . . . . . . . . C ADDR 00AEH
I2CADD . . . . . . . . . . . . . D ADDR 009BH PREDEFINED
I2CCON . . . . . . . . . . . . . D ADDR 00E8H PREDEFINED
I2CDAT . . . . . . . . . . . . . D ADDR 009AH PREDEFINED
I2CI . . . . . . . . . . . . . . B ADDR 00E8H PREDEFINED
I2CTX. . . . . . . . . . . . . . B ADDR 00E9H PREDEFINED
IE2. . . . . . . . . . . . . . . D ADDR 00A9H PREDEFINED
INPUT. . . . . . . . . . . . . . D ADDR 0031H
IO0030 . . . . . . . . . . . . . C ADDR 00B7H
IT0. . . . . . . . . . . . . . . B ADDR 0088H PREDEFINED
LED. . . . . . . . . . . . . . . NUMB 00B4H
MAIN . . . . . . . . . . . . . . C ADDR 0060H
OUTPUT . . . . . . . . . . . . . D ADDR 0032H
P3 . . . . . . . . . . . . . . . D ADDR 00B0H PREDEFINED
RECEIVE. . . . . . . . . . . . . C ADDR 003EH NOT USED
RESET. . . . . . . . . . . . . . C ADDR 0081H
RI . . . . . . . . . . . . . . . B ADDR 0098H PREDEFINED
SBUF . . . . . . . . . . . . . . D ADDR 0099H PREDEFINED
SCON . . . . . . . . . . . . . . D ADDR 0098H PREDEFINED
SENDCHAR . . . . . . . . . . . . C ADDR 00A6H
SENDUART . . . . . . . . . . . . C ADDR 008BH NOT USED
SENDVAL. . . . . . . . . . . . . C ADDR 00BAH
TH1. . . . . . . . . . . . . . . D ADDR 008DH PREDEFINED
TI . . . . . . . . . . . . . . . B ADDR 0099H PREDEFINED
TMOD . . . . . . . . . . . . . . D ADDR 0089H PREDEFINED
TR . . . . . . . . . . . . . . . B ADDR 0002H
TR1. . . . . . . . . . . . . . . B ADDR 008EH PREDEFINED
TRANSMIT . . . . . . . . . . . . C ADDR 004BH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -