📄 ds1302.lst
字号:
C51 COMPILER V7.07 DS1302 11/28/2006 09:20:52 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ds1302.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //*******************************************************************
2 //***此程序为调试通过的源程序
3 //***由南京赛博电子有限公司提供
4 //***文件名:sy0606.C***//
5 //***是51系例单片机的最小系统
6 //***有AT89S51/52的在线下载功能
7 //***IIC总线芯片为24C02,记存密码
8 //*******************************************************************
9 #include"reg52.h"
10 #include<intrins.h>
11 #define uchar unsigned char
12 #define uint unsigned int
13 #define nop _nop_() /* 定义空操作指令 */
14 sbit clk=P1^3; /*时钟芯片DS1302时钟输入端*/
15 sbit DINOUT=P1^4; /*DS1302时钟芯片数据输入输出端*/
16 sbit RST=P1^5; /*DS1302芯片复位起始端*/
17 sbit en =P1^7; /*DTLED-6显示芯片使能端*/
18 sbit dout=P1^6; /*DTLED-6显示芯片数据读入端*/
19 sbit ts_clk=P1^3;
20 uchar dispbuf[9]; /*显示值存放阵列*/
21 uchar clocktmp[3]; /*显示值存放阵列*/
22 uchar clockbak;
23 void tsled(void); /*串行发送到DTLED-6副程式*/
24 void Rd1302st(void); /*读时钟芯片DS1302*/
25 void Rd1302(void); /*读时钟芯片DS1302*/
26 void Wr1302(void); /*写时钟芯片DS1302*/
27 /***********************************************************************/
28 void delay (unsigned int value) /*延时副程式*/
29 {
30 1 while (value!=0) value--; /*10US延时*/
31 1 }
32 /***********************************************************************/
33 void main(void) /*主程式*/
34 {
35 1 dispbuf[0]=0x03; /*小数点位*/
36 1 dispbuf[7]=0x01; /*ID号码*/
37 1 Wr1302(); /*写时钟芯片DS1302*/
38 1 delay(10);
39 1 Rd1302st(); /*启动时钟芯片振荡器*/
40 1 delay(10);
41 1 while(1)
42 1 {
43 2 Rd1302(); /*读时钟芯片DS1302*/
44 2 if(dispbuf[1]!=clockbak) /*秒加一*/
45 2 {
46 3 clockbak=dispbuf[1];
47 3 tsled(); /*串行发送到DTLED-6副程式*/
48 3 }
49 2 }
50 1 }
51 /*********************************************************************/
52 //串行发送DTLED-6显示
53 void tsled(void) /*串行发送DTLED-6显示副程式*/
54 { char ts0,i,j;
55 1 ts_clk=0;
C51 COMPILER V7.07 DS1302 11/28/2006 09:20:52 PAGE 2
56 1 en=0;
57 1 delay(10);
58 1 for(j=0;j<9;j++)
59 1 { ts0=dispbuf[j];
60 2 for(i=0;i<4;i++) /*发小数点码8,4,2,1*/
61 2 {
62 3 ts_clk=1;
63 3 ts0=ts0<<1;
64 3 if(AC==1)
65 3 dout=1;
66 3 else dout=0;
67 3 ts_clk=0;
68 3 nop;
69 3 delay(3);
70 3 }
71 2 }
72 1 en=1;
73 1 } /*返回主程式*/
74
75 //======================================================================
76
77 void Wr1302(void) /*写时钟芯片DS1302*/
78 {char i,j,ts0,conb,conbyt;
79 1 conb=0x80;
80 1 ts0=conb;
81 1 //
82 1 for(j=0;j<3;j++) /*写秒,分,时三次循环*/
83 1 {clk=RST=0; /*DS1302系统初始化*/
84 2 nop;nop;
85 2 RST=1;
86 2 for(i=0;i<8;i++) /*写控制字到DS1302*/
87 2 {clk=0; /*清时钟*/
88 3 if(conb&0x01)
89 3 DINOUT=1;
90 3 else DINOUT=0;
91 3 clk=1; /*时钟上升沿,发送数据有效*/
92 3 conb=conb>>1;
93 3 nop;
94 3 }
95 2 clk=0; /*清时钟*/
96 2 conb=ts0+2+j*2;
97 2 conbyt=clocktmp[j]&0x7f;
98 2 for(i=0;i<8;i++) /*写设定值到DS1302*/
99 2 {clk=0; /*清时钟*/
100 3 if(conbyt&0x01)
101 3 DINOUT=1;
102 3 else DINOUT=0;
103 3 clk=1; /*时钟上升沿,发送数据有效*/
104 3 conbyt=conbyt>>1;
105 3 nop;
106 3 }
107 2 delay(5);
108 2 RST=0;
109 2 nop;
110 2 }
111 1 }
112 /*返回主程式*/
113 /******************************************************/
114 void Rd1302st() /*启动时钟芯片振荡器*/
115 {
116 1 char i,ts0,conb,conbyt;
117 1 Rd1302();
C51 COMPILER V7.07 DS1302 11/28/2006 09:20:52 PAGE 3
118 1 conbyt=clocktmp[0]&0x7f;
119 1 conb=0x80;
120 1 ts0=conb;
121 1 clk=RST=0; /*DS1302系统初始化*/
122 1 nop;nop;
123 1 RST=1;
124 1 for(i=0;i<8;i++) /*写控制字到DS1302*/
125 1 { clk=0; /*清时钟*/
126 2 if(conb&0x01)
127 2 DINOUT=1;
128 2 else DINOUT=0;
129 2 clk=1; /*时钟上升沿,发送数据有效*/
130 2 conb=conb>>1;
131 2 nop;
132 2 }
133 1 clk=0; /*清时钟*/
134 1 for(i=0;i<8;i++) /*写控制字到DS1302*/
135 1 { clk=0; /*清时钟*/
136 2 if(conbyt&0x01)
137 2 DINOUT=1;
138 2 else DINOUT=0;
139 2 clk=1; /*时钟上升沿,发送数据有效*/
140 2 conbyt=conbyt>>1;
141 2 nop;
142 2 }
143 1 delay(5);
144 1 RST=0;
145 1 nop;
146 1 } /*返回主程式*/
147 /******************************************************/
148 void Rd1302() /*读时钟芯片DS1302*/
149 {char i,j,ts0,conb;
150 1 conb=0x81;
151 1 clocktmp[0]=0;
152 1 clocktmp[1]=0;
153 1 clocktmp[2]=0;
154 1 ts0=conb;
155 1 for(j=0;j<3;j++)
156 1 {clk=RST=0; /*DS1302系统初始化*/
157 2 nop;nop;
158 2 RST=1;
159 2 for(i=0;i<8;i++) /*写控制字到DS1302*/
160 2 {
161 3 clk=0; /*清时钟*/
162 3 if(conb&0x01)
163 3 DINOUT=1;
164 3 else DINOUT=0;
165 3 clk=1; /*时钟上升沿,发送数据有效*/
166 3 conb=conb>>1;
167 3 nop;
168 3 }
169 2 conb=ts0=ts0+2;
170 2 clk=0;
171 2 for(i=0;i<7;i++) /*读时钟芯片的时分秒单元*/
172 2 {
173 3 if(DINOUT==1)
174 3 clocktmp[j]=clocktmp[j]|0x80;
175 3 else clocktmp[j]=clocktmp[j]&0x7f;
176 3 clk=1;
177 3 clocktmp[j]=clocktmp[j]>>1; /*接收暂存单元*/
178 3 nop;
179 3 clk=0; /*时钟下降沿,接收数据有效*/
C51 COMPILER V7.07 DS1302 11/28/2006 09:20:52 PAGE 4
180 3 }
181 2 delay(5);
182 2 RST=0;
183 2 delay(10);
184 2 }
185 1 dispbuf[1]=clocktmp[0]&0x0f; /*转换秒分时显示单元*/
186 1 dispbuf[2]=clocktmp[0]>>4&0x07;
187 1 dispbuf[3]=clocktmp[1]&0x0f;
188 1 dispbuf[4]=clocktmp[1]>>4&0x07;
189 1 dispbuf[5]=clocktmp[2]&0x0f;
190 1 dispbuf[6]=clocktmp[2]>>4&0x03;
191 1 } /*返回主程式*/
192 //**************************************************************
193
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 441 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 2
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 + -