|
按理解,配置好pwm輸出不應(yīng)該影響中斷的,但是我設(shè)置的T0定時(shí)器,總是不能正常工作,麻煩大神看看,是哪個(gè)寄存器沒設(shè)置好?
void delay(unsigned char i) //延時(shí)
{
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; //定時(shí)器T1模式益出中斷
//CMOD=0x00;//時(shí)鐘源配置00,系統(tǒng)頻率/12
CCAPM0=0x42; //PWM0設(shè)置PCA工作方式為PWM方式(0100 0010)
CCAP0L=0x00; //設(shè)置PWM0初始值與CCAP0H相同
CCAP0H=0x00; // PWM0初始時(shí)為0
CCAPM1=0x42; //PWM1設(shè)置PCA工作方式為PWM方式
CCAP1L=0x00; //設(shè)置PWM1初始值與CCAP0H相同
CCAP1H=0x00; // PWM1初始時(shí)為0
CCAPM2=0x42; //PWM2設(shè)置PCA工作方式為PWM方式
CCAP2L=0x00; //設(shè)置PWM2初始值與CCAP0H相同
CCAP2H=0x00; // PWM2初始時(shí)為0
CR=1; //啟動(dòng)PCA定時(shí)器
}
void Time_Init()//中斷初始化
{
TMOD=0x01;//設(shè)置16位 計(jì)時(shí)方式
TH0=0xb1; //設(shè)置初值
TL0=0xe0;
TR0=0;//開定時(shí)器T0
ET0=1;//啟動(dòng)定時(shí)器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;//啟動(dòng)定時(shí)器
//TR1=1; //啟動(dòng)定時(shí)器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輸出口可以正常工作,但是定時(shí)器T0,不工作? 為何~~~~~~~~~
|
|