⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
        ; 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 + -