打印
[STC单片机]

STC单片机引脚状态检测,并记录时间,时对时错是什么原因

[复制链接]
2118|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主


用if语句判断,结果有的时候能捕捉到第一个上升沿,统计到之前的7秒,有的时候捕捉的是后面那个上升沿,统计的时间是8秒,是什么原因呢,while(1)里面循环扫描的时候应是微妙级别的,怎么会扫描不到第一个状态变化呢,求助高手

相关帖子

沙发
ayb_ice| | 2015-6-24 14:01 | 只看该作者
程序有问题吧

使用特权

评论回复
板凳
nbsmaps| | 2015-6-25 13:38 | 只看该作者
不能用IF,用这个语句,程序刚到这条,而人未按下?这个基本算个按键电路,要不用中断,要不就用查询,用WHILE(PIN==1)

使用特权

评论回复
地板
XZL| | 2015-6-25 21:18 | 只看该作者
程序不严密!

使用特权

评论回复
5
沉思的牛| | 2015-6-25 21:26 | 只看该作者
用外中断好了啊,上升沿捕获

使用特权

评论回复
6
miaomiaozhuzhu|  楼主 | 2015-6-29 15:02 | 只看该作者
nbsmaps 发表于 2015-6-25 13:38
不能用IF,用这个语句,程序刚到这条,而人未按下?这个基本算个按键电路,要不用中断,要不就用查询,用WH ...

由于我只要捕捉到p1^0==0;就开启定时器,清零一个变量time,定时器0中断里time一秒加一次所以
if(p1^0==0&&flag1==0)
{
     TR0 = 1;
     time=0;
    flag1 = 1;
}
if(p1^0==1&&flag2==0)
{

}

使用特权

评论回复
7
miaomiaozhuzhu|  楼主 | 2015-6-29 15:05 | 只看该作者
本帖最后由 miaomiaozhuzhu 于 2015-6-29 15:07 编辑
nbsmaps 发表于 2015-6-25 13:38
不能用IF,用这个语句,程序刚到这条,而人未按下?这个基本算个按键电路,要不用中断,要不就用查询,用WH ...

由于我只要捕捉到p1^0==0;就开启定时器,清零一个变量time,定时器0中断里time一秒加一次,flag1初值为1
if(p1^0==0&&flag1==1)
{
     TR0 = 1;
     time=0;
    flag1 = 0;    flag2 =1;
}
if(p1^0==1&&flag2==1)
{
   a = time;
   flag2=0;
   flag1=1;
}
有六个这样的判断程序并计算时间,中间还夹杂着一些其他判断语句,如果全放在中断里面会不会工作量太大,定时器0是10ms自动重装一次,芯片是STC89C51RC,求助

使用特权

评论回复
8
gx_huang| | 2015-6-29 15:17 | 只看该作者
程序的逻辑太复杂了,判断高低电平的时间,直接定时器里判断好了。

使用特权

评论回复
9
nbsmaps| | 2015-7-8 11:20 | 只看该作者
问题你是你用IF取不到这个==0啊,

使用特权

评论回复
10
wolfbeard| | 2015-7-8 11:45 | 只看该作者
小写的p1^0行吗?

使用特权

评论回复
11
miaomiaozhuzhu|  楼主 | 2015-7-21 19:35 | 只看该作者
实际是大写的,我写问题时写错了,跟这个没有关系

使用特权

评论回复
12
wolfbeard| | 2015-7-29 16:05 | 只看该作者
本帖最后由 wolfbeard 于 2015-7-29 16:07 编辑

你用示波器看看实际波形,也许应该设置一下I/O口的状态,我一般是把要捕捉状态的I/O口设成高阻态.

使用特权

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

本版积分规则

5

主题

18

帖子

0

粉丝