MPLAB X IDE V4.2 -2:如何使用PIC10F200的TIMER0定时

2019-04-15 14:42发布

由于是刚接触PIC的单片机,所以需要仔细学习。 一 我所使用的延时方法: 工作需要用到PIC10F200来定时: 1 最初我用的是简单的delay()来实现 但是这种延时不精确,且由于各个PIC10F200芯片的晶振精度存在差异(即使厂家上电校正后,差异始终存在);我在235个芯片上刷相同的程序延时600ms,实际抽样测得延时时间在584~611ms左右不等。 delay(long i)
   {    
       while(i)
           i--;
   } 2 网友的方法1 程序中加入如下两行,按照网友的方法在程序中添加如下两行,网友的意思是可以精确定时。但我实际运行的结果仍然存在误差,实际运行时间为1.015ms #define _XTAL_FREQ 4000000  __delay_ms(1);   3 网友的方法2 利用timer0定时 #include int mydelay_ms(int y) ; long i ; int CountOld; int CountNew; void main(void) { __CONFIG(OSC_IntRC&WDT_OFF&CP_OFF&MCLRE_ON); OPTION = 0x07; //256倍频 TRIS = 0x09; //GPIO1、GPIO2输出;GPIO0、 GPIO3输入;高四位不可修改,默认为0: 0000,1001 GP2 = 1; GP1 = 0; //因为 只要MCLR功能开,则内部上拉始终有效; mydelay_ms(60); //延时60*10ms左右 GP1 = 1; mydelay_ms(4);//延时40ms左右 GP2 =0; while(1) { GP1=1; GP2=0; } } int mydelay_ms(int y) //延时 y*10 ms { for(i =y;i>0;i--) { TMR0 = 0xD9; //延时10ms CountOld = TMR0; CountNew = TMR0; while (CountNew >= CountOld) { CountOld = CountNew; CountNew = TMR0; } } } //********************************NOTE*************************************************// //定时时间计算: // N倍频,周期T,定时t,定时器初值X(TIMER0从 X向上计数,最多记到256,因为它是8位的寄存器) // N *(256-X)*T =t // --> X =256 - t/N*T +2 // 其中N 由OPTION的第三位设置,周期默认为1us // 之所以X后面还要加2,是因为芯片自身存在2个周期的延时 上面程序是我自己写的,通过Stopwatch观察发现:定时时间为604.369ms 和40.338ms 利用K150将程序烧写到芯片后,测试芯片的实际定时时间为600ms,44ms 以及596ms,42ms。说明同一程序在不同PIC芯片上运行的定时时间确实存在差异,也说明了利用定时器确实能较精确地定时。 二 新发现: 1 MPLAB 不接仿真器和芯片也可以直接仿真; 2 MPLAB X IDE V4.2中Stopwatch的位置: Window-->Debugging-->Stopwatch 二 遗留问题: 1 自己修改OSCCAL的校正参数有何作用?我在程序中加与不加这句似乎对运行结果没什么影响。