📄 www.ourhc.cn.lst
字号:
197 1 }
198
199 /********************************************************************
200 写入一个字节函数
201 *********************************************************************/
202 void IapProgramByte(uint addr,uchar dat)
203 {
204 1
205 1 IAP_CONTR=ENABLE_IAP;
206 1 IAP_CMD=CMD_PROGRAM;
207 1 IAP_ADDRL=addr;
208 1 IAP_ADDRH=addr>>8;
209 1 IAP_DATA=dat;
210 1 IAP_TRIG=0X5A;
211 1 IAP_TRIG=0XA5;
212 1 _nop_();
213 1 _nop_();
214 1 _nop_();
215 1 IapIdle();
216 1 }
217 /********************************************************************
218 擦除一个字节函数
219 *********************************************************************/
220 void IapEraseSector(uint addr)
221 {
222 1 IAP_CONTR=ENABLE_IAP;
223 1 IAP_CMD=CMD_ERASE;
224 1 IAP_ADDRL=addr;
225 1 IAP_ADDRH=addr>>8;
226 1 IAP_TRIG=0X5A;
227 1 IAP_TRIG=0XA5;
228 1 _nop_();
229 1 _nop_();
230 1 _nop_();
231 1 IapIdle();
232 1 }
233
234 /********************************************************************
235 主函数
236 *********************************************************************/
237 void main()
238 {
239 1
240 1 TIMER0_INIT(); //定时器0初始化模拟串口用
241 1 TIMER1_INIT(); //定时器1初始化
C51 COMPILER V8.05a WWW_OURHC_CN 06/11/2012 23:08:27 PAGE 5
242 1 Init_exint();
243 1 times=IapReadByte(0); //读取函数
244 1 EA=1; //开总中断
245 1 UART_INIT(); //串口初始化
246 1
247 1 while(1)
248 1 {
249 2 if(REND)
250 2 {
251 3 REND=0;
252 3 r++;
253 3 //but[r++&0x0f]=RBUF;
254 3 dat=RBUF;
255 3 }
256 2 if(TEND)
257 2 {
258 3 if(t!=r)
259 3 {
260 4 TEND=0;
261 4 //TBUF=dat;
262 4 switch(dat) //接收数据判断
263 4 {
264 5 uchar k;
265 5 k=10;
266 5 case 'A': P33=1;delay(k);TBUF = dat;dat=0xee;break; // 开
267 5 case 'B': P33=0;delay(k);TBUF = dat;dat=0xee;break; // 关
268 5 case 'C': if(P33==1)
269 5 TBUF = 'A'; // 串口读输出口状态
270 5 if(P33==0)
271 5 TBUF = 'B';
272 5 delay(k);
273 5 dat=0xee;
274 5 break;
275 5 case 'D': P33=!P33;delay(k);TBUF = dat;dat=0xee;break; // 输出口取反
276 5 case 'E': delay(k);TBUF = times;dat=0xee;break; // 串口读取当前设定值
277 5 default:break;
278 5 }
279 4 t++;
280 4 //TBUF=but[t++&0x0f];
281 4 TING=1;
282 4 }
283 3 }
284 2 /********************************************************************
285 2 接收数据判断函数
286 2 *********************************************************************/
287 2
288 2 }
289 1 }
290
291
292 /********************************************************************
293 定时器T0中断服务函数
294 *********************************************************************/
295 void tm0()interrupt 1 using 1
296 {
297 1 if(RING)
298 1 {
299 2 if(--RCNT==0)
300 2 {
301 3 RCNT=3;
302 3 if(--RBIT==0)
303 3 {
C51 COMPILER V8.05a WWW_OURHC_CN 06/11/2012 23:08:27 PAGE 6
304 4 RBUF=RDAT;
305 4 RING=0;
306 4 REND=1;
307 4 }
308 3 else
309 3 {
310 4 RDAT>>=1;
311 4 if(RXB)
312 4 RDAT|=0X80;
313 4 }
314 3
315 3 }
316 2 }
317 1
318 1 else if(!RXB)
319 1 {
320 2 RING=1;
321 2 RCNT=4;
322 2 RBIT=9;
323 2 }
324 1
325 1 if(--TCNT==0)
326 1 {
327 2 TCNT=3;
328 2 if(TING)
329 2 {
330 3 if(TBIT==0)
331 3 {
332 4 TXB=0;
333 4 TDAT=TBUF;
334 4 TBIT=9;
335 4 }
336 3 else
337 3 {
338 4 TDAT>>=1;
339 4 if(--TBIT==0)
340 4 {
341 5 TXB=1;
342 5 TING=0;
343 5 TEND=1;
344 5 }
345 4 else
346 4 TXB=CY;
347 4
348 4 }
349 3 }
350 2 }
351 1 }
352
353 /********************************************************************
354 外部中断0服务函数
355 *********************************************************************/
356 void Extern0 (void) interrupt 0 using 0
357 {
358 1 times++;
359 1 if(times==20) //最大设定时间40秒
360 1 times=0;
361 1 IapEraseSector(0); //擦除0地址数据
362 1 IapProgramByte(0,times); //写入0地址数据
363 1
364 1 }
365 /********************************************************************
C51 COMPILER V8.05a WWW_OURHC_CN 06/11/2012 23:08:27 PAGE 7
366 定时1中断服务函数
367 *********************************************************************/
368 void t1(void) interrupt 3 using 2
369 {
370 1
371 1 miao++;
372 1 if(miao==200) //2秒
373 1 {
374 2 miao=0;
375 2 fen++;
376 2 if(fen==times) // times秒
377 2 {
378 3 fen=0;
379 3 P33=!P33; //IO口输出电平取反
380 3 }
381 2 }
382 1 }
383 /********************************************************************
384 结束
385 *********************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 483 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 38 1
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 + -