導航:首頁 > 操作系統 > 單片機延時程序

單片機延時程序

發布時間:2022-01-15 05:51:10

『壹』 單片機延時時間程序怎麼編程

舉一個例子來說明吧.比如你要編一個延時50毫秒的子程序,那麼步驟如下:
1、查看一下你的硬體環境,比如晶振大小,CPU型號,不用CPU指令的機器周期是不一樣的。
2、計算延時需要的機器周期。比如採用12M晶振,CPU採用通用8051,那麼一個機器周期為1US,50毫秒為50*1000=50000US,需要的機器周期=50000/1=50000。
3、試編程,如下:

程序代碼 指令時間 總共時間
DELAY50MS: ;2 2
MOV R7,#A ;1 1
DELAY1:
MOV R6,#B ;1 1*A
DJNZ R6,$ ;2 2*B*A
DJNZ R7,DELAY1 ;2 2*A
RET ;2 2
所以總時間=2+1+A+2*A*B+2*A+2=5+3A+2AB
4、湊數求A、B
根據2、3得到如下式子:
50000=5+3A+2AB
可以有很多種結果,不過最好是以A盡可能小,B盡可能大為原則,當然不能大於255.
我現在湊出A=110,B=225;那麼總延時時間=5+3*110+2*110*225=49835。還差165US
5、補齊不夠時間
再加一個小循環就OK了,呵呵如下:
MOV R6,#C
DJNZ R6,$
會算了吧,2*C+1=165;所以C=82。
現在完整的延時程序出來了,如下:
DELAY50MS: ;2 2
MOV R7,#110 ;1 1
DELAY1:
MOV R6,#225 ;1 1*110
DJNZ R6,$ ;2 2*225*110
DJNZ R7,DELAY1 ;2 2*110
MOV R6,#82 ;1 1
DJNZ R6,$ ;2 2*82
RET ;2 2
很圓滿:總的時間50000微妙,也就是50毫秒。這種方式編程,在該硬體環境下可以保證最大誤差為1微妙。

『貳』 51單片機C語言程序中延時函數delay的原理是什麼

原理:只是執行一些所謂的「無實際意義的指令」,如縮放或執行一個int自加,簡單地說,就像高中數學中的「乘法原理」一樣,很容易迅速增加上面提到的「無意義指令」的數量

關於大小的值:如果是在C語言中,該值不僅與水晶振動、單片機本身的速度,但也與C的編譯器,所以,雖然這個值可以精確計算,但大多數情況下,程序員是經驗值。

當然,如果你在匯編中編程,情況就不同了,因為每條指令使用一定數量的機器周期,你當然可以根據所有指令使用的總時間來計算特定延遲的總時間。

(2)單片機延時程序擴展閱讀:

定義延遲XMS毫秒的延遲函數

Voiddelay(unsignedintXMS)//XMS表示需要延遲的毫秒數

無符號intx,y;

For(x=XMS;X0;X-)

For(y=110;Y」0;Y-);

使用:

VoidDelay10us(ucharMs)

Uchar數據我;

(;女士「0;------Ms)

對於(I = 26)我> 0;我-);

I=[(延遲值-1.75)*12/ms-15]/4

『叄』 編寫一個延時10秒的程序單片機

如果是精確的話,需要用定時器,不是太精確的話,軟體延時就可以。
假如12M晶振
void delay10s()
{
int i,j;
for(i=0;i<10000;i++)
for(j=0;j<120;j++);
}
void delay10s()
{
unsigned char i;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
i=200;
while(i--)
{
while(TF0==0);
TF0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
}

『肆』 C51單片機延時程序,需要不精確延時2小時,請問大神怎麼寫延時代碼,謝謝!

可以有很多辦法,一是調整參數,使其延時5分鍾或6分鍾,循環24次或20次。二是將延時函數的形參改為長整型(32位)延時時間擴大65536倍。三是使用定時器,每次定時50mS,累計144000次,便是2小時,使用定時器(中斷)的好處是在延時期間還可以干許多事情,例如顯示剩餘時間,檢測設備工作狀態或者調整延時時間等,而你的純軟體延時期間想干其它事情比較困難。

『伍』 51單片機中延時程序

1. sleep()是以毫秒計算的,延時5秒是sleep(5*1000);,延時5分是sleep(5*1000*60);

2.包含的頭文件看你用的什麼編輯軟體。

3.我用的VC++是用包含在#include<windows.h>頭文件中。

#include<stdio.h>#include<windows.h>//Sleep()的頭文件 main() { int i;

int n=10;for(i=1;i<=n;i++) {printf("%d",i);Sleep(5*1000*60);} //

這里修改延時時間,

有些人說是用#include<dos.h>做頭文件你自己試下吧。

還用Sleep的S是大寫的,不是小寫的。

『陸』 單片機5段延時程序

ORG
0000H
CONT:
MOV
R2,#04H
MOV
A,
#0FEH
NEXT:
MOV
P1,
A
ACALL
DELAY
RL
A
DJNZ
R2,
NEXT
MOV
R2,
#04H
NEXT1:
MOV
P1,
A
RR
A
ACALL
DELAY
DJNZ
R2,
NEXT1
SJMP
CONT
DELAY:
MOV
R3,
#14H
MOV
TMOD,
#10H
MOV
TH1,
#3CH
MOV
TL1,
#0B0H
SETB
TR1
LP1:
JBC
TF1,LP2
SJMP
LP1
LP2:
MOV
TH1,
#3CH
MOV
TL1,
#0B0H
DJNZ
R3,
LP1
RET
END
;很簡單的,你的程式把0和O搞錯了,然後修改一下R2就可以了,此程式我已經運行過。

『柒』 單片機延時程序C語言

都有關系,用uchar也能起作用,但是不明顯,你就覺得有問題,原因應該是這樣的,char型是8位的,就算是無符號的字元型,最大也是255,也就是說你給的值再大就會溢出,沒什麼用了,比如你給一個256,溢出了,這時候Z的值應該是0,但是這個程序是沒錯的,你給0和255延時還是不同的,,當然你現在應該明白為什麼整型就可以了,因為無符號的int是32位的,而這個數最大值到底有多大,你自己算一下,所以你給的數基本不會溢出,延時明顯,字元型主要是用來寫字元的,算數的話你還是別用這個類型,各有各的用途

『捌』 關於單片機延時程序

void timer0_zd() interrupt 1 //定時器0,定時中斷子程序
{
TL0 = 0x00; // 設置定時器初值
TH0 = 0x4C; // 設置定時器初值

a++; //開關按下延時,延時到之後,電磁閥開始動作。

if(a==20) //延時20*50毫秒 = 1秒
{
flag0=1;
}
}
很明顯進入中斷,a == 20的時候flag0標志置位,aut1 = 0;如果你a不清零的話,a++一直加加到溢出,所以出錯,如果你清零了,中斷進入一次a+1 到20請aut1就會一直輸出

『玖』 幫忙寫個簡單的51單片機延時程序

用定時器做延時比較好實現。
#include<reg51.h>
#defineucharunsignedchar
sbitk=P1^0;
sbitled=P1^1;
ucharcnt,sec;
voidt0isr()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>=20)
{
cnt=0;
sec++;
}
}
voidmain()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(k==0)
{
cnt=0;
sec=0;
while(k==0)
{
if(sec>=3&&sec<=8)led=0;
elseled=1;
}
}
led=1;
}
}

『拾』 單片機延時程序

2*2*(0x7d)*10*100=500000 算的方法很多,但是相差都不大 這是我的演算法。。。
如果你的晶振是12M的 那麼就大概是0.5秒 如是6M的就是1秒啦
DL1:MOV R2.#10 想是3秒把10改為60 ............30

閱讀全文

與單片機延時程序相關的資料

熱點內容
javajson字元串轉java對象 瀏覽:226
必修一數學PDF 瀏覽:775
javascriptphpjsp 瀏覽:811
深圳一程序員退房完整版 瀏覽:294
後台管理app哪個好 瀏覽:766
加密鎖無模塊什麼意思 瀏覽:22
加密國度英文 瀏覽:20
科沃斯用了app怎麼使用按鍵 瀏覽:663
爬蟲編譯器價格 瀏覽:885
支付寶視頻app會員自動扣費怎麼關 瀏覽:230
單片機和wifi模塊 瀏覽:725
python倒序二進制代碼 瀏覽:362
廣東程序員離職 瀏覽:586
golang核心編程 瀏覽:170
中小學計演算法則 瀏覽:85
無職轉生哪個app能看 瀏覽:580
夏夢迪在哪個app 瀏覽:107
c編譯軟體cl 瀏覽:933
逗比的程序員頭像 瀏覽:984
單片機原理作業答案 瀏覽:230