📄 lcd.s51
字号:
; Setup parameters for call to function smbStop
MOV DPTR,#(smbStop & 0xffff)
MOV A,#((smbStop >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
CFI EndBlock cfiBlock11
// 263 }
REQUIRE ?Subroutine3
; // Fall through to label ?Subroutine3
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine3:
CFI Block cfiBlock12 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
MOV R7,#0x2
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock12
// 264
// 265 /******************************************************************************
// 266 * Internal function for lcd.c
// 267 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 268 BOOL smbSendByte(BYTE b){
smbSendByte:
CFI Block cfiBlock13 Using cfiCommon0
CFI Function smbSendByte
FUNCALL smbSendByte, smbWrite
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL smbSendByte, smbClock
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL smbSendByte, smbClock
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
MOV A,#-0x9
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 0
MOV A,R1
MOV R7,A
// 269 UINT8 i;
// 270 BOOL ack;
// 271 for (i = 0; i < 8; i++){
MOV R6,#0x8
// 272 smbWrite(b & 0x80);
??smbSendByte_0:
; Setup parameters for call to function smbWrite
MOV A,#-0x80
ANL A,R7
MOV R1,A
MOV DPTR,#(smbWrite & 0xffff)
MOV A,#((smbWrite >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 273 b = (b << 1);
MOV A,R7
CLR C
RLC A
MOV R7,A
// 274 }
DEC R6
MOV A,R6
JNZ ??smbSendByte_0
// 275 smbClock(0);
; Setup parameters for call to function smbClock
MOV R1,#0x0
MOV DPTR,#(smbClock & 0xffff)
MOV A,#((smbClock >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 276 DATA_HIGH();
ANL 0xfe,#0xfb
// 277 smbClock(1);
; Setup parameters for call to function smbClock
MOV R1,#0x1
MOV A,#((smbClock >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 278 ack = !LCD_SDA;
MOV C,0x90.2
CLR A
MOV 0xE0 /* A */.0,C
CPL A
ANL A,#0x1
MOV R1,A
// 279 return ack; //high = ACK received, else ACK not received
LJMP ??Subroutine0_0 & 0xFFFF
CFI EndBlock cfiBlock13
// 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 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 288 void smbWrite(BOOL value){
smbWrite:
CFI Block cfiBlock14 Using cfiCommon0
CFI Function smbWrite
FUNCALL smbWrite, smbClock
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL smbWrite, waitLCD
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL smbWrite, smbClock
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL smbWrite, waitLCD
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
MOV A,#-0x9
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 0
MOV A,R1
MOV R6,A
// 289 smbClock(0);
; Setup parameters for call to function smbClock
MOV R1,#0x0
MOV DPTR,#(smbClock & 0xffff)
MOV A,#((smbClock >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 290 waitLCD();
; Setup parameters for call to function waitLCD
MOV DPTR,#(waitLCD & 0xffff)
MOV A,#((waitLCD >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 291 if(value){
MOV A,R6
JZ ??smbWrite_0
// 292 DATA_HIGH();
ANL 0xfe,#0xfb
SJMP ??smbWrite_1
// 293 }
// 294 else{
// 295 DATA_LOW();
??smbWrite_0:
ORL 0xfe,#0x4
CLR 0x90.2
// 296 }
// 297 smbClock(1);
??smbWrite_1:
; Setup parameters for call to function smbClock
MOV R1,#0x1
MOV DPTR,#(smbClock & 0xffff)
MOV A,#((smbClock >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 298 waitLCD();
; Setup parameters for call to function waitLCD
MOV DPTR,#(waitLCD & 0xffff)
MOV A,#((waitLCD >> 16) & 0xff)
LJMP ?Subroutine4 & 0xFFFF
CFI EndBlock cfiBlock14
// 299 }
// 300
// 301 /******************************************************************************
// 302 * Internal function for lcd.c
// 303 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 304 void smbReceive(BYTE address, int length, BYTE *buffer){
smbReceive:
CFI Block cfiBlock15 Using cfiCommon0
CFI Function smbReceive
FUNCALL smbReceive, smbStart
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL smbReceive, smbSendByte
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL smbReceive, smbReceiveByte
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL smbReceive, smbClock
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL smbReceive, smbWrite
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
FUNCALL smbReceive, smbStop
LOCFRAME XSTACK, 14, STACK
ARGFRAME XSTACK, 14, STACK
MOV A,#-0xe
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 14)
; Saved register size: 14
; Auto size: 0
MOV A,R1
MOV R6,A
MOV ?V0 + 4,R2
MOV ?V0 + 5,R3
MOV ?V0 + 0,R4
MOV ?V0 + 1,R5
// 305 int i;
// 306
// 307 smbStart();
; Setup parameters for call to function smbStart
MOV DPTR,#(smbStart & 0xffff)
MOV A,#((smbStart >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 308
// 309 while (!smbSendByte(address)); //send address until ACK'ed
??smbReceive_0:
; Setup parameters for call to function smbSendByte
MOV A,R6
MOV R1,A
MOV DPTR,#(smbSendByte & 0xffff)
MOV A,#((smbSendByte >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
JZ ??smbReceive_0
// 310
// 311 for(i = 0; i < length; i++){
MOV R6,#0x0
MOV R7,#0x0
CLR C
MOV A,?V0 + 4
SUBB A,#0x1
MOV A,?V0 + 5
SUBB A,#0x0
MOV C,0xD0 /* PSW */.2
XRL A,PSW
RLC A
JC ??smbReceive_1
MOV ?V0 + 2,?V0 + 0
MOV ?V0 + 3,?V0 + 1
MOV A,#-0x1
ADD A,?V0 + 4
MOV ?V0 + 0,A
MOV A,#-0x1
ADDC A,?V0 + 5
MOV ?V0 + 1,A
// 312 buffer[i] = smbReceiveByte( i==(length-1) ); //TRUE if last byte
??smbReceive_2:
MOV A,?V0 + 0
XRL A,R6
JNZ ??smbReceive_3
MOV A,?V0 + 1
XRL A,R7
??smbReceive_3:
JNZ ??smbReceive_4
MOV R1,#0x1
SJMP ??smbReceive_5
??smbReceive_4:
MOV R1,#0x0
??smbReceive_5:
; Setup parameters for call to function smbReceiveByte
MOV DPTR,#(smbReceiveByte & 0xffff)
MOV A,#((smbReceiveByte >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
MOV DPL,?V0 + 2
MOV DPH,?V0 + 3
MOVX @DPTR,A
// 313 }
MOV A,R6
ADD A,#0x1
INC R6
MOV A,R7
ADDC A,#0x0
MOV R7,A
INC DPTR
MOV ?V0 + 2,DPL
MOV ?V0 + 3,DPH
CLR C
MOV A,R6
SUBB A,?V0 + 4
MOV A,R7
SUBB A,?V0 + 5
MOV C,0xD0 /* PSW */.2
XRL A,PSW
RLC A
JC ??smbReceive_2
// 314
// 315 smbClock(1);
??smbReceive_1:
; Setup parameters for call to function smbClock
MOV R1,#0x1
MOV DPTR,#(smbClock & 0xffff)
MOV A,#((smbClock >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 316 smbWrite(0);
; Setup parameters for call to function smbWrite
MOV R1,#0x0
MOV DPTR,#(smbWrite & 0xffff)
MOV A,#((smbWrite >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 317
// 318 smbStop();
; Setup parameters for call to function smbStop
MOV DPTR,#(smbStop & 0xffff)
MOV A,#((smbStop >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 319 }
MOV R7,#0x6
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock15
// 320
// 321 /******************************************************************************
// 322 * Internal function for lcd.c
// 323 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 324 BYTE smbReceiveByte(BOOL lastByte){
smbReceiveByte:
CFI Block cfiBlock16 Using cfiCommon0
CFI Function smbReceiveByte
FUNCALL smbReceiveByte, waitLCD
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL smbReceiveByte, smbClock
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL smbReceiveByte, waitLCD
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL smbReceiveB
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -