单片机倍频问题

2019-03-24 17:02发布

想把50Hz的脉冲信号经51单片机后变为500Hz输出,写了一个程序却实现不了,望大神指点一下,谢谢!对输入信号的检测时间是0.5S,检测完后输出500Hz。输出部分没什么问题,就是检测输入信号想不明白怎么处理
#include"reg52.h"
sbit PWM_out=P1^0;  //定义输出脚
sbit PWM_in=P1^5;  //定义输入脚
unsigned int  count=0;         //计脉冲个数
void main()
{
        TMOD=0x01;                                 //定时器0工作方式1
        TH0=(65536-1000)/256;         //12M晶振1ms计时常数
        TL0=(65536-1000)%256;
        EA=1;                                         //开总中断
        ET0=1;                                         //开定时器0中断
        TR0=0;                                         //暂不启动定时器0         
            while(1);   
       if ((P1^5==1)&&(P1^5==0))
                {
                 count++;
                 
                 if((count >= 45)&&(count <= 55))
                 {   
                         TR0=1;
                 }
                 else
                 {
                  TR0=0;
                 }
       
        }
        }

void T0_time(void) interrupt 1          //中断函数,启动后每1ms进入一次中断
{
        TH0=(65536-1000)/256;             //12M晶振1ms计时常数
        TL0=(65536-1000)%256;
                 if(PWM_out)
                                 PWM_out=0;      //输出脚取反
                 else
                                 PWM_out=1;
                                 
}

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
gmchen
2019-03-25 14:31
楼主的问题,显然是输入的信号在50赫兹左右波动而要求输出频率始终是输入的100倍,因为如果输入不变也就不需要这个电路了,直接做一个500赫兹的信号就行了。
所以,这个问题实际上是要做一个软件锁相环,藉此实现100倍频。楼主在首帖给出的解决方案似乎是过于简单了。

一周热门 更多>