導航:首頁 > 操作系統 > 單片機延時1s

單片機延時1s

發布時間:2022-04-19 10:09:04

① 51單片機延時一秒函數,晶振12MHZ

我這有個函數自己實驗出來的,在KEIL里看差不多就是延時1毫秒
void delay1ms(unsigned int t)
{
unsigned x,y;
for(x=t;x>0;x--)
for(y=124;y>0;y--);
}

把t 改為你要延時的數就可以了,1毫秒就把t改為1 500毫秒就把t改為500

② 單片機1S延時程序

晶振是12M,對於MC-51系統的單片機來說,一個機器周期是1us。
…………………………
MOV R0,#100
LOOP1: MOV R1,#100
LOOP2: MOV R2,#48
DJNZ R2,$
NOP
DJNZ R1,LOOP2
DJNZ R0,LOOP1
…………………………
[(2*48+4)*100+3]*100+1=1000301(個機器周期)即1.000301秒定時。

③ AT89C51單片機,如何實現延遲一秒

其實可以用C語言實現的,先要定義好定時器的初值
不管你使用多大的晶振,使用51單片機,一般都是12分頻出來,也就可以得出一個機器周期
機器周期=12/n(n指晶振頻率),假設你要定時的時間為M
那麼定時的初值為:
M/機器周期=初值;
TH0=(65536-初值)%256;
TL0=(65536-初值)/256;
將(65536-初值)所得的值化成16進制,其高位就是TH0的值,低位為TL0的值
例如用12M晶振做1ms定時計算如下:
機器周期=12/12*10^6=1us(微秒)
定時初值=(1*10^-3)/(1*10^-6)=1000;
所以:TH0=(65536-1000)%256;
TL0=(65536-1000)/256;
將65536-1000=64536化為16進制為:0xFC18
TH0=0xFC;
TL0=0X18;
定好初值後要延遲一秒就定一個延時參數,這里使用1000就行了(定時為1ms)中斷程序為:
timer0() interrupt 1 // 1ms延時(12.0MHz)
{
TR0=0;
ET0=0;
TH0=0xfc;
TL0=0x18;
if(delayTimes1!=0) delayTimes1--;
TR0=1;
ET0=1;
}
調用程序大致為:
if(delay_flag==0)
{
delay_flag=1;
delayTimes1=1000;
}
if(delayTimes1==0)
{
delay_flag=0;
這里寫定時到的操作就行了;
}

(在主程序中使用delay_ms()這樣的程序會影響程序運行速度的,使用中斷就不會)

④ 51單片機中,定時器怎麼做延時函數用,比如說,要精確延時1s,該怎麼寫

unsigned long TimeTickCount;//1ms計時器
void Timer0Configuration();
void Delay1ms(unsigned int a);
void main()

{
while(1)
{
Delay1ms(1000);//1s延時;
}
}
void Delay1ms(unsigned int a)//0~65535
{
unsigned long b;//0~0xffffffff
b = TimeTickCount;//記下及時器初始值
while((TimeTickCount-b<a)||(0xffffffff+TimeTickCount-b<a));
//當計數器未溢出只須用 計數器實時變化的值-其初始值
//當計數器溢出則須用 計時器上限值+計數器實時變化的值-其初始值
}
void Timer1Configuration()
{
TMOD=0X10;//選擇為定時器模式,工作方式1。
TH1=0Xfc; //給定時器賦初值,定時1000us
TL1=0X18;
ET1=1;//打開定時器1中斷允許
EA=1;//打開總中斷
TR1=1;//打開定時器
}
void interrupt_timer1() interrupt 3 //1000us
{
TH1 = 0xfc; //重裝
TL1 = 0x18;
TimeTickCount++;//1000us計時器
}

⑤ 單片機編寫一個能延時1秒的子程序

通用辦法,可以類推:

DELAY1s:
MOVR5,#08H;∵1s=1000000us
MOVR6,#0A2H;∴1000000/2=500000
MOVR7,#20H;500000用16進製表示為:07A120
;所以R5=07H+1=08H
;R6=0A1H+1=0A2H
;R7=20H
loop:DJNZR7,$;延時時間≈2×[(R5-1)×256+R6-1]×256+R7
DJNZR6,loop;當R5、R6等於0,相當於256參與運算
DJNZR5,loop;當R5、R6等於0,相當於256參與運算
RET

⑥ 請問在單片機C語言編程中,用delay延遲的話,1秒程序是什麼單片機晶振為12MHZ

在Keil里模擬的話,在配置里把晶振調成12MHz,然後在調用delay函數的地方設置一個斷點,開始調試程序,運行到斷點處,注意程序左邊有一個記錄當前寄存器和一些狀態的窗口,其中,裡面有一個是專門記錄當前運行了多少時間的變數,記下當前時間T1,然後按F10(不進入子函數)調試,再記錄當前時間T2,則延時=T2-T1。多試幾個A,差不多調到1s就夠了。我一般都這么調。
你要想明白其中原理,想自己算的話,你就看看delay的匯編代碼段自己算吧。

⑦ 單片機延時一秒的c程序

void
delay(unsigned
int
k)
{
unsigned
int
i,j;
for
(i=0;<k;i++)
{
for
(j=0;j<121;j++)
{;}
}
}
/*
取k=3000
*/
或者你可以用keil
自設一個延時函數,一直調試到你所需要的時間為止

⑧ 51單片機用匯編語言設計1S延時子程序,晶振為12MHz。 (麻煩附上詳細計算過程以及詳細說明,

如果單純延時,可以用實驗的辦法,在keilc51裡面模擬
void Delay1S(char n)
{
char i,j;
n=n*4;
for(;n;n--)
{
for(i=6;i;i++)
{
for(j=7;j;j++) // 一個循環約為1mS
;
}
}
}

編譯後的匯編:
C:0x0805 7D01 MOV R5,#0x06;j=1,1時鍾
C:0x0807 0D INC R5;j++,1時鍾
C:0x0808 ED MOV A,R5;A=R5,1時鍾
C:0x0809 70FC JNZ C:0807;A=0?,2時鍾
循環共249次,一個循環共需4個時鍾周期,加上第一個賦值語句1周期。
共997uS,加上外層循環,一次約1mS,
如果要精確的延時建議採用中斷:
#include "reg51.h"
//timer init
void initTimer(void)
{
TMOD=0x2;
TH0=0x6;
TL0=0x6;
}
int T250uS;
char T_mark;
//timer0/counter0 interrupt
void timer0(void) interrupt 1
{
//add your code here.
T250uS++;
T_mark=0;
}
void Delay1S(char n)
{
for(;n;n--)
for(T250uS=0;T250uS<4000;)
{
T_mark=1;
while(T_mark);
}
}
//the main fun
void main(void)
{
initTimer();
TR0=1;
ET0=1;
EA=1;
while(1)
{
Delay1S(1);
}
}

⑨ 怎麼把單片機的數字電子鍾延時1s

大哥,一般都不像你這樣寫的呀!
void delay10ms(int x)
{ int i,j; // 聲明變數
for (i=1;i<x;i++) // 執行x次,延遲X*10ms
for (j=1;j<1200;j++);// 執行120次,延遲10ms
} // delay1ms()函數結束
如果你的延時精度要求不高,調用delay10ms(100)約1s就可以了呀。如果你的延時要求精度高的話,用51內部的定時器。

⑩ 設單片機晶振頻率為12MHZ,試編寫一延時1s的子程序

//----假設,系統工作於
12mhz/12t的傳統51單片機下.#include
<reg51.h>
sbit
test
=
p1^0;
void
delay_50ms(unsigned
char
times)
{
while(times
--
)
{
th0
=
0x3c;
//----裝入初值,定時器0定時50ms
tl0
=
0xb0;
tr0
=
1;
//-----啟動定時器
while(!tf0);
//-----等等定時時間到達
tf0
=
0;
//-----清零定時到達標志
}
}
void
delay_1s(unsigned
char
times)
{
while(times
--
)
{
delay_50ms(20);
}
}
void
main(void)
{
tmod
=
0x01;
//----定時器0工作於方式1
while(1)
{
delay_1s(2);
test
=
~test;
}
}

閱讀全文

與單片機延時1s相關的資料

熱點內容
單片機的反向編譯 瀏覽:463
subsample演算法 瀏覽:897
蘋果免費看書app哪個最好 瀏覽:883
c語言加密怎麼弄 瀏覽:840
c語言編譯的錯誤提示 瀏覽:765
驗機蘋果app哪個最好 瀏覽:666
光遇國際服安卓如何購買禮包 瀏覽:53
163app怎麼下載 瀏覽:245
電腦程序員下場 瀏覽:45
編譯原理ll1文法判斷 瀏覽:727
qt用vs2015編譯 瀏覽:551
結婚日子最好的演算法 瀏覽:794
安卓怎麼把數據傳到蘋果里 瀏覽:502
編譯器標識 瀏覽:790
編程珠璣第三章 瀏覽:785
windows如何開啟tftp伺服器 瀏覽:109
歐姆龍plc編程指令表 瀏覽:187
程序員遠程收入不穩定 瀏覽:861
演算法原理怎麼寫 瀏覽:470
有個動漫女主藍頭發是程序員 瀏覽:1001