?? lcd1602pbpd.lis
字號:
029C ; 注意事項:
029C ; 提示說明:
029C ; 輸 入:wrDAdr: write device-address 寫器件地址
029C ; wordAdr: word address 字地址
029C ; rdDAdr: read device-address 讀器件地址
029C ; *pRdDat: p->read data 讀取數據指針
029C ; num: number 讀取數據個數
029C ; 返 回:
029C ; --------------------------------------------------------------------*/
029C ; bool I2C_Read_(uint16 wrDAdr,uint8 wordAdr,
029C ; uint8 rdDAdr,uint8 *pRdDat,uint8 num)
029C ; {
029C ; uint8 i;
029C ;
029C ; if( I2C_Start()==I2C_ERR )
029C 0BDF xcall _I2C_Start
029E 0023 tst R16
02A0 11F4 brne L85
02A2 X32:
02A2 ; return I2C_ERR;
02A2 0027 clr R16
02A4 38C0 xjmp L84
02A6 L85:
02A6 ;
02A6 ; if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
02A6 8701 movw R16,R14
02A8 2DDF xcall _I2C_SendWrDAdr_
02AA 0023 tst R16
02AC 11F4 brne L87
02AE X33:
02AE ; return I2C_ERR;
02AE 0027 clr R16
02B0 32C0 xjmp L84
02B2 L87:
02B2 ;
02B2 ; if( I2C_SendDat(wordAdr)==I2C_ERR )
02B2 0C2D mov R16,R12
02B4 6DDF xcall _I2C_SendDat
02B6 C02E mov R12,R16
02B8 0023 tst R16
02BA 11F4 brne L89
02BC X34:
02BC ; return I2C_ERR;
02BC 0027 clr R16
02BE 2BC0 xjmp L84
02C0 L89:
02C0 ;
02C0 ; if( I2C_Restart()==I2C_ERR )
02C0 06DF xcall _I2C_Restart
02C2 C02E mov R12,R16
02C4 0023 tst R16
02C6 11F4 brne L91
02C8 X35:
02C8 ; return I2C_ERR;
02C8 0027 clr R16
02CA 25C0 xjmp L84
02CC L91:
02CC ;
02CC ; if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
02CC 0E81 ldd R16,y+6
02CE 37DF xcall _I2C_SendRdDAdr
02D0 C02E mov R12,R16
02D2 0023 tst R16
02D4 11F4 brne L93
02D6 X36:
02D6 ; return I2C_ERR;
02D6 0027 clr R16
02D8 1EC0 xjmp L84
02DA L93:
02DA ;
02DA ; for(i=0;i<num-1;i++)
02DA CC24 clr R12
02DC 0BC0 xjmp L98
02DE L95:
02DE ; if( I2C_RcvAckDat(pRdDat+i)==I2C_ERR )
02DE 0C2D mov R16,R12
02E0 1127 clr R17
02E2 0A0D add R16,R10
02E4 1B1D adc R17,R11
02E6 72DF xcall _I2C_RcvAckDat
02E8 E02E mov R14,R16
02EA 0023 tst R16
02EC 11F4 brne L99
02EE X37:
02EE ; return I2C_ERR;
02EE 0027 clr R16
02F0 12C0 xjmp L84
02F2 L99:
02F2 L96:
02F2 C394 inc R12
02F4 L98:
02F4 8A85 ldd R24,y+10
02F6 8150 subi R24,1
02F8 C816 cp R12,R24
02FA 88F3 brlo L95
02FC X38:
02FC ;
02FC ; if( I2C_RcvNAckDat(pRdDat+i)==I2C_ERR )
02FC 0C2D mov R16,R12
02FE 1127 clr R17
0300 0A0D add R16,R10
0302 1B1D adc R17,R11
0304 53DF xcall _I2C_RcvNAckDat
0306 A02E mov R10,R16
0308 0023 tst R16
030A 11F4 brne L101
030C X39:
030C ; return I2C_ERR;
030C 0027 clr R16
030E 03C0 xjmp L84
0310 L101:
0310 ;
0310 ; I2C_Stop();
0310 84E9 ldi R24,148
0312 86BF out 0x36,R24
0314 ;
0314 ; return I2C_CRR;
0314 01E0 ldi R16,1
0316 L84:
0316 .dbline 0 ; func end
0316 0C940000 xjmp pop_xgset00FC
031A ; j -> R20
031A ; t -> R16,R17
.even
031A _delay50us::
031A 4A93 st -y,R20
031C ; /*********************************************************************
031C ; 微 雪 電 子 WaveShare http://www.waveShare.net
031C ;
031C ; 目 的: 建立AVR的硬件提取庫,增加各類補丁,方便移植
031C ;
031C ; 目標系統(tǒng): 基于AVR單片機
031C ;
031C ; 應用軟件: ICCAVR
031C ;
031C ; 版 本: Version 1.0
031C ;
031C ; 圓版時間: 2005-06-25
031C ;
031C ; 開發(fā)人員: SEE
031C ;
031C ; 說 明: 若用于商業(yè)用途,請保留此段文字或注明代碼來源
031C ;
031C ; 深 圳 市 微 雪 電 子 有 限 公 司 保 留 所 有 的 版 權
031C ; *********************************************************************/
031C ;
031C ; /*01010101010101010101010101010101010101010101010101010101010101010101
031C ; ----------------------------------------------------------------------
031C ; 版本更新記錄:
031C ;
031C ; ----------------------------------------------------------------------
031C ; 入口參數說明:
031C ;
031C ; ----------------------------------------------------------------------
031C ; 待定參數說明:
031C ;
031C ; ----------------------------------------------------------------------
031C ; 對外變量說明:
031C ;
031C ; ----------------------------------------------------------------------
031C ; 對外函數說明:
031C ;
031C ; ----------------------------------------------------------------------
031C ; 10101010101010101010101010101010101010101010101010101010101010101010*/
031C ;
031C ; #ifndef Hardware_H
031C ; #define Hardware_H
031C ;
031C ; #include <math.h>
031C ; #include <string.h>
031C ; #include <stdio.h>
031C ; #include <macros.h>
031C ; #include <eeprom.h>
031C ; //#include <wdt.h>
031C ;
031C ; /* TWI configs */
031C ; //如使用ATMEGA162(沒有TWI接口)之類的MCU,在加載Hardware.H前,務必加“#define NO_INCLUDE_I2C_H 1”語句
031C ; #if NO_INCLUDE_I2C_H
031C ; ;
031C ; #else
031C ; #include "D:\ICC_H\I2C.H" //i2c即AVR的"twi"
031C ; #endif
031C ;
031C ; /* hard configs */
031C ; #ifndef flash
031C ; #define flash const
031C ; #endif
031C ;
031C ; #ifndef code
031C ; #define code const
031C ; #endif
031C ;
031C ; #ifndef NOP
031C ; #define NOP() asm("nop")
031C ; #endif
031C ;
031C ; /* io configs */
031C ; #define sbi(io,bit) ( io |= (1<<bit) ) //example: sbi(PORTA,0);sbi(DDRA,0);
031C ; #define cbi(io,bit) ( io &= ~(1<<bit) ) //example: cbi(PORTA,0);cbi(DDRA,0);
031C ; #define gbi(pin ,bit) ( pin & (1<<bit) ) //example: gbi(PINA,0);
031C ;
031C ; /* interrupt configs */
031C ; #define DIS_INT asm("sei")
031C ; #define EN_INT asm("cli")
031C ;
031C ; /* wdt configs */
031C ; #define WDT() asm("wdr")
031C ;
031C ; /* bit operation */
031C ; //#ifndef BIT
031C ; //#define BIT(x) ( 1<<(x) )
031C ; //#endif
031C ;
031C ; /* USART configs for 4 Mhz crystal */
031C ; //#define BAUD9600 25
031C ; //#define BAUD19000 12
031C ; //#define UART_TRAN_ON() UCR |= 0x08
031C ; //#define UART_TRAN_OFF() UCR &= ~0x08
031C ; //#define UART_RCV_ON() UCR |= 0x10
031C ; //#define UART_RCV_OFF() UCR &= ~0x10
031C ;
031C ; /*--------------------------------------------------------------------
031C ; 函數全稱:50us 延時
031C ; 函數功能:當然是 50us延時 啦
031C ; 注意事項:基于7.3728M晶振,稍微有點誤差
031C ; 提示說明:調用delay50us(20),得到1ms延時
031C ; 輸 入:
031C ; 返 回:無
031C ; --------------------------------------------------------------------*/
031C ; void delay50us(sint16 t)
031C ; {
031C ; uint8 j;
031C ; for(;t>0;t--)
031C 07C0 xjmp L107
031E L104:
031E ; for(j=0;j<70;j++)
031E 4427 clr R20
0320 01C0 xjmp L111
0322 L108:
0322 ; ;
0322 L109:
0322 4395 inc R20
0324 L111:
0324 4634 cpi R20,70
0326 E8F3 brlo L108
0328 X40:
0328 L105:
0328 0150 subi R16,1
032A 1040 sbci R17,0
032C L107:
032C 2224 clr R2
032E 3324 clr R3
0330 2016 cp R2,R16
0332 3106 cpc R3,R17
0334 A4F3 brlt L104
0336 X41:
0336 L103:
0336 .dbline 0 ; func end
0336 4991 ld R20,y+
0338 0895 ret
033A ; i -> R20,R21
033A ; t -> R16,R17
.even
033A _delay50ms::
033A 4A93 st -y,R20
033C 5A93 st -y,R21
033E ; }
033E ; /*--------------------------------------------------------------------
033E ; 函數全稱:50ms 延時
033E ; 函數功能:當然是 50ms延時 啦
033E ; 注意事項:基于7.3728M晶振,稍微有點誤差
033E ; 提示說明:調用delay50ms(20),得到1s延時
033E ; 輸 入:
033E ; 返 回:無
033E ; --------------------------------------------------------------------*/
033E ; void delay50ms(sint16 t)
033E ; {
033E ; uint16 i;
033E ; for(;t>0;t--)
033E 13C0 xjmp L116
0340 L113:
0340 ; for(i=0;i<52642;i++)
0340 4427 clr R20
0342 5527 clr R21
0344 02C0 xjmp L120
0346 L117:
0346 ; ;
0346 L118:
0346 4F5F subi R20,255 ; offset = 1
0348 5F4F sbci R21,255
034A L120:
034A 82EA ldi R24,162
034C 9DEC ldi R25,205
034E A0E0 ldi R26,0
0350 B0E0 ldi R27,0
0352 1A01 movw R2,R20
0354 4424 clr R4
0356 5524 clr R5
0358 2816 cp R2,R24
035A 3906 cpc R3,R25
035C 4A06 cpc R4,R26
035E 5B06 cpc R5,R27
0360 94F3 brlt L117
0362 X42:
0362 L114:
0362 0150 subi R16,1
0364 1040 sbci R17,0
0366 L116:
0366 2224 clr R2
0368 3324 clr R3
036A 2016 cp R2,R16
036C 3106 cpc R3,R17
036E 44F3 brlt L113
0370 X43:
0370 L112:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -