[51单片机] 如何用单片机对脉冲信号进行测量

[复制链接]
9875|25
排山倒海 发表于 2014-7-28 12:38 | 显示全部楼层
本帖最后由 排山倒海 于 2014-7-28 18:04 编辑
笑红尘 发表于 2014-7-28 09:08
#include
#define uint unsigned int
#define uchar unsigned char


从这个程序看,你“没”搞清楚信号测量的初始化(什么时候什么情况下要清零计数)和读取信号脉宽时间条件(什么时候是该读取时间?)。
 楼主| 笑红尘 发表于 2014-7-28 20:51 | 显示全部楼层
排山倒海 发表于 2014-7-28 12:38
从这个程序看,你“没”搞清楚信号测量的初始化(什么时候什么情况下要清零计数)和读取信号脉宽时间条件 ...

我关于信号测量的初始化不清楚。应该从什么时候开始读取脉宽时间?
用两个定时器,一个计数,一个定时,假设高电平开始计数,那么程序设计该从什么时候开始计数,又得记多久??
排山倒海 发表于 2014-7-28 22:10 | 显示全部楼层
本帖最后由 排山倒海 于 2014-7-28 22:20 编辑

程序设计要自己想清楚算法,思想是很难表达清楚的,你现在用两个外中断是分开上升沿和下降沿中断吗?硬件是什么样?
如果两个外中断是用同样的上升沿中断检测脉冲信息,将会出现定时器T0被外中断0开启了又马上被外中断1停止,如何对脉冲信号计时呢?而且这里应该是分别启动停止定时器1才对啊。
smgdisplay中用软件死循环方式是大忌,可以参考我回复帖子“从单片机初学者迈向单片机工程师(1)----学会释放CPU ”附件的相关说明。
lu50211 发表于 2014-7-29 09:17 | 显示全部楼层
笑红尘 发表于 2014-7-28 09:08
#include
#define uint unsigned int
#define uchar unsigned char

void EXint0() interrupt 0                //外部中断0
{
        ET0=1;
}
void EXint1() interrupt 2                //外部中断1
{
        ET0=0;
        prd=0;        
}
你用定时器1作计数,为什么开定时器0呢。
moyue 发表于 2014-7-29 17:25 | 显示全部楼层
使用CCP模块即可,简单直接
 楼主| 笑红尘 发表于 2014-7-29 18:18 | 显示全部楼层
moyue 发表于 2014-7-29 17:25
使用CCP模块即可,简单直接

目前已经解决,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部