① 51單片機 延時函數
delay(u16i)
{
while(i--);//這里就是當i減1不為0時一直做減1運算,知道i為0跳出循環。
}
想當於:
delay(u16i)
{
while(i--)
{
;
}
}
② 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
③ 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是大寫的,不是小寫的。
④ 幫忙寫個簡單的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;
}
}
⑤ C51單片機延時
匯編的話,是可以精確的計算出來的,C就不然了,你可以用Keil看看相應的匯編程序,展開後程序較長,匯編指令很多,所以延時時間遠遠不是400us,大概齊在1.6ms左右吧。
⑥ 51單片機delay()函數
delay函數是一般自己定義的一個延時函數。
C語言定義延時函數主要通過無意義指令的執行來達到延時的目的。下面給出一個經典的延時函數。
// 定義一個延時xms毫秒的延時函數
void delay(unsigned int xms) // xms代表需要延時的毫秒數
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
⑦ 51單片機c語言延時函數 Void delay 1ms(unsigned int ms){un
C程序中可使用不同類型的變數來進行延時設計。經實驗測試,使用unsigned char類型具有比unsigned int更優化的代碼,在使用時應該使用unsigned char作為延時變數。 以某晶振為12MHz的單片機為例,晶振為12MHz即一個機器周期為1us。
void delay_ms(unsigned int ms_number) // ms延時函數 (AT89C51 @ 11.0592MHz)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
void Delay()
{
unsigned char a,b,c;
for(a=0;a<?;a++)
for(b=0;b<?;b++)
for(c=0;c<?;c++);
}
void delay_ms(unsigned int ms)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}
}
拓展資料
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
⑧ 51單片機C語言程序中延時函數delay的原理是什麼
原理:只是執行一些所謂的「無實際意義的指令」,如縮放或執行一個int自加,簡單地說,就像高中數學中的「乘法原理」一樣,很容易迅速增加上面提到的「無意義指令」的數量
關於大小的值:如果是在C語言中,該值不僅與水晶振動、單片機本身的速度,但也與C的編譯器,所以,雖然這個值可以精確計算,但大多數情況下,程序員是經驗值。
當然,如果你在匯編中編程,情況就不同了,因為每條指令使用一定數量的機器周期,你當然可以根據所有指令使用的總時間來計算特定延遲的總時間。
(8)51單片機延時函數擴展閱讀:
定義延遲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
⑨ 51單片機延時函數
這個要結合你的模擬來做,首先設置斷點,測量出單個循環的指令周期數,然後再進行延時計算,用5/單次循環的時間後確認循環次數,你的i,j沒有嵌套,嵌套後更合理。
⑩ 求51單片機10分鍾延時程序
利用定時器可以多次中斷來實現。比如定時50毫秒,那麼200次中斷就實現了10分鍾的延時。