熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2023-5-18 01:20
正文摘要:一:問題描述 按照文中單片機(jī)代碼編譯下載后,P1口LED不閃爍,一直亮。然后通過Keil uVision5軟件仿真,延時(shí)時(shí)間也不是期望的0.5s。請大家?guī)臀铱纯词窃趺椿厥拢? 二:硬件環(huán)境 STC12C2052AD //12MHz ... |
ydatou 發(fā)表于 2023-5-19 09:14 ![]() ![]() |
tongguan123 發(fā)表于 2023-5-19 11:42 ![]() |
wulin 發(fā)表于 2023-5-19 12:13 ![]() |
好久沒用51了,圍觀一下 |
tongguan123 發(fā)表于 2023-5-19 11:40 這個(gè)程序在實(shí)物上運(yùn)行沒有任何問題,AUXR &= 0x7F;也可以省略,其默認(rèn)就是12T。Keil軟件仿真STC1T單片機(jī)結(jié)果不一定符合實(shí)際。 |
STC12C2052AD應(yīng)該是1T單片機(jī)吧,計(jì)數(shù)初值搞錯(cuò)了 |
yzwzfyz 發(fā)表于 2023-5-19 09:28 1:定時(shí)功能的計(jì)數(shù)脈沖選擇的是內(nèi)部時(shí)鐘(或分頻、或不分頻)得到; 計(jì)數(shù)功能的計(jì)數(shù)脈沖當(dāng)然是外部脈沖信號了。 2:定時(shí)器0的計(jì)數(shù)溢出標(biāo)志位TF0在計(jì)數(shù)溢出后,如果要產(chǎn)生延時(shí),需要軟件清零,然后再定義個(gè)循環(huán)變量,達(dá)到延時(shí)效果。 |
ydatou 發(fā)表于 2023-5-19 09:14 你以前處理過類似的問題嗎? |
lkc8210 發(fā)表于 2023-5-19 10:09 ![]() |
ydatou 發(fā)表于 2023-5-19 09:14 |
可能是Keil對STC12的速度有點(diǎn)誤會 設(shè)定500ms,仿真125ms,快了4倍 把12M改為3Mhz就行了 |
1、定時(shí)器的時(shí)鐘源是晶振,所以需以根據(jù)晶振的頻率不計(jì)算時(shí)間常數(shù)。 2、while(TF0 != 1); 是等待計(jì)數(shù)溢出位TF=1,是可以等到的,但它不會自動(dòng)清0,也即從此后一直為1。因?yàn)橐院蟮膚hile(TF0 != 1)會被路過。 3、是外話。這種程序方式延時(shí),嚴(yán)重占用CPU資源,與DELAY并無二樣,失去了定時(shí)器的設(shè)計(jì)初衷。 4、較好的做法是,將時(shí)常數(shù)計(jì)算并設(shè)計(jì)到5ms,起動(dòng)中斷。如此每5ms產(chǎn)生一次中斷,在中斷服務(wù)中做個(gè)標(biāo)記B5MS。主程序憑B5MS標(biāo)記處理事件,完成后清除B5MS標(biāo)記。如果處理的事件用時(shí)不長,如僅開關(guān)一個(gè)燈�?梢圆挥肂5MS標(biāo)記,而直接在中斷服務(wù)程序中處理。 |
tongguan123 發(fā)表于 2023-5-18 18:41 樓主這個(gè)定時(shí)器用法是哪個(gè)老師教的?
|
頂啥呢,有時(shí)間幫我看看嘍,分析一下,我是真沒轍了。先感謝一下!![]() |
頂一下 |
Powered by 單片機(jī)教程網(wǎng)