51微控制器程式出錯不執行定時器中斷1同時delay函式也有錯求高手指點

2022-03-05 15:40:46 字數 2328 閱讀 4739

1樓:匿名使用者

tmod=0x01;

65536-50)%6;

改為tmod=0x11;

65536-50)%256;

只有程式沒有電路原理很難找錯誤

2樓:匿名使用者

可以同時執行兩個定時器

51微控制器程式定時器怎麼這麼不準確啊,求高手指點!

3樓:匿名使用者

這是編譯器造成的,你最好用debug模式看看生成的彙編**是什麼摸樣,比較一下你那三種方 式給th0和tl0賦的是什麼樣的值。

這是我試驗的結果:

4: th0=-780/256;

c:0x0003 758cfd mov th0(0x8c),#0xfd

5: tl0=-780%256;

c:0x0006 758af4 mov tl0(0x8a),#0xf4

6: th0=-516/256;

c:0x0009 758cfe mov th0(0x8c),#0xfe

7: tl0=-516%256;

c:0x000c 758afc mov tl0(0x8a),#0xfc

8: th0=(65536-516)/256;

c:0x000f 758cfd mov th0(0x8c),#0xfd

9: tl0=(65536-516)%256;

c:0x0012 758afc mov tl0(0x8a),#0xfc

看出差別了吧?使用-780時給t0賦值0xfdf4,使用第三種方式賦值為0xfdfc,這兩個數字相近,所以結果基本正確。但是使用-516時賦值的0xfefc,這差別就大了,結果就是不正確。

一般建議用th0=(65536-516)/256 ;tl0=(65536-516)%256;這種方式,保證不出問題。

4樓:七零後走四方

定時器是從小到大計數的,前2個設定是錯誤的。

另外,定時器中斷處理時有時間開銷,如暫存器入棧。尤其是用c編譯器,額外開銷是不可見的。

學習微控制器、cpld,請到「電子設計網dzsj」

5樓:匿名使用者

每條指令也需要時間呀,當然不是516,而是780很正常,你可以減掉這個誤差值呀,

6樓:匿名使用者

用中斷來做,指令也要佔用時間。輪詢會隨機不確定的。

51微控制器,定時器每20ms進中斷,中斷裡執行100ms軟體延時函式,當100ms延時函式執行20

7樓:匿名使用者

首先,你這麼做不科學。

不應在中斷裡進行延時。

回答你的問題,

「定時中斷中執行20ms後應該再次進定時中斷」,在51中,不是這樣的。51內部有記錄中斷服務級別的標誌,每個中斷優先順序有一個標誌,這個標誌使用者程式是看不到的。進行中斷後,對應優先順序的中斷服務狀態標誌自動被置位,同級別的中斷都不再響應,也就是說,定時中斷不會再次進定時中斷,執行reti指令後,這個標誌自動被複位,同級別的中斷才會繼續響應。

假設不是51系統,比如arm,進入中斷後,可以手動允許同級別的中斷繼續響應,這時再次中斷後是延時100ms還是80ms,取決於你的延時程式。如果延時程式的變數是建立在棧上的區域性變數,每次呼叫delay,都會一組新的變數,也就是說,延時每次都是100ms。如果是用的靜態變數,或者全域性變數,則有可能,只延時80ms。

請高手幫忙,51微控制器執行定時器0的中斷程式後,需要大約15秒才能返回主程式斷點處繼續執行? 太奇怪了?

8樓:匿名使用者

不是幾個週期,你在服務程式中有3個延時子程式呼叫,每一個延時如果是12m晶振的話,大約390毫秒,所以返回時間理論上約1.2秒左右。

9樓:匿名使用者

不明白定時中斷子程式裡為什麼要關掉tr0,關掉下次就進不去了。

d0:clr tr0 ;????????????...

10樓:

彙編我有好幾年沒看,看到生疏,或許看錯了,

你的主程式執行完了就等待了,你怎麼檢測它返回主程式了,你在等待這裡做異個訊號出來(可以把中段中的p1.7置0以後延時一下,在主程式等待這裡他把重新置1看看)

看p1.7下降沿,到上升沿的時候歷時多久

51微控制器中TCON定時器控制暫存器的位描述

tcon的作用是控制定時器的啟 停,標誌定時器溢位和中斷情況。tcon的格式如下圖所示。其 回中答,tf1,tr1,tf0和tr0位用於定時器 計數器 ie1,it1,ie0和it0位用於中斷系統。各位定義如下 tf1 定時器1溢位標誌位。當定時器1計滿溢位時,由硬體使tf1置 1 並且申請中斷。進...

51微控制器是如何產生PWM波的。。用定時器中斷如何實現

1 設定一個 io 輸出口dao作為 pwm 輸出2 設定一 回個 可調定時答器 如 定時 250 io輸出 0 定時 5 io輸出 1,高電平 窄 或 定時 5 io輸出 0 定時 250 io輸出 1,高電平 寬 即定時器每中斷一次要重灌定時資料 有的微控制器帶有pwm功能,用定時器實現的方法是...

51微控制器用定時器編的流水燈出了些問題請高手

include reg51.h unsigned char s 0,a 128,count 0 void main void t0 srv interrupt 1 using 1p1 a 或者直接用迴圈左移或迴圈右移 include a cror a,1 迴圈右移 void t0 srv inter...