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

51單片機延時1s的程序

發布時間:2023-09-02 13:31:24

A. C51單片機定時器1以方式1定時1秒如何設置

1、先打開我們熟悉的單片機c51編程軟體——keil,先把主方法寫好。

B. 設單片機晶振頻率為12MHZ,試編寫一延時1s的子程序

//----假設,系統工作於
12mhz/12t的傳統51單片機下.#include
<reg51.h>
sbit
test
=
p1^0;
void
delay_50ms(unsigned
char
times)
{
while(times
--
)
{
th0
=
0x3c;
//----裝入初值,定時器0定時50ms
tl0
=
0xb0;
tr0
=
1;
//-----啟動定時器
while(!tf0);
//-----等等定時時間到達
tf0
=
0;
//-----清零定時到達標志
}
}
void
delay_1s(unsigned
char
times)
{
while(times
--
)
{
delay_50ms(20);
}
}
void
main(void)
{
tmod
=
0x01;
//----定時器0工作於方式1
while(1)
{
delay_1s(2);
test
=
~test;
}
}

C. 51單片機中,定時器怎麼做延時函數用,比如說,要精確延時1s,該怎麼寫

unsigned long TimeTickCount;//1ms計時器
void Timer0Configuration();
void Delay1ms(unsigned int a);
void main()

{
while(1)
{
Delay1ms(1000);//1s延時;
}
}
void Delay1ms(unsigned int a)//0~65535
{
unsigned long b;//0~0xffffffff
b = TimeTickCount;//記下及時器初始值
while((TimeTickCount-b<a)||(0xffffffff+TimeTickCount-b<a));
//當計數器未溢出只須用 計數器實時變化的值-其初始值
//當計數器溢出則須用 計時器上限值+計數器實時變化的值-其初始值
}
void Timer1Configuration()
{
TMOD=0X10;//選擇為定時器模式,工作方式1。
TH1=0Xfc; //給定時器賦初值,定時1000us
TL1=0X18;
ET1=1;//打開定時器1中斷允許
EA=1;//打開總中斷
TR1=1;//打開定時器
}
void interrupt_timer1() interrupt 3 //1000us
{
TH1 = 0xfc; //重裝
TL1 = 0x18;
TimeTickCount++;//1000us計時器
}

D. 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

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

DEL1S:MOV R7,#10x0dx0aD1: MOV R6,#200x0dx0aD2: MOV R5,#250x0dx0a DJNZ R5,$x0dx0a DJNZ R6,D2x0dx0a DJNZ R7,D1x0dx0a RETx0dx0ax0dx0a說明:1、如果不使用R5、R6、R7可以用別的單元替換,比如換成30H、31H、32H等等x0dx0a 2、這個程序是12M時鍾,如果時鍾不同,要修改數值。如6M時鍾,要把MOV R7,#10 修改成:MOV R7,#5

F. 需要一個C語言程序。51單片機控制:按鍵按一下,延遲1分鍾後開燈,燈亮半個小時就熄滅的程序急需!

如果對時間要求不精確,用軟延時即可。
#include<reg52.h>
#define uchar unsigned char

#define uint unsigned int
sbit s=P1^0;

sbit led=P1^1;
void delayms(uint i) //1ms延時程序

{
uchar j;
for(;i>0;i--)
{
for(j=0;j<125;j++)//如果延時時間誤差較大,可按比例改變125這個數
//取值范圍0-255,數值越大,延時越長
{;}
}
}
void delay1s(uint i) //1s延時程序

{
for(;i>0;i--){delay1ms(1000);}
}

void main()
{
led=0;

while(1)
{
if (s==0)
{
delayms(20);
if (s==0);{delay1s(60);led=1; }
}
if(led==1){delay1s(1800);led=0; }
}
}
如果對時間要求精確,則要用到定時器,還要確保電路外接有晶振,並已知晶振頻率

閱讀全文

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

熱點內容
雲看地是什麼APP 瀏覽:883
數學指南pdf 瀏覽:856
phpcurldll64位 瀏覽:976
程序員脫產一年半 瀏覽:849
hr招程序員有什麼條件 瀏覽:587
android開源集合 瀏覽:867
華為雲伺服器登錄密碼和賬號 瀏覽:154
中世紀java程序員 瀏覽:786
什麼開發引擎使用python 瀏覽:176
sh腳本運行命令 瀏覽:316
廣聯達加密鎖怎麼看到期 瀏覽:172
cad軌跡命令 瀏覽:979
同事刷到女程序員自媒體視頻 瀏覽:571
校驗演算法的缺點是什麼 瀏覽:717
PHP商品分類功能實現 瀏覽:330
php取字元串中間 瀏覽:432
程序員經常用工具 瀏覽:837
降服主力指標源碼主圖 瀏覽:502
python實用庫 瀏覽:694
電腦默認7個文件夾 瀏覽:13