关于用定时器模拟PWM的问题
我用51的定时器1产生PWM波用示波器测得周期以及高电平时间总是不对
给定时器1赋得初值如下:
EA=1;
ET1=1;
TMOD=0x10;
TH1=(int) (65536-t*1000)/256;
TL1=(int) (65536-t*1000)%256;
TR1=1;
p20=1; //输出高电平
定时器中断之后再次给TH1赋值如下:
p20=~p20; //输出低电平
TH1=(int) (65536-(20-t)*1000)/256;
TL1=(int) (65536-(20-t)*1000)%256;
但是这个算法出来的周期只有5ms多
不知道哪里错了,望各位指教 data_TH1= (65536-t*1000)/256;
data_TL1= (65536-t*1000)/256;
timer1() interrupt 1 using 0
{
TR1 = 0;
TL1 = data_TL1;
TH1 = data_TH1;
TR1 = 1;
TR0 = 0;
TH0 = 0xff ;
TL0 = 0x00 ;
TR0 = 1;
COUNT++;
if(COUNT== C_T_data){
P34 =1;
}
if(COUNT==0xff){
COUNT=0;
P34 =0;
}
} 定时器中断函数里:不能在给TH1,TL1赋值时做计算!
运算只能放在主函数里或定时器启动之后。
timer1() interrupt 1 using 0
{
TR1 = 0;
TL1 = data_TL1;
TH1 = data_TH1;
TR1 = 1;
p20=~p20;
//计算可以放在这里或主函数里 //
data_TH1=(int) (65536-(20-t)*1000)/256;
data_TL1=(int) (65536-(20-t)*1000)%256;
} 谢谢楼上,我明白了
页:
[1]