推 maxlighter:可以去看一下進出中斷的ASM碼 06/27 18:13
→ shaoweei:看了一下 T0_int的函數也只有30行左右@@應該也不用上百 06/27 18:38
→ shaoweei:微秒 06/27 18:38
Hi All:
後來我在計時中斷時關閉UART中斷,tv參數就可以小到100以下了
void delay100us(int count1) //計時設定副程式
{
x1ms = count1;
IE = 0x82;
TMOD = 0x01;
TH0 = TH;
TL0 = TL;
TR0 = 1;
while(x1ms != 0);
IE = 0x92; //打開UART中斷
TMOD = 0x21;
}
delayL我另外開一個單純的project就正常了...應該也是UART設定的問題....
※ 編輯: shaoweei 來自: 42.70.50.235 (06/27 19:11)
推 ksmrt0123:要設定timer除數要用算的不應用量的. 你要100uS(=10KHz) 06/30 00:14
→ ksmrt0123:所以從XTAL要除3000, 所以timer要除250 06/30 00:15
→ ksmrt0123:既然timer只需除250, 用mode2(auto reload)比較好 06/30 00:18
→ ksmrt0123:另建議是把stpm的控制直接放在timer isr內作掉就好 06/30 00:19
推 WolfLord:他的問題只在於忘記把TIMER的PR提高而已啦 XD 06/30 02:51
推 lion21:建議可以換 1T的相容產品 . 06/30 03:09
→ WolfLord:@Lion21 UART 跟TIMER ISR優先權不解決用0.5T/133MHZ 06/30 05:41
→ WolfLord:也是無法解決時間會飄的問題.... 06/30 05:41
推 ksmrt0123:光改timer isr priority沒用, 因為在stpm兩個steps間 06/30 20:49
→ ksmrt0123:uart interrupt還是會發生 06/30 20:49
→ WolfLord:TIME優先下在TIMER時不會發生UART,在UART會發生TIMER 06/30 22:24
→ WolfLord:所以TIMER只要扣除ISR進入的時間就可以穩定執行了。 06/30 22:24
→ WolfLord:反過來,TIMER內會有UART或UART跟TIMER競爭TIMER就會飄 06/30 22:25
→ shaoweei:原來如此 受教了>< ~~~~~~ 07/01 01:38
推 ksmrt0123:光改timer int priority沒用, 以原po的 timertest()來說 07/02 00:18
→ ksmrt0123:P2=0xFF與P2=0x00間還是會發生uart int, 造成P2信號輸出 07/02 00:20
→ ksmrt0123:時間受影響 07/02 00:20
推 ksmrt0123:事實上把timer int設高priority只有保證timer isr 07/02 00:23
→ ksmrt0123:不會受到uart的干擾, 所以要把需要精準計時的動作放到 07/02 00:24
→ ksmrt0123:ISR內做 07/02 00:24
→ ksmrt0123:上一段的說法不夠正確... 不過原po的程式只改timer int 07/02 00:51
→ ksmrt0123:priority不夠是肯定的 07/02 00:51
→ shaoweei:多謝k大指點 我再試試把要用的程式一起包到ISR裡面@@ 07/03 20:28