|
發布時間: 2023-5-18 01:20
正文摘要:一:問題描述 按照文中單片機代碼編譯下載后,P1口LED不閃爍,一直亮。然后通過Keil uVision5軟件仿真,延時時間也不是期望的0.5s。請大家幫我看看是怎么回事? 二:硬件環境 STC12C2052AD //12MHz ... |
ydatou 發表于 2023-5-19 09:14 !根據你的方法,問題解決了。再次感謝!![]() |
tongguan123 發表于 2023-5-19 11:42 ![]() |
wulin 發表于 2023-5-19 12:13 ![]() |
| 好久沒用51了,圍觀一下 |
tongguan123 發表于 2023-5-19 11:40 這個程序在實物上運行沒有任何問題,AUXR &= 0x7F;也可以省略,其默認就是12T。Keil軟件仿真STC1T單片機結果不一定符合實際。 |
| STC12C2052AD應該是1T單片機吧,計數初值搞錯了 |
yzwzfyz 發表于 2023-5-19 09:28 1:定時功能的計數脈沖選擇的是內部時鐘(或分頻、或不分頻)得到; 計數功能的計數脈沖當然是外部脈沖信號了。 2:定時器0的計數溢出標志位TF0在計數溢出后,如果要產生延時,需要軟件清零,然后再定義個循環變量,達到延時效果。 |
ydatou 發表于 2023-5-19 09:14 你以前處理過類似的問題嗎? |
lkc8210 發表于 2023-5-19 10:09 ![]() |
ydatou 發表于 2023-5-19 09:14 |
|
可能是Keil對STC12的速度有點誤會 設定500ms,仿真125ms,快了4倍 把12M改為3Mhz就行了 |
|
1、定時器的時鐘源是晶振,所以需以根據晶振的頻率不計算時間常數。 2、while(TF0 != 1); 是等待計數溢出位TF=1,是可以等到的,但它不會自動清0,也即從此后一直為1。因為以后的while(TF0 != 1)會被路過。 3、是外話。這種程序方式延時,嚴重占用CPU資源,與DELAY并無二樣,失去了定時器的設計初衷。 4、較好的做法是,將時常數計算并設計到5ms,起動中斷。如此每5ms產生一次中斷,在中斷服務中做個標記B5MS。主程序憑B5MS標記處理事件,完成后清除B5MS標記。如果處理的事件用時不長,如僅開關一個燈。可以不用B5MS標記,而直接在中斷服務程序中處理。 |
tongguan123 發表于 2023-5-18 18:41 樓主這個定時器用法是哪個老師教的?
|
頂啥呢,有時間幫我看看嘍,分析一下,我是真沒轍了。先感謝一下!![]() |
| 頂一下 |