📄 ds1302.lst
字号:
C51 COMPILER V6.23a DS1302 01/09/2008 20:10:32 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE DS1302.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*DS1302驱动程序 **********************************************/
2 /*版本 V1.1 **********************************************/
3 /*2007-11-15 **********************************************/
4 /*吾人 **********************************************/
5 /*DS1302控制寄存器*******************************************/
6 /*寄存器名--写--读--取值范围 --[7-----6--5---4--3--2--1--0]*/
7 /*秒 --80--81---00-59 --[CH----{10SEC }--{--SEC-- }]*/
8 /*分钟 --82--83---00-59 --[0 ----{10MIN }--{--MIN-- }]*/
9 /*小时 --84--85---0-12/23 --[12/24-0-10AP-HR-{ --HR-- }]*/
10 /*日期 --86--87---1-28/29/30-[0 ----0-{10DAT}-{-DATAE- }]*/
11 /*月份 --88--89---01-12 --[0-----0--0--10M-{-MONTH- }]*/
12 /*周日 --8A--8B---01-07 --[0-----0--0---0--0-{-DAY- }]*/
13 /*年份 --8C--8D---00-99 --[{ -10YEAR- }-{-YEAR- }]*/
14 /************************************************************/
15
16 #include <reg52.h>
17 #include <intrins.h>
18 #ifndef uchar
19 #define uchar unsigned char
20 #endif
21 #ifndef uint
22 #define uint unsigned int
23 #endif
24 #define ds1302_set0(x) x=0
25 #define ds1302_set1(x) x=1
26 sbit ds1302_rst=P3^7;
27 sbit ds1302_sclk=P3^5;
28 sbit ds1302_io=P3^6;
29 void ds1302_initial();
30 void ds1302_senddata(uchar dsend);
31 uchar ds1302_receivedata(void);
32 /*******************寄存器********************/
33 char Ds1302Reg[7]={0}; //ds1302内部日期寄存器 (00-06)
34 char Date[14]={0};
35 /*********************************************/
36 void ds1302_senddata(uchar dsend)
37 {
38 1 uchar i;
39 1 for(i=0;i<8;i++)
40 1 {
41 2 ds1302_io=(bit)(dsend&0x01);
42 2 ds1302_set1(ds1302_sclk);
43 2 dsend=dsend>>1;
44 2 ds1302_set0(ds1302_sclk);
45 2 }
46 1 }
47 uchar ds1302_receivedata(void)
48 {
49 1 uchar i,dat=0;
50 1 for(i=0;i<7;i++)
51 1 {
52 2 if(ds1302_io) dat=dat|0x80;
53 2 else dat=dat&0x7f;
54 2 ds1302_set1(ds1302_sclk);
55 2 dat=dat>>1;
C51 COMPILER V6.23a DS1302 01/09/2008 20:10:32 PAGE 2
56 2 ds1302_set0(ds1302_sclk);
57 2 }
58 1 if(ds1302_io) dat=dat|0x80;
59 1 else dat=dat&0x7f;
60 1 return dat;
61 1 }
62
63 void Ds1302Write(char data1,char data2)
64 {
65 1 ds1302_set1(ds1302_rst);
66 1 ds1302_senddata(data1);
67 1 ds1302_senddata(data2);
68 1 ds1302_set0(ds1302_rst);
69 1 }
70 char Ds1302Read(char Addr)
71 {
72 1 char DataReturn;
73 1 ds1302_set1(ds1302_rst);
74 1 ds1302_senddata(Addr);
75 1 DataReturn=ds1302_receivedata();
76 1 ds1302_set0(ds1302_rst);
77 1 return DataReturn;
78 1 }
79 void Ds1302ReadAll()
80 {
81 1 char i;
82 1 for(i=0;i<7;i++)
83 1 {
84 2 Ds1302Reg[i]=Ds1302Read(0x81|((i<<1)&0xfe));
85 2 }
86 1 }
87 void Ds1302DataConver()
88 {
89 1 char Counter=0;
90 1 Ds1302ReadAll();
91 1 //秒 分 时
92 1 Date[5]=Ds1302Reg[0]%0x10;
93 1 Date[4]=((Ds1302Reg[0]>>4)&0x07);
94 1 Date[3]=Ds1302Reg[1]%0x10;
95 1 Date[2]=(Ds1302Reg[1]>>4);
96 1 Date[1]=Ds1302Reg[2]%0x10;
97 1 Date[0]=((Ds1302Reg[2]>>4)&0x01);
98 1 //日 月
99 1 Date[9]=Ds1302Reg[3]%0x10;
100 1 Date[8]=((Ds1302Reg[3]>>4)&0x03);
101 1 Date[7]=Ds1302Reg[4]%0x10;
102 1 Date[6]=((Ds1302Reg[4]>>4)&0x01);
103 1 //星期
104 1 Date[10]=Ds1302Reg[5];
105 1 //年 基数 2000
106 1 Date[11]=Ds1302Reg[6]%0x10;
107 1 Date[12]=((Ds1302Reg[6]>>4)&0x0f);
108 1 for(Counter=0;Counter<13;Counter++)
109 1 Date[Counter]+='0';
110 1 }
111
112 void ds1302_initial()
113 {
114 1 ds1302_set0(ds1302_sclk);
115 1 ds1302_set0(ds1302_rst);
116 1 ds1302_set0(ds1302_io);
117 1 Ds1302Write(0x8e,0x00);
C51 COMPILER V6.23a DS1302 01/09/2008 20:10:32 PAGE 3
118 1 Ds1302Write(0x80,0x01);
119 1 Ds1302Write(0x82,0x00);
120 1 Ds1302Write(0x84,0x00);
121 1 Ds1302Write(0x86,0x00);
122 1 Ds1302Write(0x90,0xa9);
123 1 }
124 /*DS1302驱动结束******************************************/
125
126 /*先前版本存在一个小问题 说声抱歉了 这个已经在实际中通过*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 312 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 21 ----
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 + -