微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机普通I/O口怎么实现对外计数功能

51单片机普通I/O口怎么实现对外计数功能

时间:10-02 整理:3721RD 点击:
小弟现在想对一个脉冲进行计数,想求教各位普通I/O口怎么实现对外计数功能!
注意:是普通的I/O口,不是外部中断口!
来自小组: 码农

这样玩 。在定时器中每隔10ms检测IO楼状态,用2个静态变量存储按键的值   检测信号的上升沿
sbit  IN = P1^0;
void timer0 () interrupt  1
{
  static uchar key,L_key;
  L_key = key;//保存上次状态
  key  =  IN;
if((key == 1)&&(L_key == 0))//上升沿即上次状态为0,这次状态为1就是上升沿  要检测下降沿也可以
{
.....//计数变量加1
}
}

就通过程序读取IO口的电平变化嘛。

我需要来一个高电平只计数一次

怎么样读取,能否给个实例我看下

没有示例、例如
temp=P1_0;
  if(temp==1)
  num++;
temp==0
else
...
之类的

其实找个带定时器T2的单片机就可以了吧.
用T2EX口采集顺便计数.T2EX具体对应P1.1还是其它IO口看选的单片机类型了

小孩子不懂别插嘴

可以用计数器....

不是很清楚哟!

你确定你这个程序是对的?

重新学习单片机确实才一个月左右时间,但觉得这方法应该可行的.不知哪里有问题?

各位大虾 ,小弟通过不断烧录程序,自己已攻克!

你先给I/O置高(P0要加5K左右的上拉电阻),这叫释放IO口
程序如下(以P1^0为例)
先P1^0=0xff;
temp=P1_0;
if(temp==1)
{
num++;
}这样的就可以对外来的脉冲进行计数了,
如果还是不够理解的话,在百度上搜51单片机内部I/O结构分析。

兄弟你这个程序有问题的,要再加个判断!

这位兄弟的答案貌似可行,不管怎么样多谢

普通IO口检测边沿,只要速度够快。用普通IO解码红外都是无压力。

以后多向你讨教,谢谢

不好意思  当时还没有发帖的时候出了点问题

不过还是要谢谢你

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top