當前位置:首頁 » 編程語言 » c語言編程延遲子程序
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言編程延遲子程序

發布時間: 2023-06-01 08:39:27

1. 單片機c語言中多個延時程序怎麼編寫

#include<AT89X51>
unsigned char sx[]={
oxfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
oxfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x01},
ml[]={0xff,0x00, 0xff,0x00, 0xff,0x00,
0xff,0x00, 0xff,0x00, 0x01};
unsigned int a=0,b=0;
del1ms(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
for(j=0;j<100;j++);
}
main()
{
while(1)
{
if(sx[]!=0x01)
{
P0=sx[a];
del1ms(20);
a++;
}
else
a=0;
if(lm[]!=0x01)
{
P0=lm[b];
del1ms(30);
b++;
}
else
b=0;
}
}
說明一下: 這樣延時太短了,基本上看不出
對於定義來說:變數只是一個標識符而已,隨便設,當變數多 的時候最好用帶意思如:sec stu 等

2. 用C語言編寫1ms延遲子程序,不明白for (j=0;j<120;j++),求助大大們

自己寫延時是很麻煩的.
因為CPU有自己的時鍾中斷,如果你的循環在最後一次執行的時候,CPU發生了中斷,那麼你能保證就剛好是X*120嗎?
CPU發生的中斷,系統會調用swapcontext函數進行線程切換.(等下一個線程把運行許可權交回來的時候(20ms),都不知道運行了多久了.已經運行了成千上萬條指令了.)
除非把中斷關閉了.但是在三環下面又不能關閉時鍾中斷.還是調用系統的sleep好了,這樣要保險一點.

3. 怎麼用C語言寫可以調節的延時程序,請大俠幫忙

延時程序(包括asm和C程序,都是我在學單片機的過程中用到的),在單片機延時程序中應考慮所使用的晶振的頻率,在51系列的單片機中我們常用的是11.0592MHz和12.0000MHz的晶振,而在AVR單片機上常用的有8.000MHz和4.000MH的晶振所以在網上查找程序時如果涉及到精確延時則應該注意晶振的頻率是多大。

軟體延時:(asm)

晶振12MHZ,延時1秒
程序如下:
DELAY:MOV 72H,#100
LOOP3:MOV 71H,#100
LOOP1:MOV 70H,#47
LOOP0:DJNZ 70H,LOOP0
NOP
DJNZ 71H,LOOP1
MOV 70H,#46
LOOP2:DJNZ 70H,LOOP2
NOP
DJNZ 72H,LOOP3
MOV 70H,#48
LOOP4:DJNZ 70H,LOOP4

定時器延時:

晶振12MHZ,延時1s,定時器0工作方式為方式1

DELAY1:MOV R7,#0AH ;;晶振12MHZ,延時0.5秒
AJMP DELAY
DELAY2:MOV R7,#14H ;;晶振12MHZ,延時1秒
DELAY:CLR EX0
MOV TMOD,#01H ;設置定時器的工作方式為方式1
MOV TL0,#0B0H ;給定時器設置計數初始值
MOV TH0,#3CH
SETB TR0 ;開啟定時器
HERE:JBC TF0,NEXT1
SJMP HERE
NEXT1:MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ R7,HERE
CLR TR0 ;定時器要軟體清零
SETB EX0
RET

C語言延時程序:

10ms延時子程序(12MHZ)

void delay10ms(void)

{

unsigned char i,j,k;

for(i=5;i>0;i--)

for(j=4;j>0;j--)

for(k=248;k>0;k--);

}

1s延時子程序(12MHZ)

void delay1s(void)

{

unsigned char h,i,j,k;

for(h=5;h>0;h--)

for(i=4;i>0;i--)

for(j=116;j>0;j--)

for(k=214;k>0;k--);

}

200ms延時子程序(12MHZ)

void delay200ms(void)

{

unsigned char i,j,k;

for(i=5;i>0;i--)

for(j=132;j>0;j--)

for(k=150;k>0;k--);

}

500ms延時子程序程序: (12MHZ)
void delay500ms(void)
{
unsigned char i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}

下面是用了8.0000MHZ的晶振的幾個延時程序(用定時0的工作模式1):

(1)延時0.9MS

void delay_0_9ms(void)
{
TMOD=0x01; /*定時器0工作在模式1下(16位計數器)*/
TH0=0xfd;
TL0=0xa8;
TR0=1; /*啟動定時器*/
while(TF0==0);
TR0=0;
}

(2)延時1MS

void delay_1ms(void)
{
TMOD=0x01; /*定時器0工作在模式1下(16位計數器)*/
TH0=0xfd;
TL0=0x65;
TR0=1; /*啟動定時器*/
while(TF0==0);
TR0=0;
}

(3)延時4.5ms

void delay_4_5ms(void)
{
TMOD=0x01; /*定時器0工作在模式1下(16位計數器)*/
TH0=0xf4;
TL0=0x48;
TR0=1; /*啟動定時器*/
while(TF0==0);
TR0=0;
}

4. C語言延時的子程序怎麼寫

其實這是不太精準的延時程序,其實質就是for循環,就是讓處理器不停地做遞減或遞加運算,從而達到延時的目的。至於延時時間,完全是更具經驗的得到的。