每一遍,如果是1us,才能是延時(shí)約1s。但是,晶振是12MHz,一條匯編的指令就至少是1us,C語(yǔ)言的語(yǔ)句,就要更多。
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),萬(wàn)安企業(yè)網(wǎng)站建設(shè),萬(wàn)安品牌網(wǎng)站建設(shè),網(wǎng)站定制,萬(wàn)安網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,萬(wàn)安網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
記下當(dāng)前時(shí)間T1,然后按F10(不進(jìn)入子函數(shù))調(diào)試,再記錄當(dāng)前時(shí)間T2,則延時(shí)=T2-T1。多試幾個(gè)A,差不多調(diào)到1s就夠了。我一般都這么調(diào)。你要想明白其中原理,想自己算的話,你就看看delay的匯編代碼段自己算吧。
void main(){ TMOD=0x00;TH1=0x3c;TL1=0xb0;EA=1;ET1=1;TR1=1;while(1){ if(i==20){ i=0;//下面寫你要處理的的其他程序,你只要了定時(shí)1s。
然后,進(jìn)行宏定義,代碼如圖所示。然后聲明P1口,如下圖所示。最后,將延時(shí)語(yǔ)句全部添加進(jìn)去,代碼按照?qǐng)D中所示的直接敲入即可。最后,點(diǎn)擊編譯,生成HEX文件就可以了,這樣51單片機(jī)延時(shí)語(yǔ)句就完成了。
51單片機(jī)12M晶振延時(shí)1us,只需要執(zhí)行一個(gè)NOP就是了。C語(yǔ)言中也是如此。
這樣初始化就沒(méi)問(wèn)題了,另外要實(shí)現(xiàn)1S延時(shí),需要在中斷函數(shù)里加個(gè)變量自增,因?yàn)槲叶x的是50ms中斷一次,那么這個(gè)變量值自增到20后就代表1s時(shí)間到,清零這個(gè)變量之后方可寫你的服務(wù)程序。希望我的回答能幫助到你。
51單片機(jī)晶振12MHz軟件延時(shí)1秒程序:DELAY:MOV R7,#500 D1:MOV R6,#250 D2:NOP NOPNOPNOPNOPNOPDJNZ R6,D2 DJNZ R7,D1 .以上程序?yàn)楹文芏〞r(shí)1秒? 請(qǐng)閱附件。
應(yīng)該是 12MHz 吧?單片機(jī)內(nèi)部,計(jì)時(shí)的單位是《機(jī)器周期T》。
12MHz頻率,延遲1us,是不可能的。就是調(diào)用函數(shù)、什么也不干、馬上就返回,也不止 4us。
執(zhí)行空語(yǔ)句執(zhí)行124次,大概就能延時(shí)到1秒.不是很準(zhǔn)的.經(jīng)驗(yàn)值。
先打開(kāi)我們熟悉的單片機(jī)c51編程軟件——keil,先把主方法寫好。然后,我們要定義兩個(gè)變量。接著,設(shè)定好定時(shí)器的工作方式。設(shè)置中斷發(fā)生的機(jī)制。最后,我們要加進(jìn)這幾行代碼進(jìn)行初值的重裝。
j=t*100;這一句了,如果把這一句給刪了,那么你的程序就是延時(shí)100ms的,delay(10)就是延時(shí)一秒。
要延時(shí)1s就是要執(zhí)行1000000個(gè)機(jī)器周期,我們要進(jìn)行3層循環(huán),因此記每層循環(huán)要執(zhí)行100次,但是這樣會(huì)使延時(shí)大于1000000個(gè)機(jī)器周期。
調(diào)用延時(shí)程序期間,單片機(jī)什么事都不做,一直占著單片機(jī) 使用定時(shí)器中斷定時(shí),單片機(jī)還可以做其他事,比如:掃面鍵盤、調(diào)用顯示程序。