📄 pcf8563.lst
字号:
(0319) --------------------------------------------------------------------*/
(0320) bool I2C_Read(uint16 wrDAdr,uint8 wordAdr,
(0321) uint8 rdDAdr,uint8 *pRdDat)
(0322) {
(0323) if( I2C_Start()==I2C_ERR )
0169 DF42 RCALL _I2C_Start
016A 2300 TST R16
016B F411 BNE 0x016E
(0324) return I2C_ERR;
016C 2700 CLR R16
016D C021 RJMP 0x018F
(0325)
(0326) if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
016E 018B MOVW R16,R22
016F DF64 RCALL _I2C_SendWrDAdr_
0170 2300 TST R16
0171 F411 BNE 0x0174
(0327) return I2C_ERR;
0172 2700 CLR R16
0173 C01B RJMP 0x018F
(0328)
(0329) if( I2C_SendDat(wordAdr)==I2C_ERR )
0174 2F04 MOV R16,R20
0175 DFA0 RCALL _I2C_SendDat
0176 2300 TST R16
0177 F411 BNE 0x017A
(0330) return I2C_ERR;
0178 2700 CLR R16
0179 C015 RJMP 0x018F
(0331)
(0332) if( I2C_Restart()==I2C_ERR )
017A DF3E RCALL _I2C_Restart
017B 2300 TST R16
017C F411 BNE 0x017F
(0333) return I2C_ERR;
017D 2700 CLR R16
017E C010 RJMP 0x018F
(0334)
(0335) if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
017F 810C LDD R16,Y+4
0180 DF6D RCALL _I2C_SendRdDAdr
0181 2300 TST R16
0182 F411 BNE 0x0185
(0336) return I2C_ERR;
0183 2700 CLR R16
0184 C00A RJMP 0x018F
(0337)
(0338) if( I2C_RcvNAckDat(pRdDat)==I2C_ERR )
0185 810E LDD R16,Y+6
0186 811F LDD R17,Y+7
0187 DF9C RCALL _I2C_RcvNAckDat
0188 2300 TST R16
0189 F411 BNE 0x018C
(0339) return I2C_ERR;
018A 2700 CLR R16
018B C003 RJMP 0x018F
(0340)
(0341) I2C_Stop();
018C E984 LDI R24,0x94
018D BF86 OUT 0x36,R24
(0342)
(0343) return I2C_CRR;
018E E001 LDI R16,1
018F 940E03B5 CALL pop_gset2
0191 9508 RET
_I2C_Read_:
i --> R20
num --> R22
pRdDat --> R10
rdDAdr --> Y+8
wordAdr --> R20
wrDAdr --> R12
0192 940E03DD CALL push_gset4
0194 2F42 MOV R20,R18
0195 0168 MOVW R12,R16
0196 84AA LDD R10,Y+10
0197 84BB LDD R11,Y+11
0198 856C LDD R22,Y+12
(0344) }
(0345) /*--------------------------------------------------------------------
(0346) 函数名称:I2C读器件,读N个数据
(0347) 函数功能:
(0348) 注意事项:
(0349) 提示说明:
(0350) 输 入:wrDAdr: write device-address 写器件地址
(0351) wordAdr: word address 字地址
(0352) rdDAdr: read device-address 读器件地址
(0353) *pRdDat: p->read data 读取数据指针
(0354) num: number 读取数据个数
(0355) 返 回:
(0356) --------------------------------------------------------------------*/
(0357) bool I2C_Read_(uint16 wrDAdr,uint8 wordAdr,
(0358) uint8 rdDAdr,uint8 *pRdDat,uint8 num)
(0359) {
(0360) uint8 i;
(0361)
(0362) if( I2C_Start()==I2C_ERR )
0199 DF12 RCALL _I2C_Start
019A 2300 TST R16
019B F411 BNE 0x019E
(0363) return I2C_ERR;
019C 2700 CLR R16
019D C033 RJMP 0x01D1
(0364)
(0365) if( I2C_SendWrDAdr_(wrDAdr)==I2C_ERR )
019E 0186 MOVW R16,R12
019F DF34 RCALL _I2C_SendWrDAdr_
01A0 2300 TST R16
01A1 F411 BNE 0x01A4
(0366) return I2C_ERR;
01A2 2700 CLR R16
01A3 C02D RJMP 0x01D1
(0367)
(0368) if( I2C_SendDat(wordAdr)==I2C_ERR )
01A4 2F04 MOV R16,R20
01A5 DF70 RCALL _I2C_SendDat
01A6 2300 TST R16
01A7 F411 BNE 0x01AA
(0369) return I2C_ERR;
01A8 2700 CLR R16
01A9 C027 RJMP 0x01D1
(0370)
(0371) if( I2C_Restart()==I2C_ERR )
01AA DF0E RCALL _I2C_Restart
01AB 2300 TST R16
01AC F411 BNE 0x01AF
(0372) return I2C_ERR;
01AD 2700 CLR R16
01AE C022 RJMP 0x01D1
(0373)
(0374) if( I2C_SendRdDAdr(rdDAdr)==I2C_ERR )
01AF 8508 LDD R16,Y+8
01B0 DF3D RCALL _I2C_SendRdDAdr
01B1 2300 TST R16
01B2 F411 BNE 0x01B5
(0375) return I2C_ERR;
01B3 2700 CLR R16
01B4 C01C RJMP 0x01D1
(0376)
(0377) for(i=0;i<num-1;i++)
01B5 2744 CLR R20
01B6 C00A RJMP 0x01C1
(0378) if( I2C_RcvAckDat(pRdDat+i)==I2C_ERR )
01B7 2F04 MOV R16,R20
01B8 2711 CLR R17
01B9 0D0A ADD R16,R10
01BA 1D1B ADC R17,R11
01BB DF78 RCALL _I2C_RcvAckDat
01BC 2300 TST R16
01BD F411 BNE 0x01C0
(0379) return I2C_ERR;
01BE 2700 CLR R16
01BF C011 RJMP 0x01D1
01C0 9543 INC R20
01C1 2F86 MOV R24,R22
01C2 5081 SUBI R24,1
01C3 1748 CP R20,R24
01C4 F390 BCS 0x01B7
(0380)
(0381) if( I2C_RcvNAckDat(pRdDat+i)==I2C_ERR )
01C5 2F04 MOV R16,R20
01C6 2711 CLR R17
01C7 0D0A ADD R16,R10
01C8 1D1B ADC R17,R11
01C9 DF5A RCALL _I2C_RcvNAckDat
01CA 2300 TST R16
01CB F411 BNE 0x01CE
(0382) return I2C_ERR;
01CC 2700 CLR R16
01CD C003 RJMP 0x01D1
(0383)
(0384) I2C_Stop();
01CE E984 LDI R24,0x94
01CF BF86 OUT 0x36,R24
(0385)
(0386) return I2C_CRR;
01D0 E001 LDI R16,1
01D1 940E03BB CALL pop_gset4
01D3 9508 RET
_delay50us:
j --> R20
t --> R16
01D4 940E03BE CALL push_gset1
FILE: D:\ICC_H\Hardware.H
(0001) /*********************************************************************
(0002) 微 雪 电 子 WaveShare http://www.waveShare.net
(0003)
(0004) 目 的: 建立AVR的硬件提取库,增加各类补丁,方便移植
(0005)
(0006) 目标系统: 基于AVR单片机
(0007)
(0008) 应用软件: ICCAVR
(0009)
(0010) 版 本: Version 1.0
(0011)
(0012) 圆版时间: 2005-06-25
(0013)
(0014) 开发人员: SEE(中文名不告诉你~怕你骂我)
(0015)
(0016) 说 明: 若用于商业用途,请保留此段文字或注明代码来源
(0017)
(0018) 深 圳 微 雪 电 子 保 留 所 有 的 版 权
(0019) *********************************************************************/
(0020)
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024)
(0025) ----------------------------------------------------------------------
(0026) 入口参数说明:
(0027)
(0028) ----------------------------------------------------------------------
(0029) 待定参数说明:
(0030)
(0031) ----------------------------------------------------------------------
(0032) 对外变量说明:
(0033)
(0034) ----------------------------------------------------------------------
(0035) 对外函数说明:
(0036)
(0037) ----------------------------------------------------------------------
(0038) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0039)
(0040) #ifndef Hardware_H
(0041) #define Hardware_H
(0042)
(0043) #include <math.h>
(0044) #include <string.h>
(0045) #include <stdio.h>
(0046) #include <macros.h>
(0047) #include <eeprom.h>
(0048) //#include <wdt.h>
(0049) #include "D:\ICC_H\I2C.H" //i2c即AVR的"twi"
(0050)
(0051) /* hard configs */
(0052) #ifndef flash
(0053) #define flash const
(0054) #endif
(0055)
(0056) #ifndef code
(0057) #define code const
(0058) #endif
(0059)
(0060) #ifndef NOP
(0061) #define NOP() asm("nop")
(0062) #endif
(0063)
(0064) /* io configs */
(0065) #define sbi(io,bit) ( io |= (1<<bit) ) //example: sbi(PORTA,0);sbi(DDRA,0);
(0066) #define cbi(io,bit) ( io &= ~(1<<bit) ) //example: cbi(PORTA,0);cbi(DDRA,0);
(0067) #define gbi(pin ,bit) ( pin & (1<<bit) ) //example: gbi(PINA,0);
(0068)
(0069) /* interrupt configs */
(0070) #define DIS_INT asm("sei")
(0071) #define EN_INT asm("cli")
(0072)
(0073) /* wdt configs */
(0074) #define WDT() asm("wdr")
(0075)
(0076) /* bit operation */
(0077) //#ifndef BIT
(0078) //#define BIT(x) ( 1<<(x) )
(0079) //#endif
(0080)
(0081) /* USART configs for 4 Mhz crystal */
(0082) //#define BAUD9600 25
(0083) //#define BAUD19000 12
(0084) //#define UART_TRAN_ON() UCR |= 0x08
(0085) //#define UART_TRAN_OFF() UCR &= ~0x08
(0086) //#define UART_RCV_ON() UCR |= 0x10
(0087) //#define UART_RCV_OFF() UCR &= ~0x10
(0088)
(0089) /*--------------------------------------------------------------------
(0090) 函数全称:50us 延时
(0091) 函数功能:当然是 50us延时 啦
(0092) 注意事项:基于7.3728M晶振,稍微有点误差
(0093) 提示说明:调用Delay50us(20),得到1ms延时
(0094) 输 入:
(0095) 返 回:无
(0096) --------------------------------------------------------------------*/
(0097) void delay50us(sint16 t)
(0098) {
(0099) uint8 j;
(0100) for(;t>0;t--)
01D6 C007 RJMP 0x01DE
(0101) for(j=0;j<70;j++)
01D7 2744 CLR R20
01D8 C001 RJMP 0x01DA
01D9 9543 INC R20
01DA 3446 CPI R20,0x46
01DB F3E8 BCS 0x01D9
01DC 5001 SUBI R16,1
01DD 4010 SBCI R17,0
01DE 2422 CLR R2
01DF 2433 CLR R3
01E0 1620 CP R2,R16
01E1 0631 CPC R3,R17
01E2 F3A4 BLT 0x01D7
(0102) ;
(0103) }
01E3 940E03C1 CALL pop_gset1
01E5 9508 RET
_delay50ms:
i --> R20
t --> R16
01E6 940E03BE CALL push_gset1
(0104) /*--------------------------------------------------------------------
(0105) 函数全称:50ms 延时
(0106) 函数功能:当然是 50ms延时 啦
(0107) 注意事项:基于7.3728M晶振,稍微有点误差
(0108) 提示说明:调用delay50ms(20),得到1s延时
(0109) 输 入:
(0110) 返 回:无
(0111) --------------------------------------------------------------------*/
(0112) void delay50ms(sint16 t)
(0113) {
(0114) uint16 i;
(0115) for(;t>0;t--)
01E8 C00B RJMP 0x01F4
(0116) for(i=0;i<52642;i++)
01E9 2744 CLR R20
01EA 2755 CLR R21
01EB C002 RJMP 0x01EE
01EC 5F4F SUBI R20,0xFF
01ED 4F5F SBCI R21,0xFF
01EE 3A42 CPI R20,0xA2
01EF ECED LDI R30,0xCD
01F0 075E CPC R21,R30
01F1 F3D0 BCS 0x01EC
01F2 5001 SUBI R16,1
01F3 4010 SBCI R17,0
01F4 2422 CLR R2
01F5 2433 CLR R3
01F6 1620 CP R2,R16
01F7 0631 CPC R3,R17
01F8 F384 BLT 0x01E9
(0117) ;
(0118) }
01F9 940E03C1 CALL pop_gset1
01FB 9508 RET
_WriteAByte:
dat --> R22
wordAdr --> R20
01FC 940E03D5 CALL push_gset2
01FE 2F62 MOV R22,R18
01FF 2F40 MOV R20,R16
0200 9721 SBIW R28,1
FILE: D:\ICC_H\PCF8563.H
(0001) /*********************************************************************
(0002) 微 雪 电 子 WaveShare http://www.waveShare.net
(0003)
(0004) 目 的: 建立PCF8563操作库
(0005)
(0006) 目标系统: 基于AVR单片机
(0007)
(0008) 应用软件: ICCAVR
(0009)
(0010) 版 本: Version 1.0
(0011)
(0012) 圆版时间: 2005-06-25
(0013)
(0014) 开发人员: SEE(中文名不告诉你~怕你骂我)
(0015)
(0016) 说 明: 若用于商业用途,请保留此段文字或注明代码来源
(0017)
(0018) 深 圳 微 雪 电 子 保 留 所 有 的 版 权
(0019) *********************************************************************/
(0020)
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024)
(0025) ----------------------------------------------------------------------
(0026) 入口参数说明:
(0027) //#define WR_DADR 0xA2 //器件地址:A2 A1 A0 = 0 0 0
(0028) //#define RD_DADR 0xA3 //器件地址:A2 A1 A0 = 0 0 0
(0029)
(0030) ----------------------------------------------------------------------
(0031) 待定参数说明:
(0032)
(0033) ----------------------------------------------------------------------
(0034) 对外变量说明:
(0035)
(0036) ----------------------------------------------------------------------
(0037) 对外函数说明:
(0038)
(0039) ----------------------------------------------------------------------
(0040) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0041)
(0042) #ifndef PCF8563_H
(0043) #define PCF8563_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -