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
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左右吧。