锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

PIC单片机RC振荡器的使用及校准方法-方案运用

时间:2023-08-06 07:37:00

PIC的单片机中有多种型号有内部RC的功能,从而省去了晶振,不但节省了成本,并且我们还多了两个IO端口可以使用。

但是,由于RC振荡器的离散性很大,因此,在有内部RC振荡器的单片机中,它的内部RAM中都会有一个名为OAL的校准寄存器,通过置入不同的数值来微调RC振荡器的振荡频率。并且,单片机的程序存储器中,也会有一个特殊的字来储存工厂生产时测得的校准值。下面我以常用的12C508A和12F629为例加以说明。

PIC单片机RC振荡器的使用及校准方法

12C508A的复位矢量是程序的最高字0x1FF,这个字节生产商已经固定的烧写为MOVLW 0xXX,指令执行后,W寄存器中即为校准值XX,当我们需要校准时,那么,在紧接着的地址0x0应该是一条这样的指令:MOVWF OSCCAL。接下去RC振荡器就会以标准的振荡频率运行了。

12F629的校准值也存放在最高字--0x3FF中,内容是RETLW 0xXX,但它的复位矢量却是0x0。这样,在我们需要校准RC振荡器时,在初始化过程中要加上下面两句:

CALL 0x3ff

MOVWF OSCCAL

当然,你还要注意寄存器的块选择位。

以前,我在做项目时,没太注意这个问题,这是因为在使用12C508A时,HI-CH在进行编译时已经偷偷地替我们做了这项工作。它会在程序的0x0处自动加一条MOVWF OSCCAL。用12F629做接收解码代替2272时也没发生什么问题,但是在用被它作滚动码时却发现接收距离的离散性很大。经多次试验终于找出是没对振荡器的振荡频率进行校正所至。

因此,需要另外编写用于校正的语句,我用了两种方法来实现这个目的:

1、用内嵌汇编的形式

#asm //此段汇编程序用于将位于程序段3F的

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章