導航:首頁 > 操作系統 > 單片機c語言時間

單片機c語言時間

發布時間:2025-07-04 20:08:28

Ⅰ 用C語言怎麼在單片機AT89C51上編寫一個延時10秒的程序

1、十秒對於單片機來說是很長很長的時間了,單片機十秒的時間什麼事都不能做,只在跑這延時程序,那是什麼概念,用中斷的話,單片機正常運行其他程序,只是時間到了才過來處理延時以後的程序,效率不知道高了多少 。

2、常式:

//假設晶振12MHZ

#include"reg51.h"
unsignedintYSJS=0;
voidmain(void)
{
TMOD|=0X10;//定時器1工作於方式1,16位定時器
TH1=0XFF;//定時器1定時時間=500uS
TL1=0X06;
ET1=1;//使能定時器1中斷
EA=1;//開總中斷
while(1)
{
}
}
voidTIMER1(void)interrupt3//定時器1中斷函數使用默認寄存器組
{
TH1=0XFF;//定時器1定時時間=500us
TL1=0X06;
YSJS++;
if(YSJS==20000)//500uS*20000=10000000us=10s
{
P1=P1^0X01;//P1.0十秒鍾翻轉一次
YSJS=0
}
}

Ⅱ 用c語言編寫程序,用於c51單片機四位共陰數碼管顯示,顯示分秒的計時器。

/*

用proteus做的時鍾

可以顯示年月日時分秒

可調整時間

有圖

*/

#include<reg52.h>

#define ucharunsignedchar

#defineuintunsignedint

#definetimh0xee

#definetiml0x00

sbitK1=P1^0;

sbitK2=P1^1;

sbitK3=P1^2;

sbitK4=P1^3;

sbitK5=P1^4;

sbitK6=P1^5;

sbitpoit=P0^7;

uintyear=2011,year0=0;

ucharmon=6,mon0=0,day=26,day0=0,hour=23,hour0=0,min=15,min0=0,sec=0,sec0=10,temp0=0;

ucharR;

ucharcod1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

uchartemp[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

voiddelay(uintz)

{

uintx,y;

for(x=0;x<z;x++)

for(y=0;y<100;y++);

}

voidexter_init()

{

IT0=1;

EX0=1;

}

voidtime_init()

{

TMOD=0x01;

TH0=timh;

TL0=timl;

ET0=1;

EA=1;

TR0=1;

}

voidre_time(uchara)

{

uchari,j;

for(j=0;j<a;j++)

{ for(i=0;i<14;i++)

{

P0=cod1[temp[i]];

if(i==3||i==5||i==9||i==11) poit=0;

P2=i;

delay(1);

P2=0x0f;

}

}

}

voidsyn()

{

if(sec!=sec0)

{sec0=sec;

temp[12]=sec0/10;

temp[13]=sec0%10;}

if(year!=year0)

{year0=year;

temp[0]=year0/1000;

temp[14]=year0%1000;

temp[1]=temp[14]/100;

temp[14]=temp[14]%100;

temp[2]=temp[14]/10;

temp[3]=temp[14]%10;}

if(mon!=mon0)

{mon0=mon;

temp[4]=mon0/10;

temp[5]=mon0%10;}

if(day!=day0)

{day0=day;

temp[6]=day0/10;

temp[7]=day0%10;}

if(hour!=hour0)

{hour0=hour;

temp[8]=hour0/10;

temp[9]=hour0%10;}

if(min!=min0)

{min0=min;

temp[10]=min0/10;

temp[11]=min0%10;}

}

main()

{

exter_init();

time_init();

while(1)

{

re_time(10);

}

}

voidtxter()interrupt0

{

ucharF;

F=1;

EA=0;

while(!K6);

delay(1);

do

{ re_time(1);

if(!K1)

{

min++;

if(min>=60)min=0;

while(!K1);

}

syn();

re_time(1);

if(!K2)

{

hour++;

if(hour>=24)hour=0;

while(!K2);

}

syn();

re_time(1);

if(!K3)

{

day++;

R=(year%4==0)&&(year%100!=0);

R=(R&&(day>=29)&&(mon==2))||(!R&&(day>=30)&&(mon==2))||((mon!=2)&&(day>=31));

if(R)day=1;

while(!K3);

}

syn();

re_time(1);

if(!K4)

{

mon++;

if(mon>12)mon=1;

while(!K4);

}

syn();

re_time(1);

if(!K5)

{

year++;

if(year>9999)year=2000;

while(!K5);

}

syn();

re_time(1);

if(!K6)

{

F=!F;

while(!K6);

}

re_time(1);

syn();

re_time(1);

}while(F);

sec=0;

EA=1;

}

/*****************************************************

************定時器0函數

*******************************************************/

voidtimer()interrupt1

{

temp0++;

if(temp0>=200)

{

temp0=0;

sec++;

if(sec>=60)

{

sec=0;

min++;

if(min>=60)

{

min=0;

hour++;

if(hour>=24)

{

hour=0;

day++;

R=(year%4==0)&&(year%100!=0);

R=(R&&(day>=29)&&(mon==2))||(!R&&(day>=30)&&(mon==2))||((mon!=2)&&(day>=31));

if(R)

{

day=0;

mon++;

if(mon>=13)

{

mon=1;

year++;

}

}

}

}

}

}

syn();

TH0=timh;

TL0=timl;

}

Ⅲ 單片機C語言中while的延時時間

用KEIL軟體可以計算時間,將while的起始位置和終止位置加紅點(雙擊即可);

然後左側的SEC後面的就是執行的時間。

再給你幾個延時程序做參考:

軟體延時:(asm)

晶振12MHZ,延時1秒

程序如下:

DELAY:MOV72H,#100

LOOP3:MOV71H,#100

LOOP1:MOV70H,#47

LOOP0:DJNZ70H,LOOP0

NOP

DJNZ71H,LOOP1

MOV70H,#46

LOOP2:DJNZ70H,LOOP2

NOP

DJNZ72H,LOOP3

MOV70H,#48

LOOP4:DJNZ70H,LOOP4

定時器延時:

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

DELAY1:MOVR7,#0AH;;晶振12MHZ,延時0.5秒

AJMPDELAY

DELAY2:MOVR7,#14H;;晶振12MHZ,延時1秒

DELAY:CLREX0

MOVTMOD,#01H;設置定時器的工作方式為方式1

MOVTL0,#0B0H;給定時器設置計數初始值

MOVTH0,#3CH

SETBTR0拍渣;開啟定時器

HERE:JBCTF0,NEXT1

SJMPHERE

NEXT1:MOVTL0,#0B0H

MOVTH0,#3CH

DJNZR7,HERE

CLRTR0;定時器要軟體清零

SETBEX0

RET

C語言延時程序:

10ms延時子程序(12MHZ)

voiddelay10ms(void)

{

unsignedchari,j,k;

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

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

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

}

1s延時子程序(12MHZ)

voiddelay1s(void)

{

unsignedcharh,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)

voiddelay200ms(void)

{

unsignedchari,j,k;

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

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

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

}

500ms延時子程序程序:(12MHZ)

voiddelay500ms(void)

{

unsignedchari,j,k;

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

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

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

}

不襲侍悄過實際得到的延時會存在差異,所以最好用實驗的方法調整延時參數。

Ⅳ 51單片機 C語言 怎樣測量高電平持續的時間

假設定時器不溢出,P1.0為高電平輸入引腳:
while(P1^0==1);//等待眼前的高電平過去
while(P1^0==0);//等待下一個高電平來到
TR0=1;//啟動定時器
while(P1^0==1);//等待高電平結束
TR0=0;//關閉定時器
HIGH=TL0+TH0*256;//讀取時間

閱讀全文

與單片機c語言時間相關的資料

熱點內容
中國電信山東伺服器雲空間 瀏覽:374
海信電視app哪裡找 瀏覽:969
51單片機定時器延時程序 瀏覽:472
壓縮機功率型號 瀏覽:561
PLC程序演算法 瀏覽:975
物流程序員好不好 瀏覽:548
插值演算法vb 瀏覽:928
androidwebview報錯 瀏覽:251
中國什麼時候才能有自己的伺服器 瀏覽:764
ps3聯機伺服器怎麼用 瀏覽:670
伺服器nfs服務是什麼 瀏覽:95
java虛擬機直接編譯 瀏覽:608
javaaop實現 瀏覽:61
java雙向通信 瀏覽:513
mps430超低功耗單片機答案 瀏覽:911
夫妻數學演算法中大獎 瀏覽:399
nmake不是內部命令 瀏覽:779
如何創建社區ppoe虛擬伺服器 瀏覽:524
java模擬線程並發 瀏覽:762
一個雲伺服器能有幾個實例 瀏覽:191