标题:
stc15单片机pwm输出影响中断吗?
[打印本页]
作者:
无限飞翔
时间:
2023-4-14 23:18
标题:
stc15单片机pwm输出影响中断吗?
按理解,配置好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,不工作? 为何~~~~~~~~~
作者:
wulin
时间:
2023-4-15 08:18
1.STC15单片机的定时器与PWM是互为独立的硬件模块。原则上互不影响正常工作。问题出在楼主设置使用不当。楼主设置PWM时钟源为T0溢出脉冲,那么两者唯一的关联就是TF0。正常情况下当定时器0溢出触发中断,CPU响应后TF0被系统自动清0。那么 TF0 与 PWM 关联后,TF0是在哪个步骤被清0,未经测试不得而知。如果不是使用PWM任意频率可调功能,建议改用系统时钟源。
2.楼主设置20msT0中断,又设置AUXR=0x80;1T模式是无法正常工作的。在12M时钟条件下1T模式最多只能定时5.46ms。
3.此PCA模块PWM是8位,操控占空比只要赋值CCAPnH即可,CCAPnL是自动读取CCAPnH的数据工作,不需要另外赋值。楼主PWM想用20ms作时钟源,再除256,约0.2Hz,PWM频率如此之低想干嘛?
作者:
coody_sz
时间:
2023-4-15 13:58
PWM是硬件外设,自动工作,不会影响别的程序(包括中断)。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1