应广单片机内部有两个时钟源分别是IHRC和ILRC,IHRC频率在16M附近,ILRC一般为几十K,IHRC在烧录的时候可以进行校准,IHRC校准之后,频率还比较稳定.ILRC没有校准这个功能.
IHRC校准之后,频率还比较稳定.
在一些特别应用中,在一些特殊场合,需要使用ILRC作为系统时钟..那么可以使用IHRC对ILRC进行校准.
校准方法如下:
word usIlrcFrq;
word reload_T16;
byte ucRand;
/*相应于main函数*/
void FPPA0 (void)
{
/*单片机内部RC时钟为 IHRC默认为16M,因此,IHRC/8=2M,系统时钟为2M*/
.ADJUST_IC SYSCLK=IHRC/8
$ T16M ILRC,/1,bit15;//打开定时器,使用ILRC作为时钟源
reload_T16 = 0;/*计数值清0*/
stt16 reload_T16;//初始化计数器的值
.delay 1000*2000;//指令延时1秒
LDT16 usIlrcFrq;//记录1s后的计数器的值,即ILRC的时钟
$ T16M stop;//关闭定时
ucRand=usIlrcFrq$0;/*用计数值的低8bit作为随机数*/
.PRINTF ("usIlrcFrq= %d \n\n",usIlrcFrq );
.PRINTF ("ucRand= %d \n\n",ucRand );
/*主循环*/
while (1)
{
}
}
为了能够使ILRC更准确,还可以间隔一段时间进行校准一次,也可以自己再去试一试.
由于ILRC不能在烧录的时候进行校准,而且电压和温度对ILRC有不小影响,因此每次上电去到的ILRC的时钟就有一些差别,而这个差别正好有时候可以用.就是当做一个伪随机数来用.