📄 lcd.lst
字号:
\ 000039 90.... MOV DPTR,#(smbStop & 0xffff)
\ 00003C 74.. MOV A,#((smbStop >> 16) & 0xff)
\ 00003E 12.... LCALL ?BCALL ; Banked call to: DPTR()
263 }
\ 000041 REQUIRE ?Subroutine3
\ 000041 ; // Fall through to label ?Subroutine3
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine3:
\ 000000 7F02 MOV R7,#0x2
\ 000002 02.... LJMP ?BANKED_LEAVE_XDATA
264
265 /******************************************************************************
266 * Internal function for lcd.c
267 ******************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
268 BOOL smbSendByte(BYTE b){
\ smbSendByte:
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 E9 MOV A,R1
\ 000006 FF MOV R7,A
269 UINT8 i;
270 BOOL ack;
271 for (i = 0; i < 8; i++){
\ 000007 7E08 MOV R6,#0x8
272 smbWrite(b & 0x80);
\ ??smbSendByte_0:
\ 000009 ; Setup parameters for call to function smbWrite
\ 000009 7480 MOV A,#-0x80
\ 00000B 5F ANL A,R7
\ 00000C F9 MOV R1,A
\ 00000D 90.... MOV DPTR,#(smbWrite & 0xffff)
\ 000010 74.. MOV A,#((smbWrite >> 16) & 0xff)
\ 000012 12.... LCALL ?BCALL ; Banked call to: DPTR()
273 b = (b << 1);
\ 000015 EF MOV A,R7
\ 000016 C3 CLR C
\ 000017 33 RLC A
\ 000018 FF MOV R7,A
274 }
\ 000019 1E DEC R6
\ 00001A EE MOV A,R6
\ 00001B 70EC JNZ ??smbSendByte_0
275 smbClock(0);
\ 00001D ; Setup parameters for call to function smbClock
\ 00001D 7900 MOV R1,#0x0
\ 00001F 90.... MOV DPTR,#(smbClock & 0xffff)
\ 000022 74.. MOV A,#((smbClock >> 16) & 0xff)
\ 000024 12.... LCALL ?BCALL ; Banked call to: DPTR()
276 DATA_HIGH();
\ 000027 53FEFB ANL 0xfe,#0xfb
277 smbClock(1);
\ 00002A ; Setup parameters for call to function smbClock
\ 00002A 7901 MOV R1,#0x1
\ 00002C 74.. MOV A,#((smbClock >> 16) & 0xff)
\ 00002E 12.... LCALL ?BCALL ; Banked call to: DPTR()
278 ack = !LCD_SDA;
\ 000031 A292 MOV C,0x90.2
\ 000033 E4 CLR A
\ 000034 92E0 MOV 0xE0 /* A */.0,C
\ 000036 F4 CPL A
\ 000037 5401 ANL A,#0x1
\ 000039 F9 MOV R1,A
279 return ack; //high = ACK received, else ACK not received
\ 00003A 02.... LJMP ??Subroutine0_0 & 0xFFFF
280 }
281
282 /******************************************************************************
283 * Internal function for lcd.c
284 * Function for writing bit to the data line. Setting the port as input
285 * make the SMBus go high because of the pull-up resistors.
286 *
287 ******************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
288 void smbWrite(BOOL value){
\ smbWrite:
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 E9 MOV A,R1
\ 000006 FE MOV R6,A
289 smbClock(0);
\ 000007 ; Setup parameters for call to function smbClock
\ 000007 7900 MOV R1,#0x0
\ 000009 90.... MOV DPTR,#(smbClock & 0xffff)
\ 00000C 74.. MOV A,#((smbClock >> 16) & 0xff)
\ 00000E 12.... LCALL ?BCALL ; Banked call to: DPTR()
290 waitLCD();
\ 000011 ; Setup parameters for call to function waitLCD
\ 000011 90.... MOV DPTR,#(waitLCD & 0xffff)
\ 000014 74.. MOV A,#((waitLCD >> 16) & 0xff)
\ 000016 12.... LCALL ?BCALL ; Banked call to: DPTR()
291 if(value){
\ 000019 EE MOV A,R6
\ 00001A 6005 JZ ??smbWrite_0
292 DATA_HIGH();
\ 00001C 53FEFB ANL 0xfe,#0xfb
\ 00001F 8005 SJMP ??smbWrite_1
293 }
294 else{
295 DATA_LOW();
\ ??smbWrite_0:
\ 000021 43FE04 ORL 0xfe,#0x4
\ 000024 C292 CLR 0x90.2
296 }
297 smbClock(1);
\ ??smbWrite_1:
\ 000026 ; Setup parameters for call to function smbClock
\ 000026 7901 MOV R1,#0x1
\ 000028 90.... MOV DPTR,#(smbClock & 0xffff)
\ 00002B 74.. MOV A,#((smbClock >> 16) & 0xff)
\ 00002D 12.... LCALL ?BCALL ; Banked call to: DPTR()
298 waitLCD();
\ 000030 ; Setup parameters for call to function waitLCD
\ 000030 90.... MOV DPTR,#(waitLCD & 0xffff)
\ 000033 74.. MOV A,#((waitLCD >> 16) & 0xff)
\ 000035 02.... LJMP ?Subroutine4 & 0xFFFF
299 }
300
301 /******************************************************************************
302 * Internal function for lcd.c
303 ******************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
304 void smbReceive(BYTE address, int length, BYTE *buffer){
\ smbReceive:
\ 000000 74F2 MOV A,#-0xe
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 14
\ 000005 ; Auto size: 0
\ 000005 E9 MOV A,R1
\ 000006 FE MOV R6,A
\ 000007 8A.. MOV ?V0 + 4,R2
\ 000009 8B.. MOV ?V0 + 5,R3
\ 00000B 8C.. MOV ?V0 + 0,R4
\ 00000D 8D.. MOV ?V0 + 1,R5
305 int i;
306
307 smbStart();
\ 00000F ; Setup parameters for call to function smbStart
\ 00000F 90.... MOV DPTR,#(smbStart & 0xffff)
\ 000012 74.. MOV A,#((smbStart >> 16) & 0xff)
\ 000014 12.... LCALL ?BCALL ; Banked call to: DPTR()
308
309 while (!smbSendByte(address)); //send address until ACK'ed
\ ??smbReceive_0:
\ 000017 ; Setup parameters for call to function smbSendByte
\ 000017 EE MOV A,R6
\ 000018 F9 MOV R1,A
\ 000019 90.... MOV DPTR,#(smbSendByte & 0xffff)
\ 00001C 74.. MOV A,#((smbSendByte >> 16) & 0xff)
\ 00001E 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000021 E9 MOV A,R1
\ 000022 60F3 JZ ??smbReceive_0
310
311 for(i = 0; i < length; i++){
\ 000024 7E00 MOV R6,#0x0
\ 000026 7F00 MOV R7,#0x0
\ 000028 C3 CLR C
\ 000029 E5.. MOV A,?V0 + 4
\ 00002B 9401 SUBB A,#0x1
\ 00002D E5.. MOV A,?V0 + 5
\ 00002F 9400 SUBB A,#0x0
\ 000031 A2D2 MOV C,0xD0 /* PSW */.2
\ 000033 65D0 XRL A,PSW
\ 000035 33 RLC A
\ 000036 404F JC ??smbReceive_1
\ 000038 85.... MOV ?V0 + 2,?V0 + 0
\ 00003B 85.... MOV ?V0 + 3,?V0 + 1
\ 00003E 74FF MOV A,#-0x1
\ 000040 25.. ADD A,?V0 + 4
\ 000042 F5.. MOV ?V0 + 0,A
\ 000044 74FF MOV A,#-0x1
\ 000046 35.. ADDC A,?V0 + 5
\ 000048 F5.. MOV ?V0 + 1,A
312 buffer[i] = smbReceiveByte( i==(length-1) ); //TRUE if last byte
\ ??smbReceive_2:
\ 00004A E5.. MOV A,?V0 + 0
\ 00004C 6E XRL A,R6
\ 00004D 7003 JNZ ??smbReceive_3
\ 00004F E5.. MOV A,?V0 + 1
\ 000051 6F XRL A,R7
\ ??smbReceive_3:
\ 000052 7004 JNZ ??smbReceive_4
\ 000054 7901 MOV R1,#0x1
\ 000056 8002 SJMP ??smbReceive_5
\ ??smbReceive_4:
\ 000058 7900 MOV R1,#0x0
\ ??smbReceive_5:
\ 00005A ; Setup parameters for call to function smbReceiveByte
\ 00005A 90.... MOV DPTR,#(smbReceiveByte & 0xffff)
\ 00005D 74.. MOV A,#((smbReceiveByte >> 16) & 0xff)
\ 00005F 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000062 E9 MOV A,R1
\ 000063 85..82 MOV DPL,?V0 + 2
\ 000066 85..83 MOV DPH,?V0 + 3
\ 000069 F0 MOVX @DPTR,A
313 }
\ 00006A EE MOV A,R6
\ 00006B 2401 ADD A,#0x1
\ 00006D 0E INC R6
\ 00006E EF MOV A,R7
\ 00006F 3400 ADDC A,#0x0
\ 000071 FF MOV R7,A
\ 000072 A3 INC DPTR
\ 000073 8582.. MOV ?V0 + 2,DPL
\ 000076 8583.. MOV ?V0 + 3,DPH
\ 000079 C3 CLR C
\ 00007A EE MOV A,R6
\ 00007B 95.. SUBB A,?V0 + 4
\ 00007D EF MOV A,R7
\ 00007E 95.. SUBB A,?V0 + 5
\ 000080 A2D2 MOV C,0xD0 /* PSW */.2
\ 000082 65D0 XRL A,PSW
\ 000084 33 RLC A
\ 000085 40C3 JC ??smbReceive_2
314
315 smbClock(1);
\ ??smbReceive_1:
\ 000087 ; Setup parameters for call to function smbClock
\ 000087 7901 MOV R1,#0x1
\ 000089 90.... MOV DPTR,#(smbClock & 0xffff)
\ 00008C 74.. MOV A,#((smbClock >> 16) & 0xff)
\ 00008E 12.... LCALL ?BCALL ; Banked call to: DPTR()
316 smbWrite(0);
\ 000091 ; Setup parameters for call to function smbWrite
\ 000091 7900 MOV R1,#0x0
\ 000093 90.... MOV DPTR,#(smbWrite & 0xffff)
\ 000096 74.. MOV A,#((smbWrite >> 16) & 0xff)
\ 000098 12.... LCALL ?BCALL ; Banked call to: DPTR()
317
318 smbStop();
\ 00009B ; Setup parameters for call to function smbStop
\ 00009B 90.... MOV DPTR,#(smbStop & 0xffff)
\ 00009E 74.. MOV A,#((smbStop >> 16) & 0xff)
\ 0000A0 12.... LCALL ?BCALL ; Banked call to: DPTR()
319 }
\ 0000A3 7F06 MOV R7,#0x6
\ 0000A5 02.... LJMP ?BANKED_LEAVE_XDATA
320
321 /******************************************************************************
322 * Internal function for lcd.c
323 ******************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
324 BYTE smbReceiveByte(BOOL lastByte){
\ smbReceiveByte:
\ 000000 74F7 MOV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -