金沙js5线路(中国)有限公司(WWW.ENROO.COM)为单片机技术服务\开发设计和产品代理商,授权MDT(麦肯 MICON)单片机A级代理商,MICROCHIP产品全系列单片机与模拟器件授权推广
商。同时A级代理分销NOVACAP、Syfer、Voltronics精密可调电容、DLI宽带隔直微波电容,专注分销AIC沛亨半导体(电源管理IC)、IR(场效应管)。
如:
MDT2005、MDT10P05(完全兼容PIC16C54c、PIC16F54、CF745直接替换,不要任何硬软与软件修改)
特性:ROM:0.5K,脚位:18PIN,I/O:13PIN,复位时间极快.2V,低电压工作.低功耗,温度范围宽。
MDT2010、MDT10P10(完全兼容PIC16C56A,直接替换,不要任何硬软与软件修改,媲美EMC78P156,HT48R06)
特性:ROM:1K,脚位:18PINI/O:13PIN,复位时间极快.2V,低电压工作.低功耗,温度范围宽。
菜鸟学PIC单片机(二):LCD 时钟 (功能设计过程中的致命bug)
结合昨天LCM的驱动编写过程,小弟今天准备利用定时器用LCM来显示时钟.
呵呵,下午边调变改,有些收获和疑问,现一并写出来,请行家指点.
功能很明确:利用TMR0实现精确定时,_clock子程序更新时间,LCM显示时间
但是,遇到了一些问题:
1.在ICD和demo板上调试运行,结果显示应为
HH MM SS
00:00:00
且ss对应下的秒区字符应该每1秒改变一次.但是,运行的结果如下:
1) 参考本例的源程序,其他一切不变,只是预分频为1:8(原来设计为1:16)
那么,应该是每0.5秒变化一次,但是据小弟多次观察,运行的时候,SS的秒区
为每分钟(人工大概估计)计数一次,及秒表变成了分表,另外,在每分钟里,SS区的字符会有2到3次调变
比如0x(x为当前计数显示值)变成24,一晃而过,又恢复显示0x.
(a)小弟仔细检查定时,转换,显示的程序流程,没有发现为何没半秒显示计数变成了每分钟显示计数的原因;
(b)至于SS秒区的字符会跳变,小弟认为可能是LCM的控制问题.
2. 在主程序main中,loop循环中的第一条指令clrwdt会引起一些问题:
main
nop
call _init ; 调用初始化子程序
call _disp1 ; 调用显示字符" HH MM SS "的子程序
loop clrwdt ; ★★★注意!!该语句的功能,小弟很疑惑
call _clock ; 调用时钟计算子程序
call _convert ; 调用时钟的小时,分,秒的BCD码转换子程序
call _disp2 ; 调用转换后的小时:分:秒字符的显示子程序
goto loop
所引起的问题如下:
1)首先,我在ICD烧录时,在option选项中是关掉WDT的;
2)若去掉该语句,程序仍然同前文1.所描述的情况,唯一变化的是,时间显示区的字符跳变
从SS区换成HH区,即小时区下的00会在分钟之内,好几次跳变成52.
3)以为是偶然,于是禁用和启用该语句两次,现象没变.
小弟认为,既然分频器给了TMR0,烧录时也关了WDT,那么,该语句所起的作用是什么呢?
3. 其实该程序存在一个致命的问题,吃晚饭时,小弟想到了症结所在.
呵呵,小弟先不点出来,愿意和大家一起商讨解决的好办法......
请各位PIC单片机爱好者看过来...