?? lcd1602pbpd.lis
字號:
0196 26B6 in R2,0x36
0198 27FE sbrs R2,7
019A FDCF rjmp L45
019C X16:
019C ; if( I2CChkAck()!=I2C_MT_DATA_ACK )
019C 81B1 in R24,0x1
019E 887F andi R24,248
01A0 8832 cpi R24,40
01A2 11F0 breq L48
01A4 X17:
01A4 ; return I2C_ERR;
01A4 0027 clr R16
01A6 01C0 xjmp L44
01A8 L48:
01A8 ; return I2C_CRR;
01A8 01E0 ldi R16,1
01AA L44:
01AA .dbline 0 ; func end
01AA 0895 ret
01AC ; pRdDat -> R16,R17
.even
01AC _I2C_RcvNAckDat::
01AC ; }
01AC ; /*--------------------------------------------------------------------
01AC ; 函數(shù)名稱:I2C接收數(shù)據(jù)且不產(chǎn)生應(yīng)答
01AC ; 函數(shù)功能:
01AC ; 注意事項:
01AC ; 提示說明:
01AC ; 輸 入:
01AC ; 返 回:
01AC ; --------------------------------------------------------------------*/
01AC ; bool I2C_RcvNAckDat(uint8 *pRdDat)
01AC ; {
01AC ; I2CRcvNckByte();
01AC 84E8 ldi R24,132
01AE 86BF out 0x36,R24
01B0 ; I2CWaitAck();
01B0 L51:
01B0 L52:
01B0 26B6 in R2,0x36
01B2 27FE sbrs R2,7
01B4 FDCF rjmp L51
01B6 X18:
01B6 ; if( I2CChkAck()!=I2C_MR_DATA_NACK )
01B6 81B1 in R24,0x1
01B8 887F andi R24,248
01BA 8835 cpi R24,88
01BC 11F0 breq L54
01BE X19:
01BE ; return I2C_ERR;
01BE 0027 clr R16
01C0 04C0 xjmp L50
01C2 L54:
01C2 ; *pRdDat=TWDR;
01C2 23B0 in R2,0x3
01C4 F801 movw R30,R16
01C6 2082 std z+0,R2
01C8 ; return I2C_CRR;
01C8 01E0 ldi R16,1
01CA L50:
01CA .dbline 0 ; func end
01CA 0895 ret
01CC ; pRdDat -> R16,R17
.even
01CC _I2C_RcvAckDat::
01CC ; }
01CC ; /*--------------------------------------------------------------------
01CC ; 函數(shù)名稱:I2C接收數(shù)據(jù)且產(chǎn)生應(yīng)答
01CC ; 函數(shù)功能:
01CC ; 注意事項:
01CC ; 提示說明:
01CC ; 輸 入:
01CC ; 返 回:
01CC ; --------------------------------------------------------------------*/
01CC ; bool I2C_RcvAckDat(uint8 *pRdDat)
01CC ; {
01CC ; I2CRcvAckByte();
01CC 84EC ldi R24,196
01CE 86BF out 0x36,R24
01D0 ; I2CWaitAck();
01D0 L57:
01D0 L58:
01D0 26B6 in R2,0x36
01D2 27FE sbrs R2,7
01D4 FDCF rjmp L57
01D6 X20:
01D6 ; if( I2CChkAck()!=I2C_MR_DATA_ACK )
01D6 81B1 in R24,0x1
01D8 887F andi R24,248
01DA 8035 cpi R24,80
01DC 11F0 breq L60
01DE X21:
01DE ; return I2C_ERR;
01DE 0027 clr R16
01E0 04C0 xjmp L56
01E2 L60:
01E2 ; *pRdDat=TWDR;
01E2 23B0 in R2,0x3
01E4 F801 movw R30,R16
01E6 2082 std z+0,R2
01E8 ; return I2C_CRR;
01E8 01E0 ldi R16,1
01EA L56:
01EA .dbline 0 ; func end
01EA 0895 ret
01EC ; dat -> y+4
01EC ; wordAdr -> R10
01EC ; wrDAdr -> R12,R13
.even
01EC _I2C_Write::
01EC 0E940000 xcall push_xgset003C
01F0 A22E mov R10,R18
01F2 6801 movw R12,R16
01F4 ; }
01F4 ; /*--------------------------------------------------------------------
01F4 ; 函數(shù)名稱:I2C寫器件,寫一個數(shù)據(jù)
01F4 ; 函數(shù)功能:
01F4 ; 注意事項:
01F4 ; 提示說明:
01F4 ; 輸 入:wrDAdr: write device-address 寫器件地址
01F4 ; wordAdr: word address 字地址
01F4 ; dat: data 數(shù)據(jù)
01F4 ; 返 回:
01F4 ; --------------------------------------------------------------------*/
01F4 ; bool I2C_Write(uint16 wrDAdr,uint8 wordAdr,uint8 dat)
01F4 ; {
01F4 ; if( I2C_Start()==I2C_ERR )
01F4 5FDF xcall _I2C_Start
01F6 0023 tst R16
01F8 11F4 brne L63
01FA X22:
01FA ; return I2C_ERR;
01FA 0027 clr R16
01FC 17C0 xjmp L62
01FE L63:
01FE ;
01FE ; if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
01FE 8601 movw R16,R12
0200 81DF xcall _I2C_SendWrDAdr_
0202 0023 tst R16
0204 11F4 brne L65
0206 X23:
0206 ; return I2C_ERR;
0206 0027 clr R16
0208 11C0 xjmp L62
020A L65:
020A ;
020A ; if( I2C_SendDat(wordAdr)==I2C_ERR )
020A 0A2D mov R16,R10
020C C1DF xcall _I2C_SendDat
020E A02E mov R10,R16
0210 0023 tst R16
0212 11F4 brne L67
0214 X24:
0214 ; return I2C_ERR;
0214 0027 clr R16
0216 0AC0 xjmp L62
0218 L67:
0218 ;
0218 ; if( I2C_SendDat(dat)==I2C_ERR )
0218 0C81 ldd R16,y+4
021A BADF xcall _I2C_SendDat
021C A02E mov R10,R16
0220 11F4 brne L69
0222 X25:
0222 ; return I2C_ERR;
0222 0027 clr R16
0224 03C0 xjmp L62
0226 L69:
0226 ;
0226 ; I2C_Stop();
0226 84E9 ldi R24,148
0228 86BF out 0x36,R24
022A ;
022A ; return I2C_CRR;
022A 01E0 ldi R16,1
022C L62:
022C .dbline 0 ; func end
022C 0C940000 xjmp pop_xgset003C
0230 ; pRdDat -> y+6
0230 ; rdDAdr -> y+4
0230 ; wordAdr -> R10
0230 ; wrDAdr -> R12,R13
.even
0230 _I2C_Read::
0230 0E940000 xcall push_xgset003C
0234 A22E mov R10,R18
0236 6801 movw R12,R16
0238 ; }
0238 ; /*--------------------------------------------------------------------
0238 ; 函數(shù)名稱:I2C寫器件,寫N個數(shù)據(jù)
0238 ; 函數(shù)功能:
0238 ; 注意事項:
0238 ; 提示說明:
0238 ; 輸 入:wrDAdr: write device-address 寫器件地址
0238 ; wordAdr: word address 字地址
0238 ; *pWrDat: p->write data 寫入數(shù)據(jù)指針
0238 ; num: number 寫入數(shù)據(jù)個數(shù)
0238 ; 返 回:
0238 ; //bool I2C_Write_(uint16 wrDAdr,uint8 wordAdr,
0238 ; // uint8 *pWrDat,uint8 num)
0238 ; //{
0238 ; //
0238 ; //}
0238 ; /*--------------------------------------------------------------------
0238 ; 函數(shù)名稱:I2C讀器件,讀一個數(shù)據(jù)
0238 ; 函數(shù)功能:
0238 ; 注意事項:
0238 ; 提示說明:
0238 ; 輸 入:wrDAdr: write device-address 寫器件地址
0238 ; wordAdr: word address 字地址
0238 ; rdDAdr: read device-address 讀器件地址
0238 ; *pRdDat: p->read data 讀取數(shù)據(jù)指針
0238 ; 返 回:
0238 ; --------------------------------------------------------------------*/
0238 ; bool I2C_Read(uint16 wrDAdr,uint8 wordAdr,
0238 ; uint8 rdDAdr,uint8 *pRdDat)
0238 ; {
0238 ; if( I2C_Start()==I2C_ERR )
0238 3DDF xcall _I2C_Start
023A 0023 tst R16
023C 11F4 brne L72
023E X26:
023E ; return I2C_ERR;
023E 0027 clr R16
0240 25C0 xjmp L71
0242 L72:
0242 ;
0242 ; if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
0242 8601 movw R16,R12
0244 5FDF xcall _I2C_SendWrDAdr_
0246 0023 tst R16
0248 11F4 brne L74
024A X27:
024A ; return I2C_ERR;
024A 0027 clr R16
024C 1FC0 xjmp L71
024E L74:
024E ;
024E ; if( I2C_SendDat(wordAdr)==I2C_ERR )
024E 0A2D mov R16,R10
0250 9FDF xcall _I2C_SendDat
0252 A02E mov R10,R16
0254 0023 tst R16
0256 11F4 brne L76
0258 X28:
0258 ; return I2C_ERR;
0258 0027 clr R16
025A 18C0 xjmp L71
025C L76:
025C ;
025C ; if( I2C_Restart()==I2C_ERR )
025C 38DF xcall _I2C_Restart
025E A02E mov R10,R16
0260 0023 tst R16
0262 11F4 brne L78
0264 X29:
0264 ; return I2C_ERR;
0264 0027 clr R16
0266 12C0 xjmp L71
0268 L78:
0268 ;
0268 ; if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
0268 0C81 ldd R16,y+4
026A 69DF xcall _I2C_SendRdDAdr
026C A02E mov R10,R16
026E 0023 tst R16
0270 11F4 brne L80
0272 X30:
0272 ; return I2C_ERR;
0272 0027 clr R16
0274 0BC0 xjmp L71
0276 L80:
0276 ;
0276 ; if( I2C_RcvNAckDat(pRdDat)==I2C_ERR )
0276 0E81 ldd R16,y+6
0278 1F81 ldd R17,y+7
027A 98DF xcall _I2C_RcvNAckDat
027C A02E mov R10,R16
027E 0023 tst R16
0280 11F4 brne L82
0282 X31:
0282 ; return I2C_ERR;
0282 0027 clr R16
0284 03C0 xjmp L71
0286 L82:
0286 ;
0286 ; I2C_Stop();
0286 84E9 ldi R24,148
0288 86BF out 0x36,R24
028A ;
028A ; return I2C_CRR;
028A 01E0 ldi R16,1
028C L71:
028C .dbline 0 ; func end
028C 0C940000 xjmp pop_xgset003C
0290 ; i -> R12
0290 ; num -> y+10
0290 ; pRdDat -> R10,R11
0290 ; rdDAdr -> y+6
0290 ; wordAdr -> R12
0290 ; wrDAdr -> R14,R15
.even
0290 _I2C_Read_::
0290 0E940000 xcall push_xgset00FC
0294 C22E mov R12,R18
0296 7801 movw R14,R16
0298 A884 ldd R10,y+8
029A B984 ldd R11,y+9
029C ; }
029C ; /*--------------------------------------------------------------------
029C ; 函數(shù)名稱:I2C讀器件,讀N個數(shù)據(jù)
029C ; 函數(shù)功能:
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -