STC89C52定时器输出脉冲问题

2019-07-16 06:01发布

现我用定时器0方式1,定时中断方式输出频率可变的低电平固定(200US)的脉冲,脉冲是20次/分钟到120000次/分钟可调,现写了一段程序,好像输出的频与实际不一样,在36000次/分钟用试波器测只有265点几HZ,实际应是600HZ。不知道我的思路对不对,或是有没有更好的方法可以实现,谢谢!
程序如下:
//定时器0中断处理程序
void timer0_Int (void) interrupt 1
{ static uchar i=0;
  static uchar t=0;
  if(t==1)
  {
   i=0;
   t=0;
   P42=0;
   Delay(Out_Pwm);  //延时200US
   P42=1;
  }
  i++;
  if((Timer_Data/65536)>0)
  {
   if(i<=(Timer_Data/65536))
   {
   TH0=0;
   TL0=0;
   }
  if(i>(Timer_Data/65536))
   {
    t=1;
    TH0=((65536-Timer_Data)%65536)/256;
   TL0=((65536-Timer_Data)%65536)%256;
   }
   }
   if((Timer_Data/65536)==0)
{
   t=1;
   TH0=(65536-Timer_Data)/256;
   TL0=(65536-Timer_Data)%256;
  }
}



以上Timer_Data=60000000/Display_Data+Out_Pwm
Display_Data:是每分钟脉冲次数,是可调的,通过按键来调
Out_Pwm:是低电平时时间(200US)
Timer_Data:是将每分钟的次数转换成单次的时间,单位是US

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。