原创 关于C8051F9xx内部的SmaRTClock功能

2013-11-23 11:58 1193 17 17 分类: 消费电子

 

qq截图20131117234115.jpg
qq截图20131123114700.jpg
 
今天终于把C8051内部的SmaRTClock驱动调试成功了!其实在8月份就写过一次,当时我记得是成功了的,不过这两天把之前的代码拿出来看却完全没有印象,并且程序居然有问题!导致自己今天再次写时完全不知道错在那里,还是当初代码的注释部分不详细,以及当时可能对SmaRTClock的功能没有深刻的认识与记录,今天赶快写下来,不然过段时间可能就又忘记了!
C8051内部的SmaRTClock是具有实时时钟(Real-time)和闹钟(Alarm)以及时间捕获(Time Capture)功能。本次只用了它的闹钟功能,其它功能并未尝试,在此不作过多的解释(毕竟没用过的东西不能乱说,否则会误人子弟的),但通过查看它的Real-Time功能觉得并没有比其它MCU方便,就拿PIC说吧它的Real-Time部分都具有year,month,day....等等寄存器,用户只需要读出即可,但C8051的Real-Time部分并不具有这些寄存器,只有一组Capturex寄存器,可能还需用户自己的换算!
好了,还是说说它的Alarm功能吧!首先能定时就一定要有时钟源,SmaRTClock具有单独的时钟源与系统时钟源并无直接关系,它的时钟源可为内部的Self-Osc与外部的Crystal,具体的选择由用户根据应用而定。我用的是Self-OSC,定的是10s的时间间隔,但是却发现实际时间只有9s不到,误差很大,后来通过在其官网论坛上发现也有网友反映这个Self-OSC精度的问题,Silabs的FAE好像也说具体的精度他们也不敢保证,说这个功能本来就主要是为了让MCU处于睡眠与低功耗模式下运行的,因为这样的话就不用在意时钟的精度了,也不知道是否真是这个原因或者说是我程序本身存在的问题!如有网友有用过的话,还请和我交流!同时要注意的是在斟误表中说到Capture功能和AutoReset功能不能同时使用!
下面说说我在调试过程中遇到的问题。我的代码是可以运行的,但只能运行一次。始终是找不到这个问题。经过单步调试发现相关的Bit我都是设置正常的,并没有遗漏的地方。后来我自己将第一次闹钟事件发生后,手工的将SmaRTClock的计时器手动的清零,哎,程序正常运行了,但是我已经将它的Auto-Reset使能了啊!具体原因不得而知,如发现了将会告知各位!同时也告诉我们有时DataSheet说是这样的,但是可能实际的效果并非如此,所以我们一定的大胆尝试,勇于实践!
C8051 SmaRTClock的DEMO例程见附件:

文章评论0条评论)

登录后参与讨论
我要评论
0
17
关闭 站长推荐上一条 /2 下一条