單片機(jī)延時(shí)問(wèn)題20問(wèn)
14、一個(gè)單片機(jī)延時(shí)子程序的問(wèn)題,在延時(shí)子程序那里,一直搞不明白,給r7和r6賦予0,然后下面的djnz r7,delayloop不就一直循環(huán)了,那還怎么接下去的程序?
org 0000h
ljmp start
org 0030h
start: mov a,#0feh
mov r5,#8
output: mov p1,a
rl a
call delay
djnz r5,output
ljmp start
delay: mov r6,#0
mov r7,#0
delayloop:djnz r7,delayloop
djnz r6,delayloop
ret
end
答: 你的延時(shí)程序不是因?yàn)橹禐?,而是跳轉(zhuǎn)位置不對(duì),改為如下:
delay: mov r6,#0
delayloop:mov r7,#0
:djnz r7,$
djnz r6,delayloop
ret
R7,R6初值為0,但是當(dāng)DJNZ執(zhí)行時(shí),這條指令是先減1再判斷,所以0-1=255,判斷的話(huà)也不為0,仍然循環(huán)256次。
0-1=255的解釋?zhuān)?P>0000 0000
- 0000 0001
-------------------------
1111
15、我想提兩個(gè)單片機(jī)延時(shí)與按鍵的問(wèn)題
1:如果一個(gè)程序中延時(shí)和按鍵,如果延時(shí)子程序比較長(zhǎng)(假如2秒),怎樣確保按鍵能夠得到及時(shí)響應(yīng)(假如PC正在執(zhí)行延時(shí)子程序,正在這時(shí)候有按鍵輸入,不是響應(yīng)不了)——,,,前提是不能用定時(shí)器定時(shí)掃描,和中斷來(lái)做,因?yàn)槎〞r(shí)器和中斷我另有其他用途
2:?jiǎn)纹瑱C(jī)沒(méi)有串口。怎樣才能使得他與24C02進(jìn)行通信(24C02是具有2K內(nèi)存的EEPROM)
答:
首先明確一點(diǎn)你說(shuō)單片機(jī)沒(méi)有串口,應(yīng)該是指沒(méi)有I2C口吧。
1 在延時(shí)程序里面加入按鍵的檢測(cè)
2 用IO口模擬I2C時(shí)序讀寫(xiě)
16、51單片機(jī)延時(shí)小程序,求高手解釋什么意思?
delay200ms:
mov r2,#82
l0:mov r1,#116
l1:mov r0,#9
djnz r0,$
djnz r1,l1
djnz r2,l0
ret
答:以下是每條指令的時(shí)間,T為一個(gè)機(jī)器周期
delay200ms:
mov r2,#82;1T
l0:mov r1,#116;1T
l1:mov r0,#9;1T
djnz r0,$;2T
djnz r1,l1;2T
djnz r2,l0;2T
ret;2T
以上共三層循環(huán),忽略部分指令,最簡(jiǎn)單算法是:
2*9*116*82=171216
不忽略指令是:
1+(1+(1+2*9+2)*116+2)*82+2=200001
因此延時(shí)時(shí)間大約為200ms
17、于51單片機(jī)延遲時(shí)間的問(wèn)題
uchar i;i--;
uint i;i--;
這兩條語(yǔ)句在12M晶振下運(yùn)行時(shí)間分別是多少??
答:一個(gè)時(shí)鐘周期,2us,共4us
18、周期為6MHZ的單片機(jī)延時(shí)10秒的子程序的怎么編?
答:/****************************************
* 名稱(chēng) : Delay()
* 功能 : 延時(shí),延時(shí)時(shí)間為 10ms * del。這是通過(guò)軟件延時(shí),有一定誤差。
* 輸入 : del
* 輸出 : 無(wú)
**********************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i
for(j=0; j1827; j++) //這個(gè)是通過(guò)軟件仿真得出的數(shù)
;
}
這個(gè)是晶振為12mhz的單片機(jī)延時(shí)10ms的程序,你只要在這個(gè)基礎(chǔ)上減小一倍就行了,當(dāng)然至于具體值還是要調(diào)試下的。
19、片機(jī)的有些程序需要調(diào)用延時(shí)程序,如何能合理的安排循環(huán)次數(shù)以及空操作的個(gè)數(shù)?
答:用匯編的話(huà)就根據(jù)你的當(dāng)前晶振頻率去推算你的指令周期,然后結(jié)合你需要延遲的時(shí)間,編寫(xiě)延遲程序,用C的話(huà)還是要看最后生成的匯編碼是什么樣的了。最簡(jiǎn)單的方法就是寫(xiě)好程序以后再編譯器里軟仿真看時(shí)間。贊同2| 評(píng)論(1)
20、單片機(jī)延時(shí)程序問(wèn)題
延時(shí)程序 void delay(uint dt)
{
uchar bt;
for(;dt;dt--);
for(bt=0;bt255;bt++);
}
編譯時(shí)有警告C:DOCUMENTS AND SETTINGSADMINISTRATOR桌面字 310 點(diǎn)陣LED顯示.C(46): warning C235: parameter 1: different types
為什么?求大俠指點(diǎn)
答:某個(gè)函數(shù)傳參類(lèi)型與聲明類(lèi)型不符。
另外你這個(gè)for(;dt;dt--);沒(méi)有起到外層循環(huán)的作用……
51單片機(jī)相關(guān)文章:51單片機(jī)教程
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
單片機(jī)相關(guān)文章:單片機(jī)教程
單片機(jī)相關(guān)文章:單片機(jī)視頻教程
單片機(jī)相關(guān)文章:單片機(jī)工作原理
晶振相關(guān)文章:晶振原理
評(píng)論