提一点建议或者意见:
作为帮助初学者的出发点是非常好的,感谢!
但是,作为示例或者提示性的例子,最好能够科学一些.
这里使用 2501B 做例子芯片,跑马灯的频率选择,应该比较迎合人们观看的是间隔 0.5S 时间,为什么?日常使用的时钟冒号就是 0.5S 啊!一闪一闪,从小到大,许多看数字钟的人都习惯了!(注意:这里仅仅对例子而言,实际项目里,可能要快一些!也可能要慢一些!)
再就是:最大限度分析选用芯片的资源,就说 2501B ,有一个实时时钟,使用外部 32768 低频晶体,有一个 RTC 选项,自动生成每隔0.5S中断一次(不用中断也行,可以轮询这个中断标志).有了这个 0.5S 时基,做什么流水灯都很方便,压根无需你去设置定时器的初始化值.
你在示例里,进入中断子程序,也是不够精练的, 2501B 支持很简单的进入与退出中断处理程序,有专门的指令,例如:
INT_SERVICE:;//进入中断子程序
PUSH ; 保存 ACC 和PFLAG................一条指令就搞定
;…中断里你的其它指令
;…中断里你的其它指令
POP ; 恢复ACC 和 PFLAG................一条指令就搞定
RETI ; 退出中断
是不是更加干净利落啊?
顺便提示: 2051B 是双时钟系统的单片机,当选择 0.5S 实时时钟产生后,仍然可以选择内部 16MHZ 高速时钟运行程序.外部的 32768HZ 晶体仅仅为了实时时钟.编译选项就选择:IHRC_RTC 内部高速16MHz RC,0.5sec RTC.
----------------仅供大家参考.欢迎指教! |