按理解,配置好pwm输出不应该影响中断的,但是我设置的T0定时器,总是不能正常工作,麻烦大神看看,是哪个寄存器没设置好?
void delay(unsigned char i) //延时
{
unsigned int j,k;
for (j=i; j>0; j--)
for(k=0;k<2500;k++);
}
void PWMT_Init()//中断初始化
{
AUXR=0x80;
AUXR1=0x20;//输出,P2.5,P2.6,P2.7
CMOD=0x01; //定时器T1模式益出中断
//CMOD=0x00;//时钟源配置00,系统频率/12
CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)
CCAP0L=0x00; //设置PWM0初始值与CCAP0H相同
CCAP0H=0x00; // PWM0初始时为0
CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式
CCAP1L=0x00; //设置PWM1初始值与CCAP0H相同
CCAP1H=0x00; // PWM1初始时为0
CCAPM2=0x42; //PWM2设置PCA工作方式为PWM方式
CCAP2L=0x00; //设置PWM2初始值与CCAP0H相同
CCAP2H=0x00; // PWM2初始时为0
CR=1; //启动PCA定时器
}
void Time_Init()//中断初始化
{
TMOD=0x01;//设置16位 计时方式
TH0=0xb1; //设置初值
TL0=0xe0;
TR0=0;//开定时器T0
ET0=1;//启动定时器T0
EA=1;//开总中断
}
void PWM0_Set (unsigned char Ddata)
{
unsigned char Hdata,Ldata;
Ldata=Ddata%256;
Hdata=Ddata/256;
CCAP0L= Ldata; //设置值直接写入CCAP0L
CCAP0H= Hdata; //设置值直接写入CCAP0H
}
void PWM1_Set (unsigned char Ddata)
{
unsigned char Hdata,Ldata;
Ldata=Ddata%256;
Hdata=Ddata/256;
CCAP1L= Ldata; //设置值直接写入CCAP1L
CCAP1H= Hdata; //设置值直接写入CCAP1H
}
void PWM2_Set (unsigned char Ddata)
{
unsigned char Hdata,Ldata;
Ldata=Ddata%256;
Hdata=Ddata/256;
CCAP2L= Ldata; //设置值直接写入CCAP2L
CCAP2H= Hdata; //设置值直接写入CCAP2H
}
void Time0_Int() interrupt 1 //中断
{
TH0=0xb1; //设置初值即20MS
TL0=0xe0;
count++;
if(count>4000)count=0;
}
void main (void)
{
PWMT_Init(); //PWM初始化
Time_Init();//中断初始化
TR0=1;//启动定时器
//TR1=1; //启动定时器1
PWM0_Set(0x00); //设置PWM占空比P2.5
PWM1_Set(0x00); //设置PWM占空比P2.6
PWM2_Set(0x00); //设置PWM占空比P2.7
while(1)
{
if(count<2000)A=0;
else A=1;
}
}
实际工作是PWM输出口可以正常工作,但是定时器T0,不工作? 为何~~~~~~~~~
|