打印

请教!用单片机一个输入口实现上升沿,下降沿都计数。

[复制链接]
5609|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gpff|  楼主 | 2009-4-15 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
czha1| | 2009-4-15 15:26 | 只看该作者

jb

jb
jnb

使用特权

评论回复
板凳
sssbang| | 2009-4-15 17:24 | 只看该作者

用微分电路然后接施密特试试

使用特权

评论回复
地板
韩秋婷| | 2009-4-15 17:30 | 只看该作者

看来楼主想用中断方式,

把51扔了,换成其它mcu轻松实现

使用特权

评论回复
5
王紫豪| | 2009-4-15 19:23 | 只看该作者

检测上升沿然后 *2 哦

使用特权

评论回复
6
NE5532| | 2009-4-15 22:29 | 只看该作者

楼主忘了自己用的啥单片机

51?进中断以后根据当前电平把触发沿改了就是了
PIC或者AVR,用端口变化中断,啥都省了。

使用特权

评论回复
7
ayb_ice| | 2009-4-15 22:34 | 只看该作者

异或逻辑可以解决这个问题

使用特权

评论回复
8
lyjian| | 2009-4-16 08:13 | 只看该作者

4楼

用中断方式,51也能轻松实现
N多51,硬件功能比其他MCU强的多得是
带PCA功能的51满街都是
开关频率不高的话直接用软件实现

使用特权

评论回复
9
lufeijian| | 2009-4-16 23:35 | 只看该作者

楼主要多动脑才行!很简单的,

    其实你的要求就是只要电平跳变就记数,每跳变一次记一个数,方法很多了:用一个标志,CPU不停的反复查询被检则的端口,当端口为高平,查看标志有效就计数,然后清除标志;当端口电平为低,查看标志无效就计数,然后打上标志.

使用特权

评论回复
10
天雨粟| | 2009-4-19 14:59 | 只看该作者

办法真多,学习!

5楼紫豪兄的办法是我的第一感觉,何以呢?两次按下,逻辑上讲,中间必有一个弹上,所以统计次数*2-1即可;

6楼NE5532老师的办法堪称妙手:
//IT0=1;
void inter0(void) interrupt 0{
++cnt;
while(!INT0);
++cnt;
}

9楼的办法也是正解,佩服!展开如下:
while(1){
if(test_port==1&&flag==1)
    cnt++;
flag=0;//屏蔽高电平继续计数并允许低电平计数
if(test_port==0&&flag==0)
   cnt++
flag=1;//屏蔽低电平继续计数并允许高电平计数

}

使用特权

评论回复
11
huangqi412| | 2009-4-19 15:17 | 只看该作者

中断中每次取反方向就可以啦,

使用特权

评论回复
12
McuPlayer| | 2009-4-20 06:12 | 只看该作者

王紫豪的idea最有创意

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝