#include <regx51.h>
int i=0;
void T_0yan()
{ TMOD=0x01;
TL0=(65536-50000)%256;
TH0=(65536-50000)/256;
EA=1;
ET0=1;
}
void T0zhongduan() interrupt 1
{ TL0=(65536-50000)%256;
TH0=(65536-50000)/256;
i++;
}
void lianggreenred20() //延時20s
{
T_0yan();TR0=1;
while(i<=400){P1=0xdd;}TR0=0; i=0;
}
void shan3() //延時3s
{ T_0yan(); TR0=1;
while(i<=60)
{P1=0xdd;P1_1=~P1_1;}TR0=0;i=0;
}
void redgreen2() //延時2s
{ T_0yan();TR0=1;
while(i<=40)
{P1=0xde; }TR0=0;i=0;
}
void main()
{
while(1)
{
lianggreenred20();
shan3();
redgreen2();
}
}
uj5u.com熱心網友回復:
粗略看了下,可以,但是不好:1. T_0yan();只需要呼叫一次。
2. TL0=(65536-50000)%256;
TH0=(65536-50000)/256;
寫成兩個宏定義,宏名帶時間單位 ,如#defind TH0_500ms (65536-50000)/256。
3.最好讓定時器一直跑,在里面多寫幾個變數,以達到定時3秒和定時20秒,自動切換你要的功能。
uj5u.com熱心網友回復:
用慣了庫開發,現在感覺暫存器有點看不懂了uj5u.com熱心網友回復:
函式功能要分開寫,延時函式就只干延時的事情,不要去做控制單片機引腳變化。uj5u.com熱心網友回復:
在主程式執行時,lianggreenred20()與redgreen2()的時間基本正確,但子程式shan3()的時間差距很大,不知道什么原因?轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/30631.html
標籤:單片機/工控
