⑴ 跪求用單片機製作長延時定時器的程序
多簡單的事啊,我貼一個AVR採用定時器0計時的,你參考一下吧。
#pragma interrupt_handler timer0_ovf_isr:10 //TIMER0 定時2ms中斷.
void timer0_ovf_isr(void)
{
TCNT0 = 0xD9; //reload counter value
timer2ms++;
if(timer2ms >= 5)
{
timer2ms = 0;
timer10ms ++;
systimer10ms ++;
if(systimer10ms >= 22) //內部1M晶振
{
systimer10ms = 0;
timer1s ++;
}
}
也就是說。你另外起一個變數。與響應時間對照。你別說9999分鍾。你就是9999年都可以做到。不理解時加我QQ問我吧。
⑵ 89C51單片機,假定單片機晶振頻率6MHz,試編寫延時2ms的程序
單片機晶振頻率6MHz的時鍾周期是0.166uS,89C51的指令周期是12個時鍾周期,約等於2uS。
以下是常式:
匯編
DELAY: MOV Rn,#200 循環200次 *10uS = 2mS
LOOP: NOP 一個指令周期
NOP
NOP
DJNZ Rn,LOOP 二個指令周期,一次循環總共5個指令周期耗時10uS
RET
C語言 #define NOP _nop_(),_nop_(),_nop_()
for(int i = 200;i!=0;i-- )NOP;
⑶ 任意型號單片機,延遲1或2秒怎麼寫12M,24M怎麼算for後面怎麼寫。要過程不要結果。
一般先寫一個延時幾個毫秒的子程序,很簡單。
void delay( int ms )
{
while( ms-- )
{
int i = 延時常數;
do { _nop_(); } while( --i );
}
}
要延時一秒鍾,就是1000ms,delay( 1000 );
幾個注意事項,
1、延時程序沒有關中斷,所以中斷程序會影響定時精度。
2、延時常數可以用軟模擬程序實驗確定,需要根據不同的單片機、晶振頻率調整延時常數。
3、想要適用任意型號單片機,內層循環最好加一句空操作,通常這可以阻止編譯時優化程序。
⑷ 單片機 延遲一秒程序怎麼寫延遲2秒我是初學者,想請教一下。
你好!
你要先寫一個延時基準(50毫秒),在延時1秒就是做20次基準,2秒就是40個基準!
也可以用定時器,定時50毫秒,定時器中斷計數,計數20就是1秒,計數40次就是2秒(推薦用定時器!)
僅代表個人觀點,不喜勿噴,謝謝。