91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

關于PIC12F509的定時計數器的問題

PIC12F509中的TMR0程序計數器,用以下寫法(C語言)
...
OPTION=0xC3;/250*16=4MS/
...
IF (TMR0>250)
  COUNT++;
...
IF (COUNT>250)
  {SECOND++;
  COUNT=0;}
...

按照4MS*250=1S則程序實現的是1秒的計時.
但如果在下面程序的情況下:
...
OPTION=0xC3;/250*16=4MS/
...
VOID TM()
{IF (TMR0>250)
  COUNT++;
IF (COUNT>250)
  {SECOND++;
  COUNT=0;}}
...
VOID DELAY()
{UNSIGNED INT I;
I=255;
WHILE(I--);
}
...
VOID MAIN()
{WHILE(1);
{ DELAY();
TM();
DELAY();}}
會出現因為DELAY的時間長而忽略掉某個TMR0的溢出,從而使得SECOND的定時出現誤差,這種情況下應該如何處理?特別是當這個DELAY()必須的時候.
全部回復(2)
正序查看
倒序查看
whatcall
LV.5
2
2007-05-31 23:34
看你的用法可知PIC12F509沒有定時器的中斷功能.
既然Delay()會過長影響你的計數檢查,為何不把TM()放到DELAY()中,此時注意DELAY的延時增加(指令多了不少),如下:

VOID DELAY()
{UNSIGNED INT I;
I=255;
WHILE(I--)
  TM() ;
}

請查一下PIC12F509的Stack深度是否滿足函數的兩級調用.
0
回復
xyx911
LV.7
3
2007-06-01 09:06
@whatcall
看你的用法可知PIC12F509沒有定時器的中斷功能.既然Delay()會過長影響你的計數檢查,為何不把TM()放到DELAY()中,此時注意DELAY的延時增加(指令多了不少),如下:VOIDDELAY(){UNSIGNEDINTI;I=255;WHILE(I--)  TM();}請查一下PIC12F509的Stack深度是否滿足函數的兩級調用.
關鍵是PIC12F509最多支持兩層嵌套,所以不能把TMR0的計數子程序加入DELAY()中,如果直接寫進去呢,如:
DELAY()
{UNSIGNED INT I;
WHILE(I--)
{ IF (TMR0>250)
    COUNT++;
  IF (COUNT>250)/計數值到一秒跳出
    I=0;
}
}
這樣會不會影響DELAY()延時的精度?
如采用509的內部晶振方式,有一個OSCCAL參數值校正,每個芯片都要在燒錄前先讀取數值嗎?如不用的話如何校準TMR0的值?(官方的資料說509的內部晶振誤差在5%)
0
回復
主站蜘蛛池模板: 堆龙德庆县| 九江市| 云南省| 万山特区| 潼关县| 南投县| 万全县| 西贡区| 辽宁省| 新民市| 灌云县| 罗源县| 南投市| 库尔勒市| 平陆县| 柞水县| 潮州市| 巴林右旗| 阜城县| 上林县| 田东县| 翁牛特旗| 茌平县| 班玛县| 长垣县| 武功县| 南昌县| 丹江口市| 师宗县| 丰顺县| 红河县| 横山县| 峡江县| 诸城市| 莱阳市| 汶川县| 康乐县| 吉林省| 偃师市| 安丘市| 泽州县|