我利用兩個定時器產生頻率固定為10hz的方波,占空比隨著按鍵變化,但是觀察不到方波,請大神指出程序的錯誤
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ALL 65536 //定時器工作方式1時,最大基數長度 65536;
#define F_osc 12000000 //晶振頻率12M;
sbit PWM_out=P0^7;
sbit led=P2^0;
sbit duty_up=P3^0; //占空比增加按鍵
sbit duty_down=P3^1; //占空比減少按鍵
uint duty=1; //初始占空比為10%
float T=0.1; //周期定為0.1s
uchar num;
/*****延時******/
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
/*****鍵盤掃描******/
void key_scan()
{
if(duty_up==0)
delay(5);
if(duty_up==0)
{
duty=duty+1;
if(duty>9)
duty=1;
}
if(duty_down==0)
delay(5);
if(duty_down==0)
{
duty=duty-1;
if(duty<1)
duty=9;
}
}
/******主函數*******/
void main()
{
TMOD=0x11; //定時器0,工作方式1;定時器1,工作方式1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //定時0.1s,方波頻率10HZ
TH1=(65536-duty*10000)/256;
TL1=(65536-duty*10000)%256; //計算脈寬時間,晶振頻率12
EA=1; //開總中斷
ET0=1; //開定時器0中斷
ET1=1;
TR0=1; //啟動定時器0
TR1=1;
while(1) //程序在這里等待
{
key_scan(); //鍵盤掃描確定占空比
}
}
/*****T0定時器中斷*****/
void T0_time() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //重裝定時器初值
TR0=1;
PWM_out=1;
num=num++;
if(num==4)
{
led=~led;
num=0;
}
}
/****T1定時器中斷*****/
void T1_time() interrupt 3
{
TH1=(65536-duty*10000)/256;
TL1=(65536-duty*10000)%256;
TR0=0;
PWM_out=0;
}
|