📄 i2c.lst
字号:
141 0034 L62:
141 0034 L59:
; 138: for(j=0; j<255; j++) //收到ACK的上升沿信号,等待Slave放弃总线
138 0034 1480 R INC CR6
138 0035 L61:
138 0035 0700 R MOV A,CR6
138 0036 0AFF SUB A,0ffh
138 0037 380A SNZ [0ah].0
138 0038 2800 R JMP L58
; 143: ucWatch2 = 0x01; return ERROR;
143 0039 0F01 MOV A,01h
143 003A 0080 R MOV _ucWatch2,A
143 003B 1F05 CLR [05H]
143 003C 2800 R JMP L43
143 003D L56:
; 147: ucWatch2 = 0x02; return ERROR;
147 003D 0F02 MOV A,02h
147 003E 0080 R MOV _ucWatch2,A
147 003F 1F05 CLR [05H]
147 0040 2800 R JMP L43
147 0041 L52:
; 150: I2C.uSend.bits.bPrevious = I2C.uSend.bits.bCurrent;
150 0041 0700 R MOV A,_I2C[1]
150 0042 0EFD AND A,0fdh
150 0043 0080 R MOV b0_6,A
150 0044 0700 R MOV A,_I2C[1]
150 0045 0E01 AND A,01h
150 0046 0080 R MOV b1_6,A
150 0047 0700 R MOV A,b1_6
150 0048 0E01 AND A,01h
150 0049 0080 R MOV b1_6,A
150 004A 340A CLR [0AH].0
150 004B 1A80 R RLC b1_6
150 004C 0F02 MOV A,02h
150 004D 0680 R ANDM A,b1_6
150 004E 0700 R MOV A,b0_6
文件:I2C.C 盛群编译器版本 2.86 页次8
150 004F 0500 R OR A,b1_6
文件:I2C.c 盛群编译器版本 2.86 页次9
150 0050 0080 R MOV _I2C[1],A
150 0051 L48:
; 131: for(i=0; i<255; i++) //接收ACK信号
131 0051 1480 R INC CR7
131 0052 L50:
131 0052 0700 R MOV A,CR7
131 0053 0AFF SUB A,0ffh
131 0054 380A SNZ [0ah].0
131 0055 2800 R JMP L47
; 152: ucWatch2 = 0x03; return ERROR;
152 0056 0F03 MOV A,03h
152 0057 0080 R MOV _ucWatch2,A
152 0058 1F05 CLR [05H]
152 0059 L43:
152 0059 0003 RET
152 0000 00 LOCAL b0_6 DB ?
152 0001 00 LOCAL b1_6 DB ?
; 126: unsigned char i, j;
126 0002 00 LOCAL CR6 DB ? ; j
126 0003 00 LOCAL CR7 DB ? ; i
126 005A _SendByte ENDP
; 156: {
156 0000 @ReceiveByte .SECTION 'CODE'
156 0000 PUBLIC _ReceiveByte
156 0000 _ReceiveByte PROC
; 160: I2C.uSend.ucValue = 0x80; //发送准备信息
160 0000 0F80 MOV A,080h
160 0001 0080 R MOV _I2C[1],A
; 161: I2C.ucPulseNumber = 1;
161 0002 0F01 MOV A,01h
161 0003 0080 R MOV _I2C[4],A
; 162: PulseOut();
162 0004 2000 R CALL _PulseOut
; 163: I2C.uReceive.ucValue = 0;
163 0005 1F00 R CLR _I2C[2]
; 165: for(i=0; i<8; i++)
165 0006 1F00 R CLR CR12
165 0007 2800 R JMP L73
165 0008 L70:
; 167: I2C.uSend.bits.bPrevious = _SCL;
167 0008 0700 R MOV A,_I2C[1]
167 0009 0EFD AND A,0fdh
167 000A 0080 R MOV b0_7,A
167 000B 1F00 R CLR b1_7
167 000C 3F92 SZ [012H].7
167 000D 3000 R SET b1_7.0
167 000E 0F01 MOV A,01h
167 000F 0680 R ANDM A,b1_7
167 0010 340A CLR [0AH].0
167 0011 1A80 R RLC b1_7
文件:I2C.c 盛群编译器版本 2.86 页次10
文件:I2C.C 盛群编译器版本 2.86 页次9
167 0012 0F02 MOV A,02h
167 0013 0680 R ANDM A,b1_7
167 0014 0700 R MOV A,b0_7
167 0015 0500 R OR A,b1_7
167 0016 0080 R MOV _I2C[1],A
; 168: I2C.uReceive.ucValue <<= 1; //接收下一个BIT
168 0017 340A CLR [0AH].0
168 0018 1A80 R RLC _I2C[2]
; 169: for(j=0; j<0xFF; j++)
169 0019 1F00 R CLR CR11
169 001A 2800 R JMP L79
169 001B L76:
; 171: I2C.uSend.bits.bCurrent = _SCL;
171 001B 0700 R MOV A,_I2C[1]
171 001C 0EFE AND A,0feh
171 001D 0080 R MOV b0_7,A
171 001E 1F00 R CLR b1_7
171 001F 3F92 SZ [012H].7
171 0020 3000 R SET b1_7.0
171 0021 0700 R MOV A,b1_7
171 0022 0E01 AND A,01h
171 0023 0080 R MOV b1_7,A
171 0024 0700 R MOV A,b1_7
171 0025 0E01 AND A,01h
171 0026 0080 R MOV b1_7,A
171 0027 0700 R MOV A,b0_7
171 0028 0500 R OR A,b1_7
171 0029 0080 R MOV _I2C[1],A
; 172: if (I2C.uSend.bits.bCurrent && !I2C.uSend.bits.bPrevious) //读取SCL上升沿时,SDA的值
172 002A 3800 R SNZ _I2C[1].0
172 002B 2800 R JMP L81
172 002C 3C00 R SZ _I2C[1].1
172 002D 2800 R JMP L81
; 174: I2C.uReceive.bits.bData = _SDA;
174 002E 0700 R MOV A,_I2C[2]
174 002F 0EFE AND A,0feh
174 0030 0080 R MOV b0_7,A
174 0031 1F00 R CLR b1_7
174 0032 3F12 SZ [012H].6
174 0033 3000 R SET b1_7.0
174 0034 0700 R MOV A,b1_7
174 0035 0E01 AND A,01h
174 0036 0080 R MOV b1_7,A
174 0037 0700 R MOV A,b1_7
174 0038 0E01 AND A,01h
174 0039 0080 R MOV b1_7,A
174 003A 0700 R MOV A,b0_7
174 003B 0500 R OR A,b1_7
174 003C 0080 R MOV _I2C[2],A
; 175: break;
175 003D 2800 R JMP L78
175 003E L81:
文件:I2C.c 盛群编译器版本 2.86 页次11
; 177: I2C.uSend.bits.bPrevious = I2C.uSend.bits.bCurrent;
177 003E 0700 R MOV A,_I2C[1]
177 003F 0EFD AND A,0fdh
177 0040 0080 R MOV b0_7,A
文件:I2C.C 盛群编译器版本 2.86 页次10
177 0041 0700 R MOV A,_I2C[1]
177 0042 0E01 AND A,01h
177 0043 0080 R MOV b1_7,A
177 0044 0700 R MOV A,b1_7
177 0045 0E01 AND A,01h
177 0046 0080 R MOV b1_7,A
177 0047 340A CLR [0AH].0
177 0048 1A80 R RLC b1_7
177 0049 0F02 MOV A,02h
177 004A 0680 R ANDM A,b1_7
177 004B 0700 R MOV A,b0_7
177 004C 0500 R OR A,b1_7
177 004D 0080 R MOV _I2C[1],A
177 004E L77:
; 169: for(j=0; j<0xFF; j++)
169 004E 1480 R INC CR11
169 004F L79:
169 004F 0700 R MOV A,CR11
169 0050 0AFF SUB A,0ffh
169 0051 380A SNZ [0ah].0
169 0052 2800 R JMP L76
169 0053 L78:
; 179: if (j == 0xFF)
179 0053 0700 R MOV A,CR11
179 0054 0CFF XOR A,0ffh
179 0055 390A SNZ [0ah].2
179 0056 2800 R JMP L88
; 180: return ERROR;
180 0057 1F05 CLR [05H]
180 0058 2800 R JMP L66
180 0059 L88:
180 0059 L71:
; 165: for(i=0; i<8; i++)
165 0059 1480 R INC CR12
165 005A L73:
165 005A 0700 R MOV A,CR12
165 005B 0A08 SUB A,08h
165 005C 380A SNZ [0ah].0
165 005D 2800 R JMP L70
; 183: I2C.uSend.bits.bPrevious = _SCL; //等待结束信号
183 005E 0700 R MOV A,_I2C[1]
183 005F 0EFD AND A,0fdh
183 0060 0080 R MOV b0_7,A
183 0061 1F00 R CLR b1_7
183 0062 3F92 SZ [012H].7
183 0063 3000 R SET b1_7.0
183 0064 0F01 MOV A,01h
183 0065 0680 R ANDM A,b1_7
文件:I2C.c 盛群编译器版本 2.86 页次12
183 0066 340A CLR [0AH].0
183 0067 1A80 R RLC b1_7
183 0068 0F02 MOV A,02h
183 0069 0680 R ANDM A,b1_7
183 006A 0700 R MOV A,b0_7
183 006B 0500 R OR A,b1_7
183 006C 0080 R MOV _I2C[1],A
文件:I2C.C 盛群编译器版本 2.86 页次11
; 184: for(i=0; i<0xFF; i++)
184 006D 1F00 R CLR CR12
184 006E 2800 R JMP L94
184 006F L91:
; 186: I2C.uSend.bits.bCurrent = _SCL;
186 006F 0700 R MOV A,_I2C[1]
186 0070 0EFE AND A,0feh
186 0071 0080 R MOV b0_7,A
186 0072 1F00 R CLR b1_7
186 0073 3F92 SZ [012H].7
186 0074 3000 R SET b1_7.0
186 0075 0700 R MOV A,b1_7
186 0076 0E01 AND A,01h
186 0077 0080 R MOV b1_7,A
186 0078 0700 R MOV A,b1_7
186 0079 0E01 AND A,01h
186 007A 0080 R MOV b1_7,A
186 007B 0700 R MOV A,b0_7
186 007C 0500 R OR A,b1_7
186 007D 0080 R MOV _I2C[1],A
; 187: if (I2C.uSend.bits.bCurrent && !I2C.uSend.bits.bPrevious) //读取SCL上升沿时,SDA的值
187 007E 3800 R SNZ _I2C[1].0
187 007F 2800 R JMP L96
187 0080 3C00 R SZ _I2C[1].1
187 0081 2800 R JMP L96
; 189: if (_SDA == LOW)
189 0082 3F12 SZ [012H].6
189 0083 2800 R JMP L93
; 190: return ERROR;
190 0084 1F05 CLR [05H]
190 0085 2800 R JMP L66
190 0086 L96:
; 194: I2C.uSend.bits.bPrevious = I2C.uSend.bits.bCurrent;
194 0086 0700 R MOV A,_I2C[1]
194 0087 0EFD AND A,0fdh
194 0088 0080 R MOV b0_7,A
194 0089 0700 R MOV A,_I2C[1]
194 008A 0E01 AND A,01h
194 008B 0080 R MOV b1_7,A
194 008C 0700 R MOV A,b1_7
194 008D 0E01 AND A,01h
194 008E 0080 R MOV b1_7,A
194 008F 340A CLR [0AH].0
194 0090 1A80 R RLC b1_7
194 0091 0F02 MOV A,02h
文件:I2C.c 盛群编译器版本 2.86 页次13
194 0092 0680 R ANDM A,b1_7
194 0093 0700 R MOV A,b0_7
194 0094 0500 R OR A,b1_7
194 0095 0080 R MOV _I2C[1],A
194 0096 L92:
; 184: for(i=0; i<0xFF; i++)
184 0096 1480 R INC CR12
184 0097 L94:
文件:I2C.C 盛群编译器版本 2.86 页次12
184 0097 0700 R MOV A,CR12
184 0098 0AFF SUB A,0ffh
184 0099 380A SNZ [0ah].0
184 009A 2800 R JMP L91
184 009B L93:
; 196: if (i == 0xFF)
196 009B 0700 R MOV A,CR12
196 009C 0CFF XOR A,0ffh
196 009D 390A SNZ [0ah].2
196 009E 2800 R JMP L104
; 197: return ERROR;
197 009F 1F05 CLR [05H]
197 00A0 2800 R JMP L66
197 00A1 L104:
; 199: I2C.ucPulseNumber = 1; //发送ACK信号
199 00A1 0F01 MOV A,01h
199 00A2 0080 R MOV _I2C[4],A
; 200: I2C.uSend.ucValue = 0;
200 00A3 1F00 R CLR _I2C[1]
; 201: PulseOut();
201 00A4 2000 R CALL _PulseOut
; 203: I2C.uMode.bits.bSDA = INPUT; //放弃I2C的发送权力
203 00A5 3000 R SET _I2C[3].6
; 204: _I2CPort = I2C.uMode.ucValue;
204 00A6 0700 R MOV A,_I2C[3]
204 00A7 0093 MOV __pac,A
; 205: I2C.uMode.bits.bSCL = INPUT;
205 00A8 3000 R SET _I2C[3].7
; 206: _I2CPort = I2C.uMode.ucValue;
206 00A9 0700 R MOV A,_I2C[3]
206 00AA 0093 MOV __pac,A
; 207: return OK;
207 00AB 1F05 CLR [05H]
207 00AC 3005 SET [05H].0
207 00AD L66:
207 00AD 0003 RET
207 0000 00 LOCAL b0_7 DB ?
207 0001 00 LOCAL b1_7 DB ?
; 158: unsigned char j;
文件:I2C.c 盛群编译器版本 2.86 页次14
158 0002 00 LOCAL CR11 DB ? ; j
; 157: unsigned char i;
157 0003 00 LOCAL CR12 DB ? ; i
157 00AE _ReceiveByte ENDP
; 211: {
211 0000 @Send .SECTION 'CODE'
211 0000 PUBLIC _Send
211 0000 _Send PROC
; 213: if (SendStart())
213 0000 2000 R CALL _SendStart
213 0001 0080 R MOV b0_8,A
213 0002 3800 R SNZ b0_8.0
213 0003 2800 R JMP L113
; 215: I2C.uSend.ucValue = I2C.ucID << 4;
215 0004 1100 R SWAPA _I2C[5]
215 0005 0EF0 AND A,0F0H
文件:I2C.C 盛群编译器版本 2.86 页次13
215 0006 0080 R MOV _I2C[1],A
; 216: I2C.uSend.ucValue |= I2C.ucCommand;
216 0007 0700 R MOV A,_I2C[6]
216 0008 0580 R ORM A,_I2C[1]
; 217: if (SendByte())
217 0009 2000 R CALL _SendByte
217 000A 0080 R MOV b0_8,A
217 000B 3800 R SNZ b0_8.0
217 000C 2800 R JMP L119
; 219: switch(I2C.ucCommand)
219 000D 0700 R MOV A,_I2C[6]
219 000E 0080 R MOV b0_8,A
219 000F 0700 R MOV A,b0_8
219 0010 0C01 XOR A,01h
219 0011 3D0A SZ [0ah].2
219 0012 2800 R JMP L124
219 0013 0700 R MOV A,b0_8
219 0014 0C03 XOR A,03h
219 0015 3D0A SZ [0ah].2
219 0016 2800 R JMP L134
219 0017 2800 R JMP L121
219 0018 L124:
; 222: for(i=0; i<I2C.ucDataNumber; i++)
222 0018 1F00 R CLR CR20
222 0019 2800 R JMP L128
222 001A L125:
; 224: I2C.uSend.ucValue = I2C.ucData[i];
224 001A 0700 R MOV A,CR20
224 001B 0B00 R ADD A,OFFSET _I2C[8]
224 001C 0080 R MOV b0_8,A
224 001D 0700 R MOV A,b0_8
224 001E 0081 MOV [01H],A
224 001F 0700 MOV A,[00H]
文件:I2C.c 盛群编译器版本 2.86 页次15
224 0020 0080 R MOV b0_8,A
224 0021 0700 R MOV A,b0_8
224 0022 0080 R MOV _I2C[1],A
; 225: if (!SendByte())
225 0023 2000 R CALL _SendByte
225 0024 0080 R MOV b0_8,A
225 0025 3C00 R SZ b0_8.0
225 0026 2800 R JMP L132
; 226: {ucWatch = i;break;}
226 0027 0700 R MOV A,CR20
226 0028 0080 R MOV _ucWatch,A
226 0029 2800 R JMP L127
226 002A L132:
226 002A L126:
; 222: for(i=0; i<I2C.ucDataNumber; i++)
222 002A 1480 R INC CR20
222 002B L128:
222 002B 0700 R MOV A,CR20
文件:I2C.C 盛群编译器版本 2.86 页次14
222 002C 0200 R SUB A,_I2C[7]
222 002D 380A SNZ [0ah].0
222 002E 2800 R JMP L125
222 002F L127:
; 228: return OK;
228 002F 1F05 CLR [05H]
228 0030 3005 SET [05H].0
228 0031 2800 R JMP L112
228 0032 L134:
; 231: for(i=0; i<I2C.ucDataNumber; i++)
231 0032 1F00 R CLR CR20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -