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

51單片機延時程序

發布時間:2022-05-22 17:44:35

1. 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是大寫的,不是小寫的。

2. 51單片機怎麼用軟體延時

以下是51單片機C語言精密延時程序:
voiddelayms(unsigned char t)
{
unsigned char j;
unsigned char i;

do
{
j=3;
do
{
i=165;
do
{
--i;
}
while(i!=0);
--j;
}
while(j!=0);
--t;
}
while(t!=0);
}
該程序延時時基為1ms,所以最大延時時間是255ms
下面是反編譯的匯編程
C:0x0031 7E03 MOV R6,#0x03

C:0x0033 7DA5 MOV R5,#0xA5

C:0x0035 DDFE DJNZ R5,C:0035

C:0x0037 DEFA DJNZ R6,C:0033

C:0x0039 DFF6 DJNZ R7,delayms(C:0031)

C:0x003B 22 RET
延時時間計算公式如下:
((R5*2 + 2+1)*R6+2+1)R7
假設R7=1,上式為(165*2+3)*3+2+1=1002us!!!!!
以上程序使用的晶振是12MHz,如果使用的是其他頻率的晶振只需計算出1ms的機器周期數,代入(R5*2 + 2+1)*R6+2+1,選擇合適的R5,R6即I,j的值就行了。

3. 51單片機用定時器查新的方法編寫一秒的延時程序,fosc=12MHZ

一、用定時器中斷,50ms中斷的1 次,20次就是1秒
#include <REG51.H>
#define uchar unsigned char
sbit LED =P1^1; //接一LED,1 秒鍾亮或滅一次
uchar time;
void init_t0int()
{
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
init_t0int();
while(1);
}

void t0int() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
time++;
if(time==20)
{
time=0;
LED=~LED;
}
}

二、用循環延時可能程序更簡單一點,但沒實際意義 。單片機在這1 秒內只能循環而不能做其它事。
#include<reg51.h>
sbit LED=P1^0;
void delay_ms(unsigned char ms)
{
unsigned char i;
while(ms--)
for(i=0;i<123;i++);
}
void main()
{
while(1)
{
delay_ms(1000);
LED=~P1^0; //P1.0接一LED,可看到LED每1S亮或滅一次
}
}
參考資料: LED

4. 用匯編怎麼寫51單片機的延時程序

和前兩位的差不多,最簡單的就是運用MOV賦值的,再用DJNZ遞減的方式,計算出每條指令執行時間,再加上循環字數,延時時間按照你自己的時間編寫循環次數和賦值大小;另外,你也可以用定時器編寫,計算好你的延時時間,當時間達到時輸出高電平,作為中斷信號,返回主程序,執行設定延時後的目標程序。
匯編和C各有好處,就我個人而言,浮點數的計算最好用C編,匯編不好解決,而且需要的很多代碼,C很容易就可以實現!

5. 51單片機延時程序

我以2ms為例說明一下:
單片機的晶振周期為12hz,則執行一條代碼為一個機器周期,為1微妙(ua),所以2ms=10*200(ua),
對r2賦值200(4位二進制數最大值為256,所以只能取到200)即#c8h。再對r2循環20次就實現了2ms延時。至於100ms、
200ms、
1s等等方法類似,只是調整相應的初值。多設置幾次循環就行。
程序代碼如下:
delay:
mov
r1,#0ah
;賦值r1為10次
delay1:
mov
r2,#c8h
;賦值r2為200次
delay2:
djnz
r2,$
;r2自減到0,不到0繼續等待
djnz
r1,delay1
;r2減到0後r1自減1,重新給r2賦初值後繼續循環,直到r1到0為止,延時結束
ret

6. 51單片機怎麼測試延時程序

不用測試,可以用軟體模擬。像編譯軟體都有模擬功能,只要晶振頻率設置正確,模擬結果與實際運行是一致的。

7. 51單片機C語言中delay函數是怎麼定義和使用的

定義一個延時xms毫秒的延時函數

void delay(unsigned int xms) // xms代表需要延時的毫秒數

{

unsigned int x,y;

for(x=xms;x》0;x--)

for(y=110;y》0;y--);

}

使用:

void Delay10us(uchar Ms)

{

uchar data i;

for(;Ms》0;Ms--)

for(i=26;i》0;i--);

}

i=[(延時值-1.75)*12/Ms-15]/4

(7)51單片機延時程序擴展閱讀

1、在C51中進行精確的延時子程序設計時,盡量不要或少在延時子程序中定義局部變數,所有的延時子程序中變數通過有參函數傳遞。

2、在延時子程序設計時,採用do…while,結構做循環體要比for結構做循環體好。

3、在延時子程序設計時,要進行循環體嵌套時,採用先內循環,再減減比先減減,再內循環要好。

8. 幫忙寫個簡單的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;
}
}

9. 51單片機延時程序怎麼寫

你要想讓他有一個延時的程序的話,一定要定一個int位元組,然後讓他進行一個巡迴操作才可以,在讀取操作一輪結束之後,讓他循環進行一個復位,這樣的話就可以了。

10. C51單片機延時

匯編的話,是可以精確的計算出來的,C就不然了,你可以用Keil看看相應的匯編程序,展開後程序較長,匯編指令很多,所以延時時間遠遠不是400us,大概齊在1.6ms左右吧。

閱讀全文

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

熱點內容
注冊伺服器地址指什麼 瀏覽:431
文本命令行 瀏覽:95
撲克牌睡眠解壓 瀏覽:190
rc4演算法流程圖 瀏覽:159
胡蘿卜解壓方法 瀏覽:35
掃描pdf格式軟體 瀏覽:876
程序員在銀行開賬戶 瀏覽:516
android資料庫下載 瀏覽:749
中午伺服器崩潰怎麼辦 瀏覽:425
產品經理和程序員待遇 瀏覽:442
解憂程序員免費閱讀 瀏覽:109
錄像免壓縮 瀏覽:508
總結所學過的簡便演算法 瀏覽:362
南昌哪些地方需要程序員 瀏覽:761
三台伺服器配置IP地址 瀏覽:175
如何用命令方塊連續對話 瀏覽:280
win7linux共享文件夾 瀏覽:304
命令符打開本地服務 瀏覽:601
android應用程序源碼 瀏覽:705
安卓開發工程師簡歷怎麼寫 瀏覽:63