性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

關(guān)于PIC12F509的定時(shí)計(jì)數(shù)器的問題

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

按照4MS*250=1S則程序?qū)崿F(xiàn)的是1秒的計(jì)時(shí).
但如果在下面程序的情況下:
...
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();}}
會(huì)出現(xiàn)因?yàn)镈ELAY的時(shí)間長(zhǎng)而忽略掉某個(gè)TMR0的溢出,從而使得SECOND的定時(shí)出現(xiàn)誤差,這種情況下應(yīng)該如何處理?特別是當(dāng)這個(gè)DELAY()必須的時(shí)候.
全部回復(fù)(2)
正序查看
倒序查看
whatcall
LV.5
2
2007-05-31 23:34
看你的用法可知PIC12F509沒有定時(shí)器的中斷功能.
既然Delay()會(huì)過長(zhǎng)影響你的計(jì)數(shù)檢查,為何不把TM()放到DELAY()中,此時(shí)注意DELAY的延時(shí)增加(指令多了不少),如下:

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

請(qǐng)查一下PIC12F509的Stack深度是否滿足函數(shù)的兩級(jí)調(diào)用.
0
回復(fù)
xyx911
LV.7
3
2007-06-01 09:06
@whatcall
看你的用法可知PIC12F509沒有定時(shí)器的中斷功能.既然Delay()會(huì)過長(zhǎng)影響你的計(jì)數(shù)檢查,為何不把TM()放到DELAY()中,此時(shí)注意DELAY的延時(shí)增加(指令多了不少),如下:VOIDDELAY(){UNSIGNEDINTI;I=255;WHILE(I--)  TM();}請(qǐng)查一下PIC12F509的Stack深度是否滿足函數(shù)的兩級(jí)調(diào)用.
關(guān)鍵是PIC12F509最多支持兩層嵌套,所以不能把TMR0的計(jì)數(shù)子程序加入DELAY()中,如果直接寫進(jìn)去呢,如:
DELAY()
{UNSIGNED INT I;
WHILE(I--)
{ IF (TMR0>250)
    COUNT++;
  IF (COUNT>250)/計(jì)數(shù)值到一秒跳出
    I=0;
}
}
這樣會(huì)不會(huì)影響DELAY()延時(shí)的精度?
如采用509的內(nèi)部晶振方式,有一個(gè)OSCCAL參數(shù)值校正,每個(gè)芯片都要在燒錄前先讀取數(shù)值嗎?如不用的話如何校準(zhǔn)TMR0的值?(官方的資料說509的內(nèi)部晶振誤差在5%)
0
回復(fù)
發(fā)