关于下降沿触发的的问题

2019-03-24 18:02发布

我现在想做这样一个单片机控制步进电机的程序,下面只是个程序的一部分 有思路但是具体语句实现上还有问题,具体如下:
我想让单片机的P0^0口(外部装置有个对准位置的红外接收管,每到一个特定的位置接收管电压变小,给P00口一个负跳变)做一个下跳沿触发,然后单片机开始发送脉冲控制步进电机转动,并且通过计数累计脉冲个数(比如说i个,顺便问一下如果i很大的话,单片机能存储下来吗?),等到转一周后又接收到负跳变,此时返回i的值(就是让我知道i是多少就行了,单片机上无显示器,可以寄存器放置吗,这里我也不太懂……),大概就是这样,我自己也在网上找这样类似的程序,但是太模糊了,找出来的都不太相关

如果哪位大神能发个链接地址啥的,我也很感谢啊,谢谢各位能看完这么多字!!





此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
jishuaihu
1楼-- · 2019-03-25 20:22
你的程序有这样的一个问题,不应该把条件加到主循环中。应该用个死循环去不断坚持P0.0,在while(1){}里面去判断P0.0的状态,是高的时候执行一种操作,低的时候执行一种操作,因为你要检测下降沿,所以要保存一下上次的状态,判断是低状态还是下降沿。
存储的部分你就不用再关心了,ijishu这个变量就是存储计数的。这个变量由编译器自动分配的地址,你知道这回事就行了,如果想自己分配地址也可以,等你熟练了再玩吧。现在知道已经分配内存了就行
ZNF
2楼-- · 2019-03-25 22:35
jishuaihu 发表于 2015-4-8 10:11
你的程序有这样的一个问题,不应该把条件加到主循环中。应该用个死循环去不断坚持P0.0,在while(1){}里面去判断P0.0的状态,是高的时候执行一种操作,低的时候执行一种操作,因为你要检测下降沿,所以要保存一下上次的状态,判断是低状态还是下降沿。
存储的部分你就不用再关心了,ijishu这个变量就是存储计数的。这个变量由编译器自动分配的地址,你知道这回事就行了,如果想自己分配地址也可以,等你熟练了再玩吧。现在知道已经分配内存了就行

您好,谢谢你那么认真的答复我
其实我就是不明白的就是这个下降沿的判断到底该怎么写

我觉得这么写肯定是错的:


if(P00=1){……} //这不就成了高电平触发了吗?



还有我不明白的是INT0和我的P00口是否有关系(因为我在书上看的是INT0是P3.2口),如果有,应该怎么联系啊?

外部中断我就只能写到这一步了:

void INT0() interrupt 0

{IE0=1;

IT0=1;

……

}



最后我想问的是我那个ijishu,我并关心它存在哪里了..我只想知道的是用什么方法能查看这个数?



恩。非常感谢
yangxf1217
3楼-- · 2019-03-26 02:13
 精彩回答 2  元偷偷看……
jishuaihu
4楼-- · 2019-03-26 07:58
要想测边沿必须要知道上一次的状态,同时满足上一次为1这一次为0就是下降沿了,同时要注意保存这一次的状态,等下一次判断的时候用这个当做上一次的状态。
你查ijishu这个干吗啊?又无法显示。可以把这个数用串口发出来。
maychang
5楼-- · 2019-03-26 09:20
检测某引脚负跳变的代码,和检测按键按下的很相似,拿检测按键的程序稍加修改即可。
tiankai001
6楼-- · 2019-03-26 10:18
 精彩回答 2  元偷偷看……

一周热门 更多>