日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當(dāng)前位置:首頁 >> 技術(shù)中心 >> 單片機(jī)入門 >> 單片機(jī)延時(shí)問題20問

單片機(jī)延時(shí)問題20問

關(guān)鍵字:單片機(jī) 延時(shí) 作者:admin 來源:不詳 發(fā)布時(shí)間:2018-05-19  瀏覽:2
延時(shí)與中斷出錯(cuò),是單片機(jī)新手在單片機(jī)開發(fā)應(yīng)用過程中,經(jīng)常會(huì)遇到的問題,本文匯總整理了包含了MCS-51系列單片機(jī)、MSP430單片機(jī)、C51單片機(jī)、8051F的單片機(jī)、avr單片機(jī)、STC89C52、PIC單片機(jī)…..在內(nèi)的各種單片機(jī)常見的延時(shí)與中斷問題及解決方法,希望對(duì)單片機(jī)新手們,有所幫助!


擴(kuò)展閱讀:單片機(jī)延時(shí)程序分析


1、單片機(jī)延時(shí)程序的延時(shí)時(shí)間怎么算的?


答:如果用循環(huán)語句實(shí)現(xiàn)的循環(huán),沒法計(jì)算,但是可以通過軟件仿真看到具體時(shí)間,但是一般精精確延時(shí)是沒法用循環(huán)語句實(shí)現(xiàn)的。


如果想精確延時(shí),一般需要用到定時(shí)器,延時(shí)時(shí)間與晶振有關(guān)系,單片機(jī)系統(tǒng)一般常選用11.059 2 MHz、12 MHz或6 MHz晶振。第一種更容易產(chǎn)生各種標(biāo)準(zhǔn)的波特率,后兩種的一個(gè)機(jī)器周期分別為1 μs和2 μs,便于精確延時(shí)。本程序中假設(shè)使用頻率為12 MHz的晶振。最長的延時(shí)時(shí)間可達(dá)216=65 536 μs。若定時(shí)器工作在方式2,則可實(shí)現(xiàn)極短時(shí)間的精確延時(shí);如使用其他定時(shí)方式,則要考慮重裝定時(shí)初值的時(shí)間(重裝定時(shí)器初值占用2個(gè)機(jī)器周期)。


2、求個(gè)單片機(jī)89S51 12M晶振 用定時(shí)器延時(shí)10分鐘,控制1個(gè)燈就可以


答:可以設(shè)50ms中斷一次,定時(shí)初值,TH0=0x3c、TL0=0xb0。中斷20次為1S,10分鐘的話,需中斷12000次。計(jì)12000次后,給一IO口一個(gè)低電平(如功率不夠,可再加擴(kuò)展),就可控制燈了。


而且還要看你用什么語言計(jì)算了,匯編延時(shí)準(zhǔn)確,知道單片機(jī)工作周期和循環(huán)次數(shù)即可算出,但不具有可移植性,在不同種類單片機(jī)中,匯編不通用。用c的話,由于各種軟件執(zhí)行效率不一樣,不會(huì)太準(zhǔn),通常用定時(shí)器做延時(shí)或做一個(gè)不準(zhǔn)確的延時(shí),延時(shí)短的話,在c中使用匯編的nop做延時(shí)


3、51單片機(jī)C語言for循環(huán)延時(shí)程序時(shí)間計(jì)算 ,設(shè)晶振12MHz,即一個(gè)機(jī)器周期是1us。


for(i=0,i<100;i++)


for(j=0,j<100;j++)


我覺得時(shí)間是100*100*1us=10ms,怎么會(huì)是100ms


答:


不可能的,是不是你的編譯有錯(cuò)的啊


我改的晶振12M,在KEIL 4.0 里面編譯的,為你得出的結(jié)果最大也就是40ms,這是軟件的原因,


不可能出現(xiàn)100ms那么大的差距,是你的軟件的原因。


不信你實(shí)際編寫一個(gè)秒鐘,利用原理計(jì)算編寫一個(gè)燒進(jìn)單片機(jī)和利用軟件測(cè)試的秒程序燒進(jìn)單片機(jī),你會(huì)發(fā)現(xiàn)原理計(jì)算的程序是正確的


4 、51單片機(jī)c語言 _nop_()是一個(gè)空指令?短時(shí)間延時(shí)的?空幾個(gè)機(jī)器周期?


答:這個(gè)_nop_()等效與匯編里面的,NOP指令,也就是空一個(gè)機(jī)器周期,如果是傳統(tǒng)51單片機(jī)的話,等于空12個(gè)時(shí)鐘周期【即一個(gè)機(jī)器周期】


5、51單片機(jī) 延時(shí)500ms 用機(jī)器周期疊加怎么算?


答:DELAY:


MOV R7,#4


D2:MOV R6,#250


D1:MOV R5,#250


DJNZ R5,$


DJNZ R6,D1


DJNZ R7,D2


RET


假設(shè)晶振為12MHz


剛延時(shí)時(shí)間為:


250*250*4*2=500MS


6、51單片機(jī)C語言程序中延時(shí)函數(shù)delay的原理是什么?


現(xiàn)在找到兩個(gè)函數(shù)


第一:


void delay(void)


{ unsigned int i,j;


for(i=0;i<500;i++)


{ for(j=0;j<121;j++)


{;}


}


}


第二:


void delay(unsigned int k)


{ unsigned int i,j;


for(i=0;i


{ for(j=0;j<121;j++)


{;}


}


}


現(xiàn)有幾個(gè)疑問:


(1):延時(shí)函數(shù)的原理?


(2):兩個(gè)for循環(huán)的作用?


(3):i、j的取值有什么規(guī)律和依據(jù)?是不是和單片機(jī)接的晶振頻率有關(guān)?所能延時(shí)的最小單位時(shí)間是怎么計(jì)算的?


延時(shí)時(shí)間怎么計(jì)算啊!假如用的是AT89C51RC+11.0592M的晶振呢?


答:


1:原理:僅僅執(zhí)行一些,沒有實(shí)質(zhì)性影響的所謂“無意義指令”,比如做比大小啊,做某個(gè)int的自加運(yùn)算啊之類的


2:兩重for的作用:簡單的說,就像高中數(shù)學(xué)中的“乘法原理”一樣,這樣可以很輕易的迅速增加上述“無意義指令”的數(shù)目


3:關(guān)于取值大。哼@個(gè)如果是在C下變成,這個(gè)值不僅僅與晶振、單片機(jī)本身運(yùn)算速度有關(guān),而且還與C的編譯器有關(guān),所以說,這個(gè)值雖說是可以精確計(jì)算的,但大多數(shù)情況下,程序員用的都是“經(jīng)驗(yàn)值”——當(dāng)然,如果用匯編編程,情況就不一樣了,因?yàn)槊恳粭l指令所使用的機(jī)器周期是一定的,你當(dāng)然可以根據(jù)所有指令使用的總時(shí)間,精確的算出具體延時(shí)的總時(shí)間


綜合你的的問題,我給你一點(diǎn)建議,就是剛學(xué)單片機(jī)的時(shí)候,還是一定要老老實(shí)實(shí)的從匯編編程學(xué)起——這樣,在你以后接觸到C之后,你才能明白,這中間實(shí)際上經(jīng)歷了一個(gè)什么樣的過程,只有這樣你才能真正理解單片機(jī)。當(dāng)然,等最終你完全拿下一種單片機(jī)之后,盡量使用C編程,無疑是歷史所肯定的。


7、51單片機(jī),晶振為6M,求一個(gè)10ms的延時(shí)程序


答:延時(shí)有很多種方法,有一種是讓單片機(jī)去做無聊的循環(huán),還有一種是用定時(shí)器。


第一種的算法是:


晶振的周期T1=1/f; 這里f=6MHz 所以T1=1/6 us;(微秒)


單片機(jī)花12個(gè)T1去執(zhí)行一個(gè)指令,


所以一個(gè)機(jī)器周期等于12個(gè)晶振周期,


T2=12*T1=2us


10ms=1000 0us


所以你要得到10ms的延時(shí)就要想辦法讓機(jī)器去做5000條“無聊的指令”


所以


DEL: MOV R5,#05H


F1: MOV R6,#05H


F2: MOV R7,#32H


F3: DJNZ R7,F3


DJNZ R6,F2


DJNZ R5,F1


RET


這種方法是用于對(duì)時(shí)間要求不高的地方,我說的是其思想,程序中可能有錯(cuò)的地方


用定時(shí)器的方法我不太會(huì)就不誤人了 (補(bǔ)充一下就是這個(gè)是用匯編寫的,你在主程序中用ACALL DEL調(diào)用就延時(shí)了。


8、今天我用單片機(jī)做“眨眼的LED”實(shí)驗(yàn)時(shí),程序運(yùn)行,每次只令燈亮或滅都沒問題,但是一開延時(shí)不能出現(xiàn)期盼的燈亮燈滅的現(xiàn)象,這是怎么回事?


實(shí)驗(yàn)的硬件條件是:STC89C52,編譯環(huán)境:keil 3。


下面是我寫的程序,請(qǐng)教高手!!!


#include // 文件包含處理

編輯:admin  最后修改時(shí)間:2018-05-22

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號(hào)-4

栾城县| 望奎县| 馆陶县| 永和县| 九龙坡区| 明溪县| 鄢陵县| 西峡县| 武城县| 芜湖县| 九台市| 子长县| 云林县| 耒阳市| 苏尼特右旗| 湘阴县| 五常市| 都安| 新丰县| 甘孜县| 绥芬河市| 西吉县| 客服| 潮州市| 易门县| 宁化县| 镇赉县| 昆山市| 五常市| 长春市| 蛟河市| 玉龙| 德令哈市| 顺昌县| 吴江市| 卢龙县| 北川| 犍为县| 从化市| 丰县| 西贡区|