📄 gsm-
字号:
C51 COMPILER V7.06 DS1302 06/13/2010 15:40:38 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: E:\WorkSpace\Keil\C51\BIN\C51.EXE ds1302.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #ifndef DS1302_H
2 #define DS1302_H
3 #include "common.h"
4 //设置时间,time[0]-time[6]数据存放顺序为:秒,分,时,日,月,星期,年
5 unsigned char times[7]={00,30,23,12,6,6,10};
6 sbit SCLK=P2^5;
7 sbit IO=P2^6;
8 sbit RST=P2^7;
9 sbit ACC7=ACC^7;
10 sbit ACC0=ACC^0;
11
12 /*================================================================*/
13 /* 向1302当前地址处写入1字节数据 */
14 /*================================================================*/
15 void write_1302_byte(unsigned char d)
16 {
17 1 unsigned char i;
18 1 ACC=d; //将8位数据写入ACC
19 1 for(i=8;i>0;i--) //循环8次将ACC8位数据从低位到高位写入1302
20 1 {
21 2 IO=ACC0; //将ACC的最低位转送到IO口
22 2 SCLK=1; //上升沿写入1位数据
23 2 SCLK=0;
24 2 ACC=ACC>>1; //将ACC次低位变为最低位
25 2 }
26 1 }
27 /*=================================================================*/
28
29 /*=================================================================*/
30 /* 从1302的当前地址处读出1字节数据 */
31 /*=================================================================*/
32 unsigned char read_1302_byte(void)
33 {
34 1 unsigned char i;
35 1 for(i=8;i>0;i--)
36 1 {
37 2 ACC=ACC>>1;
38 2 ACC7=IO;
39 2 SCLK=1; //时钟下降沿读1位数据
40 2 SCLK=0;
41 2
42 2 }
43 1 return (ACC);
44 1 }
45 /*=================================================================*/
46
47 /*================================================================*/
48 /* 将数据Data写入1302寄存器add处 */
49 /*================================================================*/
50 void write_1302_reg(unsigned char add,unsigned char d)
51 {
52 1 RST= 0;
53 1 SCLK=0;
54 1 RST= 1;
55 1 write_1302_byte(add); //将1302的指针移到add处
C51 COMPILER V7.06 DS1302 06/13/2010 15:40:38 PAGE 2
56 1 write_1302_byte(d); //往add处写入数据
57 1 SCLK=1;
58 1 RST=0; //停止写数据
59 1 }
60 /*=================================================================*/
61
62 /*==================================================================*/
63 /* 读寄存器add处的值 */
64 /*==================================================================*/
65 unsigned char read_1302_reg(unsigned char add)
66 {
67 1 unsigned char d;
68 1 RST=0;
69 1 SCLK=0;
70 1 RST=1;
71 1 write_1302_byte(add);
72 1 d=read_1302_byte();
73 1 SCLK=1;
74 1 RST=0;
75 1 return (d);
76 1 }
77 /*=================================================================*/
78
79 /*===========================================================================================*/
80 /* 设置时间,time[0]-time[6]数据存放顺序为:秒,分,时,日,月,星期,年 */
81 /*===========================================================================================*/
82 void write_1302_time(unsigned char *time)
83 {
84 1 unsigned char add=0x80; //地址add初值(秒),偶数地址为只写
85 1 unsigned char i;
86 1 unsigned char timeBCD[7]; //用以存放time数据的BCD码值
87 1 bdata unsigned char l,h; //单位变量,分别存放时间数据(8421BCD码)的低4位和高4位
88 1 for(i=0;i<7;i++) //将时间数据转为BCD码放入timeBCD中
89 1 {
90 2 l=time[i]%10;
91 2 h=time[i]/10;
92 2 timeBCD[i]=h*16+l;
93 2 }
94 1 write_1302_reg(0x8e,0x00); //禁止写
95 1 for(i=0;i<7;i++)
96 1 {
97 2 write_1302_reg(add,timeBCD[i]); //将时间数据写入1302对应的寄存器
98 2 add+=2; //地址移动,确保地址为偶数
99 2 }
100 1 write_1302_reg(0x8e,0x80); //允许写
101 1 }
102 /*===========================================================================================*/
103
104 /*=================================================================================================*/
105 /* 读取当前时间 */
106 /*=================================================================================================*/
107 void read_1302_time(unsigned char time[])
108 {
109 1 unsigned char i;
110 1 unsigned char add=0x81; //设置地址add初值(秒),奇数为只读
111 1 bdata unsigned char l,h; //单位变量,分别存放时间数据(8421BCD码)的低4位和高4位,用以进行十进制转换
112 1 write_1302_reg(0x8e,0x00); //禁止写
113 1 for(i=0;i<7;i++)
114 1 {
115 2 time[i]=read_1302_reg(add); //将时间数据(8421BCD码)从1302对应的寄存器中读出
116 2 l=time[i]&0x0f; //l存放time的低4位,即个位
117 2 h=(time[i]>>4)&0x0f; //h存放time的高4位,即十位
C51 COMPILER V7.06 DS1302 06/13/2010 15:40:38 PAGE 3
118 2 time[i]=h*10+l; //时间数据以十进制形式放进time[i]中
119 2 add+=2; //地址移动,确保地址为奇数
120 2 }
121 1 }
122
123 #endif
124
125
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 232 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 14
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 + -