|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請各位幫忙!使用46R23時遇到很頭痛的問題. |
| 作者:roach_lzq 欄目:嵌入式系統(tǒng) |
用46r23做了一個3位顯示的LED(個位,十位,百位),上電時顯示馬上顯示888。仿真時正常,但燒芯片后遇到兩種情況: 1. 上電后,沒有全部LED不亮,等1至4秒后LED全亮,顯示888。 2. 上電后,只有十位顯示8,個位,百位不顯示。等待1秒或不到1秒LED才全亮,顯示888. 程序如下,采用動態(tài)顯示。 /*初始化*/ void LEDInit(void) { cDispfresh2ms = 0; cDispSeq = 0; } /*主顯示程序*/ void LEDWrite(void) { if(cDispfresh2ms!=0) return; cDispfresh2ms = T2_2MS; /*定時2MS*/ if(++cDispSeq>2) cDispSeq = 0; SWITCH(cDispSeq) { case 0: Write0(); /*點亮個位*/ break; case 1: Write1(); /*點亮十位*/ break; case 2: Write2(); /*點亮百位*/ break; } } /*定時初始化*/ #define TMRC_INIT 0x95 /* 0B10010101 |||||+++---->F_INT = F_SYS/32 ||||+------->TMR active edge of the Timer/Event Counter = 0:active on low to high |||+-------->enable timer counting ||+--------->Unused bits,read as "0" ++---------->Timer mode(internal clock) */ #define TMR_2MS 256-250 void TimerInit(void) { _tmrc = TMRC_INIT; _tmrl = TMR_2MS; _nop(); _nop(); _tmrh = 0xFF; } #pragma vector BaseTimerInt @ 0x08 /*定時中斷程序*/ void BaseTimerInt(void) { if(cDispfresh2ms != 0) cDispfresh2ms --; _eti = 1; } 對于第1點,可能是剛上電時電源不穩(wěn)定,導致程序跑死。由于幾秒后watchdog溢出,使顯示正!,F(xiàn)將watchdog選用16ms 溢出,第1點情況得到解決。但開機時還是只有十位顯示8,個位,十位沒有顯示。等待1秒左右才能全部顯示888,即第2點情況未解決。 對于第2點,懷疑是定時器未能正常工作,導致變量cDispfresh2ms 一直不為0,以至不能寫個位,百位。請問有這種可能嗎?怎么解決?特別注明,仿真時沒有出現(xiàn)第1,2點問題。即開機便顯示888.這問題搞了幾天了,還搞不定,請幫幫忙!謝謝! |
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |