有很多方法的,第一種是用模擬PWM,設定好佔空比為1/2,根據週期設定好頻率就可以了,你這個不需要變動的話,不用PWM也可以,可以這樣寫:
#define T0_delay 1000
sbit P10=P1^0;
sbit P11=P1^1;
unsigned int Pwm_Count=0;
void Timer0_init();
void main()
{
Timer0_init();
while(1);//空迴圈
}
void Timer0_init()
TMOD |=0x01; //採用16位定時器
TH0 = (65536-T0_delay)/256; //定時器裝初值1000
TL0 = (65536-T0_delay)%256;
EA=1;
ET0=1;
TR0=1;
void timer0() interrupt 1
TH0 = (65536-T0_delay)/256; //裝初值1000,1ms中斷一次
P10=~P10;//取反,1ms後電平變換,輸出週期為2ms的方波
Pwm_Count++;//計數
if(Pwm_Count==250)
Pwm_Count=0;//歸零,下次重新從零開始累加計數
P11=~P11;//取反,250ms電平轉換一次,輸出方波
要採用模擬PWM函式的話,可以這樣寫:
定時器裝1ms的初值(同上)
#define LED_ON 1
#define LED_OFF 0
主要程式碼如下:
P10=~P10;
//---------------------------------------------------------------------
Pwm_Count_500 ++;
if(Pwm_Count>500)
Pwm_Count_500 =0;
(Pwm_Count _500
有很多方法的,第一種是用模擬PWM,設定好佔空比為1/2,根據週期設定好頻率就可以了,你這個不需要變動的話,不用PWM也可以,可以這樣寫:
#define T0_delay 1000
sbit P10=P1^0;
sbit P11=P1^1;
unsigned int Pwm_Count=0;
void Timer0_init();
void main()
{
Timer0_init();
while(1);//空迴圈
}
void Timer0_init()
{
TMOD |=0x01; //採用16位定時器
TH0 = (65536-T0_delay)/256; //定時器裝初值1000
TL0 = (65536-T0_delay)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1
{
TH0 = (65536-T0_delay)/256; //裝初值1000,1ms中斷一次
TL0 = (65536-T0_delay)%256;
P10=~P10;//取反,1ms後電平變換,輸出週期為2ms的方波
Pwm_Count++;//計數
if(Pwm_Count==250)
{
Pwm_Count=0;//歸零,下次重新從零開始累加計數
P11=~P11;//取反,250ms電平轉換一次,輸出方波
}
}
要採用模擬PWM函式的話,可以這樣寫:
定時器裝1ms的初值(同上)
#define LED_ON 1
#define LED_OFF 0
主要程式碼如下:
P10=~P10;
//---------------------------------------------------------------------
Pwm_Count_500 ++;
if(Pwm_Count>500)
{
Pwm_Count_500 =0;
}
(Pwm_Count _500