C51做频率计问题
我现在的想法是:用片内的两个定时/计数器,一个做定时器,一个做计数器计外部信号的脉冲数,当定时器计满时在中断子程序中停止计数器,然后将计数器的模式和初值置成串口通信所需值,最后读出TH0和TL0中的值并在串口调试助手中显示。
问题1:显示TH0、TL0时会多出一些乱码,是不是多读了一些数据?
问题2:如何将TH0、TL0中的数据合并,并转换成十进制数?
问题3:有没有什么更好的办法?
新手求教。
[解决办法]
1、没必要转换进制;
2、出现乱码的原因多半是单片机这端你送的是二进制,而PC端那边你却用ASCII去接收而引起的;
3、另一种可能性是两边的波特率校验位的参数不匹配。
[解决办法]
1)乱码是啥意思?脉冲计数,只可能数值偏大,那么需要对输入脉冲进行滤波,滤掉脉冲尖毛刺。
2)在进行脉冲计数前,需要先清零TH0和TL0;或者,记录初始值。最后,用终值减去初始值,得到实际的计数值。
3)当脉冲频率超快时,需要外接计数器进行分频;
4)当脉冲频率奇慢时,应该采用固定的定时时间,在这个定时时间内,统计脉冲数。