📄 pcf8563.lst
字号:
C51 COMPILER V7.50 PCF8563 02/21/2012 18:24:45 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE PCF8563
OBJECT MODULE PLACED IN pcf8563.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE pcf8563.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //以下是PCF8563.c文件的源程序
2 #include "pcf8563.h"
3 #include "iic.h"
4
5 /*功能描述:向地址adr的寄存器写入多个字节
6 隶属模块:PCF8563驱动模块
7 函数属性:内部
8 参数说明:addr:寄存器地址
9 length:要写入的字节数
10 pbuf:指向数据缓冲区的指针
11 返回说明:操作结果,0表示成功,1表示失败*/
12
13
14 unsigned char PCF8563_Write_Bytes(unsigned char addr,unsigned char length,unsigned char *pbuf)
15 { unsigned char i=0;
16 1 IIC_Start(); //IIC通讯开始
17 1 if(IIC_Write_Byte(0xa2)) return 1; //写入PCF8563的ID与读写控制位,通讯有错误立即返回
18 1 if(IIC_Write_Byte(addr)) return 1; //写寄存器地址
19 1 for(i=0;i<length;i++) //写入length个字节
20 1 {
21 2 if(IIC_Write_Byte(pbuf[i])) return 1;//将pbuf中的length个字节写入pcf8563的数据缓冲区
22 2
23 2 }
24 1 IIC_Stop();
25 1 return 0;
26 1
27 1 }
28
29 /*功能描述:从地址addr的寄存器读取多个字节
30 隶属模块:PCF8563驱动模块
31 函数属性:内部:
32 参数说明:addr:寄存器地址
33 length:要读出的字节数
34 pbuf:指向数据缓冲区的指针
35 返回说明:操作结果,0表示成功,1表示失败*/
36 unsigned char PCF8563_Read_Bytes(unsigned char addr,unsigned char length,unsigned char *pbuf )
37 {
38 1 unsigned char i=0,err=0;
39 1 IIC_Start(); //IIC通讯开始
40 1 if(IIC_Write_Byte(0xa2)) return 1; //写入PCF8563的ID与读写控制位,通讯有错误立即返回
41 1 if(IIC_Write_Byte(addr)) return 1; //写寄存器地址
42 1
43 1 IIC_Start();
44 1 if(IIC_Write_Byte(0xa3)) return 1; //前length-1个字节,每读完一个字节要向PCF8563提供ACK,即告诉其继续提供
-下面的数据,读取操作还未完毕
45 1
46 1 for(i=0;i<length-1;i++)
47 1 { pbuf[i]=IIC_Read_Byte();
48 2 IIC_Ack();
49 2
50 2 }
51 1 pbuf[i]=IIC_Read_Byte(); //读取最后一个字节,即第length个字节
52 1 IIC_NAck(); //读取最后一个字节后,要向PCF8563提NACK,告诉其读取操作结束,不再向下读了
53 1 IIC_Stop();
54 1 return 0;
C51 COMPILER V7.50 PCF8563 02/21/2012 18:24:45 PAGE 2
55 1
56 1 }
57
58
59 /* 功能描述:将BCD码装换为十进制的数值
60 隶属模块:PCF8563驱动模块
61 函数属性:内部
62 参数说明:x:待转换的BCD码字节
63 返回说明:转换后的值
64 注:将BCD格式数据转换为十进制的值,如29的BCD格式为0x29 */
65
66 unsigned char BCD2Val(unsigned char x)
67 {
68 1 return (x>>4)*10+(x&0x0f);//高四位乘以10,再加上低四位
69 1 }
70
71
72 /*功能描述:将十进制数值转换为BCD码
73 隶属模块:PCF8563驱动模块*/
74 // 函数属性:内部
75 // 参数说明:x:待转换的数值
76 // 转换说明:转换后的值
77 // 注: 将值转为BCD格式,如23转为BCD格式为0x23 */
78
79 unsigned char Val2BCD(unsigned char x)
80 {
81 1 return (x/10)*16+(x%10); //将十进制的数值十位乘以16,再
82 1 }
83
84
85
86
87
88 /* 功能描述:读取时间
89 隶属模块:PCF8563驱动模块
90 函数属性:外部,供用户使用
91 参数说明:无
92 返回说明:操作结果,0表示成功,1表示失败
93 注:从PCF8563中读到的时间值,被装载到全局的外部结构体 */
94 unsigned char P8563_Read_Time()
95 {
96 1 unsigned char temp[7];
97 1 if(!PCF8563_Read_Bytes(0x02,7,temp)) //读取时间,即读取秒 分 时 日 星期 月 年
98 1 { //以下对读取到temp的数组中的时间数据进行截取
99 2 // 并转换为十进制数值写入到temp中去
100 2 time.second=BCD2Val(temp[0]&0x7f); //秒
101 2 time.minute=BCD2Val(temp[1]&0x7f);
102 2 time.hour =BCD2Val(temp[2]&0x3f);
103 2 time.day =BCD2Val(temp[3]&0x3f);
104 2 time.week =BCD2Val(temp[4]&0x07);
105 2 time.month =BCD2Val(temp[5]&0x1f);
106 2 time.year =BCD2Val(temp[6]);
107 2 return 0;
108 2
109 2 }
110 1 else
111 1 return 1;
112 1
113 1 }
114
115
116
C51 COMPILER V7.50 PCF8563 02/21/2012 18:24:45 PAGE 3
117
118
119
120
121 /*功能描述:设置时间
122 隶属模块:PCF8563驱动模块
123 函数属性:外部,供用户使用
124 参数说明:无
125 返回说明:操作结果,0表示成功,1表示失败
126 注:在设置时间前先将时间数据填充到time中去,随后调用此函数,时间
127 数据即被写入到PCF8563中,并以新设置的时间继续走时 */
128
129 unsigned char P8563_Set_Time()
130 {
131 1 unsigned char temp[7];
132 1 unsigned char i;
133 1 for(i=0;i<7;i++)
134 1 {
135 2 temp[i]=Val2BCD(((unsigned char *)(&time))[i]);
136 2 }
137 1
138 1 return PCF8563_Write_Bytes(0x02,7,temp);
139 1
140 1 }
141
142 /* 功能描述:设置倒计时寄存器
143 隶属模块:PCF8563驱动模块
144 返回说明:0表示成功,1表示失败
145 注:先将要写入到倒计时寄存器的数据装入全局变量外部结构体变量dcounter中
146 随后调用此函数将数据写入 */
147 unsigned char P8563_Set_DownCounter()
148 {
149 1 return PCF8563_Write_Bytes(0x0e,2,(unsigned char *)&dcounter);
150 1
151 1 }
152
153 /* 功能描述:读取倒计时寄存器
154 隶属模块:PCF8563驱动模块
155 返回说明:操作结果,0表示成功,1表示失败
156 注:将倒计时寄存器的值读回到dcounter中 */
157 unsigned char P8563_Read_DownCounter()
158 {
159 1 return PCF8563_Read_Bytes(0x0e,2,(unsigned char *)&dcounter);
160 1
161 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 400 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 27
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -