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

📄 lcd1602pbpd.lis

📁 一些LCD库 分享给大家了 哈哈~
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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           ; 函数名称:I2C接收数据且不产生应答
 01AC           ; 函数功能:
 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           ; 函数名称:I2C接收数据且产生应答
 01CC           ; 函数功能:
 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           ; 函数名称:I2C写器件,写一个数据
 01F4           ; 函数功能:
 01F4           ; 注意事项:
 01F4           ; 提示说明:
 01F4           ; 输    入:wrDAdr: write device-address 写器件地址
 01F4           ;                wordAdr: word address 字地址
 01F4           ;                dat: data 数据
 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
 021E 0023              tst 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           ; 函数名称:I2C写器件,写N个数据
 0238           ; 函数功能:
 0238           ; 注意事项:
 0238           ; 提示说明:
 0238           ; 输    入:wrDAdr: write device-address 写器件地址
 0238           ;                wordAdr: word address 字地址
 0238           ;                *pWrDat: p->write data 写入数据指针
 0238           ;                num: number 写入数据个数
 0238           ; 返    回:
 0238           ; --------------------------------------------------------------------*/
 0238           ; //bool I2C_Write_(uint16 wrDAdr,uint8 wordAdr,
 0238           ; //                              uint8 *pWrDat,uint8 num)
 0238           ; //{
 0238           ; //
 0238           ; //} 
 0238           ; /*--------------------------------------------------------------------
 0238           ; 函数名称:I2C读器件,读一个数据
 0238           ; 函数功能:
 0238           ; 注意事项:
 0238           ; 提示说明:
 0238           ; 输    入:wrDAdr: write device-address 写器件地址
 0238           ;                wordAdr: word address 字地址
 0238           ;                rdDAdr: read device-address 读器件地址
 0238           ;                *pRdDat: p->read data 读取数据指针
 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           ; 函数名称:I2C读器件,读N个数据
 029C           ; 函数功能:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -