📄 my51pro.lst
字号:
C51 COMPILER V8.02 MY51PRO 10/04/2008 10:46:24 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MY51PRO
OBJECT MODULE PLACED IN C:\DOCUME~1\ADMINI~1\桌面\WORK\MY51PRJ\MY51PRO.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C:\DOCUME~1\ADMINI~1\桌面\WORK\MY51PRJ\MY51PRO.C DB SB OE
line level source
1 #include <reg52.h>
2 #include <absacc.h>
3 #include <intrins.h>
4
5
6 /*DS1302命令字地址定义区*/
7 #define DS1302_SECOND 0x80
8 #define DS1302_MINUTE 0x82
9 #define DS1302_HOUR 0x84
10 #define DS1302_DATE 0x86
11 #define DS1302_MONTH 0x88
12 #define DS1302_DAY 0x8A
13 #define DS1302_YEAR 0x8C
14 #define DS1302_WP 0X8E
15
16 /*控制位定义区*/
17 sbit DS1302_CLK = P2^5;
18 sbit DS1302_DIO = P3^3;
19 sbit DS1302_RST = P3^4;
20 sbit DAW = P3^5;
21
22 /*标志位与数据定义区*/
23 unsigned char receive_sbuf;
24 unsigned char receive_7128;
25 unsigned char receive_1302;
26 unsigned char jingdu=0xff;
27 unsigned char weidu=0xff;
28 unsigned char nianinit=0x08; //初始化时间的年
29 unsigned char zhouinit=0xff; //初始化时间的周(星期)
30 unsigned char yueinit=0x10; //初始化时间的月
31 unsigned char riinit=0x3; //初始化时间的日
32 unsigned char shiinit=0x10; //初始化时间的时
33 unsigned char feninit=0x41; //初始化时间的分
34 unsigned char miaoinit=0x44; //初始化时间的秒
35 unsigned char nian=0xff; //从1302读出的年
36 unsigned char zhou=0xff; //从1302读出的周(星期)
37 unsigned char yue=0xff; //从1302读出的月
38 unsigned char ri=0xff; //从1302读出的日
39 unsigned char shi=0xff; //从1302读出的时
40 unsigned char fen=0xff; //从1302读出的分
41 unsigned char miao=0xff; //从1302读出的秒
42 unsigned char OK=0x00; //0xff为接收初始化数据完毕
43 unsigned char configflag=0x00; //0xff为配置完毕
44 unsigned char receiveFnum=0x00; //接收FF计数
45 unsigned char receive0num=0x00; //接收00计数
46 unsigned char receivecount=0x00; //接收初始化数据计数
47 unsigned char receivecount2=0x00; //接收控制量数据计数
48 unsigned char receivestart=0x00; //接收初始化数据开始标志,开始为0xff
49 unsigned char receivestart2=0x00; //接收控制量数据开始标志,开始为0xff
50 unsigned char receiveend=0x00; //结束为0xff
51 unsigned char error=0x00; //发生为ff
52 unsigned char datareadynum=0;
53 unsigned char danum1=0x00; //高八位
54 unsigned char danum2=0x00; //低四位
55 unsigned char danum3=0x00;
C51 COMPILER V8.02 MY51PRO 10/04/2008 10:46:24 PAGE 2
56 unsigned char danum4=0x00;
57 unsigned char adnum1=0x00; // 高八位
58 unsigned char adnum2=0x00; // 低四位(低四位有效)
59 unsigned char adnum3=0x00; // 高八位
60 unsigned char adnum4=0x00; // 低四位(低四位有效)
61 unsigned char adnumflag=0x00;//0x00第一个
62 int dosendpc=1; //是否执行sendpc函数1不执行
63 int sendpcnum=0; //发送的第几个数,从0开始
64 int updatanum=0;
65
66 /*函数定义区*/
67 //DA,10位,先给高两位,后低八位,AD,12位,先高八位,后低四位 ??
68 void Inputbyte(unsigned char m);
69 unsigned char Outputbyte(void);
70 unsigned char Read1302(unsigned char Addr);
71 void Write1302(unsigned char Addr, unsigned char Da);
72 void DAint(unsigned char dadata_fir,unsigned char dadata_sec);
73 void DS1302config(void);
74 void Timeupdata(void);
75 void Send3ff(void);
76 void Send300(void);
77 void Sendpc(void);
78
79
80 void main(void)
81 {
82 1
83 1 //外中断设置
84 1 IT0=1; //外部中断0 下降沿中断
85 1 PX0=0; //外部中断优先级低
86 1 //EX0=1; //开外部中断0
87 1 //串口设置
88 1 SCON=0x50; //模式1;允许接接收;标志位清0
89 1 PS=1; //串口中断高优先级
90 1 PCON=0X80;
91 1 TMOD=0x20; //方式2:自动装入
92 1 TL1=TH1=0xF3;
93 1 TR1=1; //波特率 4800@12Mhz)
94 1 ES = 1; //串口中断开
95 1
96 1
97 1 _nop_();
98 1
99 1
100 1 //DAint(0xff,0x0f);
101 1
102 1
103 1 EA=1; //开总中断
104 1
105 1
106 1 _nop_();
107 1
108 1 Write1302(DS1302_WP,0x00);
109 1 _nop_();
110 1 _nop_();
111 1 // Write1302(0x90,0xA5); //充电模式(暂时省略)
112 1 Write1302(DS1302_SECOND,0x00); //设置秒,并启动(以后改成后启动或最后设置秒并启动)
113 1 _nop_();
114 1 _nop_();
115 1 Write1302(DS1302_MINUTE,0x50); //设置分钟
116 1 _nop_();
117 1 _nop_();
C51 COMPILER V8.02 MY51PRO 10/04/2008 10:46:24 PAGE 3
118 1 Write1302(DS1302_HOUR,0x14); //设置小时
119 1 _nop_();
120 1 _nop_();
121 1 Write1302(DS1302_DATE,0x28); //设置日期
122 1 _nop_();
123 1 _nop_();
124 1 Write1302(DS1302_MONTH,0x08); //设置月
125 1 _nop_();
126 1 _nop_();
127 1 Write1302(DS1302_DAY,0x04); //设置星期
128 1 _nop_();
129 1 _nop_();
130 1 Write1302(DS1302_YEAR,0x08); //设置年
131 1 _nop_();
132 1 _nop_();
133 1 Write1302(DS1302_WP,0xFF); //关写操作允许位
134 1
135 1 // DS1302config();
136 1 // TI=1;
137 1 // while(1);
138 1 SBUF=0X00;
139 1 while(1)
140 1 {
141 2 //updatanum++;
142 2 //if(updatanum>=20000)
143 2 // { Timeupdata();updatanum=0;}
144 2 //if (sendpcnum==0)
145 2 //updatanum++;
146 2 //if(updatanum>=20000)
147 2 // TI=1;
148 2 }
149 1
150 1
151 1 /*while(1)
152 1 {
153 1 if(OK==0xff&&configflag==0x00)
154 1 {
155 1 DS1302config();
156 1 configflag=0xff;
157 1 }
158 1 DAint(danum1,danum2);
159 1 Timeupdata();
160 1 if (sendpcnum==0)
161 1 TI=1;
162 1 }
163 1 */
164 1
165 1
166 1 }
167
168
169
170 //串口中断程序
171 void int_s(void) interrupt 4
172 {
173 1 ES = 0; //关闭串行中断
174 1 if(TI==1)
175 1 {
176 2 SBUF=Read1302(DS1302_MONTH);
177 2 // SBUF=0X55;
178 2 /*
179 2 switch(sendpcnum)
C51 COMPILER V8.02 MY51PRO 10/04/2008 10:46:24 PAGE 4
180 2 {
181 2 case 0:SBUF=Read1302(DS1302_YEAR);sendpcnum++;break;
182 2 case 1:SBUF=Read1302(DS1302_MONTH);sendpcnum++;break;
183 2 case 2:SBUF=Read1302(DS1302_DATE);sendpcnum++;break;
184 2 case 3:SBUF=Read1302(DS1302_HOUR);sendpcnum++;break;
185 2 case 4:SBUF=Read1302(DS1302_MINUTE);sendpcnum++;break;
186 2 case 5:SBUF=Read1302(DS1302_SECOND);sendpcnum++;break;
187 2 case 6:SBUF=adnum1;sendpcnum++;break;
188 2 case 7:SBUF=adnum2;sendpcnum++;break;
189 2 case 8:SBUF=adnum3;sendpcnum++;break;
190 2 case 9:SBUF=adnum4;sendpcnum++;break;
191 2 case 10:sendpcnum=0; break;
192 2 } */
193 2 TI=0;
194 2
195 2 }
196 1 if(RI==1)
197 1 {
198 2 receive_sbuf=SBUF;
199 2 receiveFnum++;
200 2 if(receiveFnum==1)
201 2 {
202 3 if(receive_sbuf==0xff)
203 3 receivestart=0xff; //初始化数据开始标志位置位
204 3 if(receive_sbuf==0xf0)
205 3 receivestart2=0xff; //调试数据开始标志位置位
206 3 }
207 2 if(receivestart==0xff)
208 2 switch(receivecount)
209 2 {
210 3 case 0:_nop_(); receivecount++;break;
211 3 case 1: nianinit=receive_sbuf; receivecount++;break;
212 3 case 2: yueinit=receive_sbuf; receivecount++;break;
213 3 case 3: riinit=receive_sbuf; receivecount++;break;
214 3 case 4: shiinit=receive_sbuf; receivecount++;break;
215 3 case 5: feninit=receive_sbuf; receivecount++;break;
216 3 case 6: miaoinit=receive_sbuf;
217 3 OK=0xff; //接收初始化数据完毕
218 3 receivestart=0x00;
219 3 receivecount=0;
220 3 receiveFnum=0x00;
221 3 break;
222 3 }
223 2 if(receivestart2==0xff)
224 2 switch(receivecount2)
225 2 {
226 3 case 0:_nop_(); receivecount2++;break;
227 3 case 1: danum1=receive_sbuf; receivecount2++;break;
228 3 case 2: danum2=receive_sbuf; receivecount2++;break;
229 3 case 3: danum3=receive_sbuf; receivecount2++;break;
230 3 case 4: danum4=receive_sbuf;
231 3 receivestart2=0x00;
232 3 receivecount2=0;
233 3 receiveFnum=0x00;
234 3 break;
235 3 }
236 2 RI=0;
237 2 }
238 1 ES=1;
239 1 }
240
241 //外部中断程序
C51 COMPILER V8.02 MY51PRO 10/04/2008 10:46:24 PAGE 5
242 void ADint(void) interrupt 0
243 {
244 1 // ADCTL=1;
245 1 EX0=0;
246 1 if(adnumflag==0x00)
247 1 {
248 2 SBUF=P0;
249 2 adnumflag=0xff;
250 2 }
251 1 else
252 1 {
253 2 SBUF=(P0&0x0f);
254 2 adnumflag=0x00;
255 2 }
256 1 EX0=1;
257 1 //ADCTL=0;
258 1 //ADCTL=0;
259 1 }
260
261 void DAint(unsigned char dadata_fir,unsigned char dadata_sec)
262 {
263 1 P1=dadata_fir;
264 1 DAW=0;
265 1 _nop_();
266 1 _nop_();
267 1 _nop_();
268 1 _nop_();
269 1 P1=dadata_sec;
270 1 DAW=1;
271 1 _nop_();
272 1 }
273
274 void Inputbyte(unsigned char m) //SPI写入一个字节
275 {
276 1 unsigned char i;
277 1 //ACC = m;
278 1 for(i=0; i<8; i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -