单片机倍频问题

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条回答
newdrive
1楼-- · 2019-03-25 03:30
 精彩回答 2  元偷偷看……
smallfishlb
2楼-- · 2019-03-25 08:42
   if ((P1^5==1)&&(P1^5==0))这个什么时候能成立啊而且count一直在加
gmchen
3楼-- · 2019-03-25 14:31
楼主的问题,显然是输入的信号在50赫兹左右波动而要求输出频率始终是输入的100倍,因为如果输入不变也就不需要这个电路了,直接做一个500赫兹的信号就行了。
所以,这个问题实际上是要做一个软件锁相环,藉此实现100倍频。楼主在首帖给出的解决方案似乎是过于简单了。
HT001
4楼-- · 2019-03-25 15:16
 精彩回答 2  元偷偷看……
gmchen
5楼-- · 2019-03-25 20:18
HT001 发表于 2018-5-13 06:04
你好大神又见面了。之前想用纯硬件解决倍频问题,可后来发现难度重重,虽然有大神提供的资料做辅助但还是 ...

既然只有这8种频率,而且是已知的固定频率,那要什么倍频?直接由ARM给一个指令,然后单片机输出指定的频率不就行了?
HT001
6楼-- · 2019-03-26 01:20
gmchen 发表于 2018-5-13 08:17
既然只有这8种频率,而且是已知的固定频率,那要什么倍频?直接由ARM给一个指令,然后单片机输出指定的频 ...

这点真没想到,周一我再和程序员确定一下,谢谢!

一周热门 更多>