㈠ 如何利用定時器T0的工作方式1實現1秒鍾延時程序(單片機)
1、#include <reg52.h>
2、#define uchar unsigned char
3、#define uint unsigned int
4、sbit LED = P0^0;uchar T_Count = 0;void main(){TMOD = 0x01;TH0 = (65535-50000)/256;TL0 = (65535-50000)%256;IE = 0x82;TR0 = 1;while(1);}
5、void LED_Flash() interrupt 1{TH0 = (65535-50000)/256;TL0 = (65535-50000)%256;if(++T_Count == 20){LED = !LED;T_Count = 0;}}
6、這個程序是1秒鍾LED燈會亮與滅顯示。
㈡ 單片機小程序:用定時器T0方式1,延時一秒怎麼寫晶振為12
不管晶振頻率是多少,一次就延時一秒是不可能的。
當晶振頻率是12
M時,最大的延時是65.536毫秒。通常可以設置定時50毫秒,並設置為中斷方式,這樣,每次當定時到就中斷一次,再對中斷計數,中斷計數20次就是一秒了。
㈢ 單片機怎麼不使用定時計數器的匯編語言延時一秒
使用延時函數,也就是多層計數for循環即可。
㈣ 任意型號單片機,延遲1或2秒怎麼寫12M,24M怎麼算for後面怎麼寫。要過程不要結果。
一般先寫一個延時幾個毫秒的子程序,很簡單。
void delay( int ms )
{
while( ms-- )
{
int i = 延時常數;
do { _nop_(); } while( --i );
}
}
要延時一秒鍾,就是1000ms,delay( 1000 );
幾個注意事項,
1、延時程序沒有關中斷,所以中斷程序會影響定時精度。
2、延時常數可以用軟模擬程序實驗確定,需要根據不同的單片機、晶振頻率調整延時常數。
3、想要適用任意型號單片機,內層循環最好加一句空操作,通常這可以阻止編譯時優化程序。
㈤ 單片機延時1秒如何計算要最詳細一點的要過程用C語言
unsigned char rSecondCount; //秒計時數
unsigned char rMinuteCount; //分計時數
sbit IsOneSecondReach;
sbit Pulse_Sec=P1^0;
sbit Pulse_Min=P1^1;
main()
{
rSecondCount=0;
rMinuteCount=0;
TH1=0x3C;
TL1=0xAF; //定時器50ms產生一次中斷 (FFFF-3CAF)us
MOD = 0x10; //定時器1工作於模式1,(用工作於模式2也可以,而且更 簡便)
TR1=1; //使能定時器1
ET1=1; //開中斷
EA=1; //開全局中斷
while(1)
{
if (IsOneSecondReach)
{
IsOneSecondReach = 0;
//do something,如果一秒延時標志為1,則清除此標志,等待下次1秒,在此處
//執行需要執行的程序
}
}
}
/* 定時器50ms產生一次中斷 */
void Timer(void) interrupt 3
{
/* 重新載入T1參數 */
TH1=0x3C;
TL1=0xAF;
/* 一秒累加 */
rSecondCount++;//秒計時+1
if (rSecondCount==20) //1sec到,50ms*20
{
IsOneSecondReach = 1;
}
}
//
脈沖寬度為50ms,如果有其他要求的話,修改T1參數和「秒分」的參數湊下就行了.
㈥ 單片機延時1秒如何計算要最詳細一點的要過程 用C語言寫的 晶振為12M 主要是計算過程和演算法
unsigned char rSecondCount; //秒計時數
unsigned char rMinuteCount; //分計時數
sbit IsOneSecondReach;
sbit Pulse_Sec=P1^0;
sbit Pulse_Min=P1^1;
main()
{
rSecondCount=0;
rMinuteCount=0;
TH1=0x3C;
TL1=0xAF; //定時器50ms產生一次中斷 (FFFF-3CAF)us
MOD = 0x10; //定時器1工作於模式1,(用工作於模式2也可以,而且更 簡便)
TR1=1; //使能定時器1
ET1=1; //開中斷
EA=1; //開全局中斷
while(1)
{
if (IsOneSecondReach)
{
IsOneSecondReach = 0;
//do something,如果一秒延時標志為1,則清除此標志,等待下次1秒,在此處
//執行需要執行的程序
}
}
}
/* 定時器50ms產生一次中斷 */
void Timer(void) interrupt 3
{
/* 重新載入T1參數 */
TH1=0x3C;
TL1=0xAF;
/* 一秒累加 */
rSecondCount++;//秒計時+1
if (rSecondCount==20) //1sec到,50ms*20
{
IsOneSecondReach = 1;
}
}
/**************************************************************/
脈沖寬度為50ms,如果有其他要求的話,修改T1參數和「秒分」的參數湊下就行了。
㈦ 51單片機延時一秒函數,晶振12MHZ
我這有個函數自己實驗出來的,在KEIL里看差不多就是延時1毫秒
void delay1ms(unsigned int t)
{
unsigned x,y;
for(x=t;x>0;x--)
for(y=124;y>0;y--);
}
把t 改為你要延時的數就可以了,1毫秒就把t改為1 500毫秒就把t改為500
㈧ 單片機延時一秒的c程序
void
delay(unsigned
int
k)
{
unsigned
int
i,j;
for
(i=0;<k;i++)
{
for
(j=0;j<121;j++)
{;}
}
}
/*
取k=3000
*/
或者你可以用keil
自設一個延時函數,一直調試到你所需要的時間為止
㈨ 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
㈩ 單片機 延遲一秒程序怎麼寫延遲2秒我是初學者,想請教一下。
你好!
你要先寫一個延時基準(50毫秒),在延時1秒就是做20次基準,2秒就是40個基準!
也可以用定時器,定時50毫秒,定時器中斷計數,計數20就是1秒,計數40次就是2秒(推薦用定時器!)
僅代表個人觀點,不喜勿噴,謝謝。