您的位置 首页 电子

用PIC16C54做一个LED电子钟

对于很多电子爱好者来说,自己制作一款LED的电子钟,是很有意思的一件事情,LED的电子钟虽然耗电一点,但在夜间也不用打开照明就可以看得清清

关于许多电子爱好者来说,自己制造一款LED电子钟,是很有意思的一件工作,LED的

电子钟尽管耗电一点,但在夜间也不必翻开照明就能够看得清清楚楚,仍是很便利的了.

PIC16C54内部有512字节(精确的说是能够放512条指令)的指令空间,关于电子钟的

使用项目来说,资源现已足够了.它具有12个I/O口,刚好能够用来做一个四个数码管的电

子钟.其间PORTA口用作位码输出,PORTB用作段码输出和按键输入.

54内部有一个8位的守时器,但没有中止溢出功用,关于用惯了中止的人来说,或许觉

得守时基准不好做,比方51系列的,只需设定好中止溢出时刻,一般取整数指令周期,如每

次溢出时刻为50mS,每次溢出时累加器加一,当加到20次时就有1S了,很便利进行体系时钟

的处理.但PIC16C54没有中止功用,只能用判别守时器溢出的办法来确认守时器的守时.判

判定量器溢出能够选用比较的办法,当收集到TMR0的计数值为0-5时,能够以为守时器溢出

了,另一种办法是测验TMR0的最高位是否为1,也便是把TMR0当作7位守时器来用,这样,就

不会呈现前一种办法由于程序错失捕获到TMR0的值为0-5的机遇而使守时呈现差错了.比

较好的办法是用一个存储器X0盯梢TMR0的计数值,在正常情况下,X0总是会小于TMR0的计

数值,由于在读取TMR0的值并把这个值赋值给X0之后,TMR0的计数值又在累加了,但TMR0是

一个循环计数器,当加到255后,其值将会变为零,这样就为判别TMR0供给了根据,即只需测

试到X0>=TMR0,即可以为TMR0现已溢出,这样就能够进行相应的处理了.如时钟频率为

4MHz,则一条指令的履行时刻为1uS,TMR0溢出对应于256uS,当测验到TMR0溢出之后,不对

TMR0进行任何赋值操作,由于对TMR0进行写入,会使TMR0推迟三个指令周期,而每次往

TMR0写入的时分,不或许它的计数值都是同一个值,所以只能选用加一个预订值的办法,如

果TMR0不选用分频器,则对TMR0履行 TMR0=TMR0+9的操作,将使每次TMR0的计数溢出周期

等效为250个指令周期,也便是250uS,需求留意的是,每次读入TMR0的值与X0进行比较时的

时刻距离必定不能大于TMR0的溢出时刻,不然错失溢出时刻.判别TMR0溢出的最短指令为:

MOVF TMR0,W

SUBWF X0,F

MOVWF X0

SKPC

GOTO 没有溢出…

溢出处理…

对应的C言句子子为:

i=TMR0;

x0=x0-i;

x0=i;

if(CARRY)

{TMR0+=9;
}
这儿借用了一个暂时存储器i,假如没有它,则句子编译不会最短,程序履行会了犯错

,不能确保每次溢出为250uS.

假如选用32768晶振的话,程序的规划上,不需求再对TMR0作任何写入,只需用上述程

序判别TMR0溢出就能够了.由于TMR0每次溢出的时刻为0.03125秒,再对其进行32分频即可

得到秒信号了.

这样,整个程序的中心部分就完成了,剩余的应该不难写出来.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/254152.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部