|
按理解,配置好pwm輸出不應(yīng)該影響中斷的,但是我設(shè)置的T0定時器,總是不能正常工作,麻煩大神看看,是哪個寄存器沒設(shè)置好?
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,系統(tǒng)頻率/12
CCAPM0=0x42; //PWM0設(shè)置PCA工作方式為PWM方式(0100 0010)
CCAP0L=0x00; //設(shè)置PWM0初始值與CCAP0H相同
CCAP0H=0x00; // PWM0初始時為0
CCAPM1=0x42; //PWM1設(shè)置PCA工作方式為PWM方式
CCAP1L=0x00; //設(shè)置PWM1初始值與CCAP0H相同
CCAP1H=0x00; // PWM1初始時為0
CCAPM2=0x42; //PWM2設(shè)置PCA工作方式為PWM方式
CCAP2L=0x00; //設(shè)置PWM2初始值與CCAP0H相同
CCAP2H=0x00; // PWM2初始時為0
CR=1; //啟動PCA定時器
}
void Time_Init()//中斷初始化
{
TMOD=0x01;//設(shè)置16位 計時方式
TH0=0xb1; //設(shè)置初值
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; //設(shè)置值直接寫入CCAP0L
CCAP0H= Hdata; //設(shè)置值直接寫入CCAP0H
}
void PWM1_Set (unsigned char Ddata)
{
unsigned char Hdata,Ldata;
Ldata=Ddata%256;
Hdata=Ddata/256;
CCAP1L= Ldata; //設(shè)置值直接寫入CCAP1L
CCAP1H= Hdata; //設(shè)置值直接寫入CCAP1H
}
void PWM2_Set (unsigned char Ddata)
{
unsigned char Hdata,Ldata;
Ldata=Ddata%256;
Hdata=Ddata/256;
CCAP2L= Ldata; //設(shè)置值直接寫入CCAP2L
CCAP2H= Hdata; //設(shè)置值直接寫入CCAP2H
}
void Time0_Int() interrupt 1 //中斷
{
TH0=0xb1; //設(shè)置初值即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); //設(shè)置PWM占空比P2.5
PWM1_Set(0x00); //設(shè)置PWM占空比P2.6
PWM2_Set(0x00); //設(shè)置PWM占空比P2.7
while(1)
{
if(count<2000)A=0;
else A=1;
}
}
實(shí)際工作是PWM輸出口可以正常工作,但是定時器T0,不工作? 為何~~~~~~~~~
|
|