打印
[STM32F1]

端口检测顺序编程问题

[复制链接]
1008|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Pspice2012|  楼主 | 2015-9-30 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
需要编一个小程序,要求如下:
PA0置高以后,PA1再置高,这时PA3输出为1。如果PA1先于PA0置高,那么PA3输出为0
这里面涉及到端口检测并有先后顺序,不知道如何用C实现
本人编程菜鸟,请DX指点,先谢了。
沙发
gejigeji521| | 2015-9-30 15:46 | 只看该作者
你按照顺序执行相关的寄存器操作就行了。或者,你一个一个的操作,按顺序排列你的代码。

使用特权

评论回复
板凳
liumda| | 2015-9-30 16:08 | 只看该作者
本帖最后由 liumda 于 2015-9-30 16:16 编辑
gejigeji521 发表于 2015-9-30 15:46
你按照顺序执行相关的寄存器操作就行了。或者,你一个一个的操作,按顺序排列你的代码。 ...
是有点别扭
如果用
if((PA0==1) && (PA1==1))
PA3=1;
这个好像是同时判断,或者PA1在PA0之前置高也判断不出来

楼下回答

使用特权

评论回复
地板
Pspice2012|  楼主 | 2015-9-30 16:32 | 只看该作者
gejigeji521 发表于 2015-9-30 15:46
你按照顺序执行相关的寄存器操作就行了。或者,你一个一个的操作,按顺序排列你的代码。 ...

if(PA0==1)
{
if(PA1==1)
PA2=1;
}
是这样吗?

使用特权

评论回复
5
Pspice2012|  楼主 | 2015-9-30 21:02 | 只看该作者
请各位指点

使用特权

评论回复
6
玄德| | 2015-10-1 14:41 | 只看该作者
都是PA口,就好办。

A=PA;
A &= 0x0A;
if ( A != 0x0A )
{
if    ( A=0x80  )    ......
els if  ( A==0x02  )     .......
}

以上循环。
关键是一次性读取PA的值。

但策略上有缺失:同时为1,怎么办?



使用特权

评论回复
7
Pspice2012|  楼主 | 2015-10-2 19:04 | 只看该作者
玄德 发表于 2015-10-1 14:41
都是PA口,就好办。

A=PA;

没看明白,为什么要和0X0A与呢?我用的是PA0、PA1、PA2这三个引脚,另外if( A=0x80  )这条语句做什么用?

使用特权

评论回复
8
玄德| | 2015-10-2 20:21 | 只看该作者
Pspice2012 发表于 2015-10-2 19:04
没看明白,为什么要和0X0A与呢?我用的是PA0、PA1、PA2这三个引脚,另外if( A=0x80  )这条语句做什么用 ...


我写错了。

A=PA;
A &= 0x07;
if ( 三个脚不同时为1 )
{
if    ( PA0==1  )    ......
els if  ( PA1==1  )     .......
else if ( PA2==1 )........
}

使用特权

评论回复
9
sail8498| | 2015-10-3 10:49 | 只看该作者

_Bool PA1   PA:1;
_Bool PA0   PA:0;
_Bool PA3   PA:3;
_Bool a;
While (PA1!=1 && PA0!=1)
{
  if(PA0==1)
{
  if(a) {PA3=0;}
   else {a=1;}
}
if(PA1==1){
  if(a) {PA3=1;}
  else {PA3=0;}
}

}


if(PA0==1)
{
  if(a) {PA3=0;}
   else {a=1;}
}
if(PA1==1){
  if(a) {PA3=1;}
  else {PA3=0;}
}

使用特权

评论回复
10
gejigeji521| | 2015-10-10 10:29 | 只看该作者
目前楼主的问题搞定了吧,这个就是要多试试就好了

使用特权

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

本版积分规则

3

主题

8

帖子

0

粉丝