现我用定时器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
0