首先理解 "中断的原理",再去理解中断的编程方法。
这里做个比喻:
你正在一口一口的吃饭,突然手机响了,你停止吃饭,开始接手机;接完手机后 继续一口一口的吃饭。
这就是一个中断的过程。
正常情况下PLC的程序是 按顺序扫描执行的,按照从上到下,从左到右的顺序循环执行。
当出现一个中断信号时,PLC 就停止当前的“顺序扫描执行”,去执行“中断服务子程序”;当“中断服务子程序”执行完毕后,在从刚刚中断的位置 开始按顺序扫描执行。
不同厂家的PLC 中断编程方式有些差异,但是原理是相同的。
“中断子程序” 一般都是用来处理一些“紧急事件”
中断事件类型分 “内部中断事件”和“外部中断事件”两种类型。
举例:
比如生产塑料管的生产线,需要计米,当管子到达需要的长度后,需要马上切断,不能有延时,否则就会产生误差。这种情况就需要用到“中断”编程来处理。
希望我的回答 能对你有些帮助,很高兴和你一起讨论和学习。因为篇幅有限,这里不能说的更详细期待你的理解和支持。
楼上,你要读取寄存器的值可以用SPI_Read这个函数来读取,但是主要是看你的MCU有没有设置对,有没有把MISO口设置成输入,不同系列的51对IO口 *** 作不同,我用的是F系列,是通过数字资源映射控制IO口的,你要配置好单片机的IO口MISO的输入方向才可以接收到数据至于楼主的问题,我没法给出太好的回答,只能说,我的做法是对发送不作中断处理,就是说不在中断函数中对TX_DS进行 *** 作,而只做发送的功能,按一下键它发一次,中断仅仅用来接收,这种做法我已经成功实现这边按下键,那边的灯会闪,楼主可以试试
while(1){ Trig=1
delay_20us()
Trig=0//产生一个20us的脉冲,在Trig引脚
}
这里有问题啊,你再好好看看触发超声波产生的时序!!!
触发超声模块,要用一个至少8us的方波触发,然后内部会产生8个40HZ的方波激发超声。然后超声模块输出端自然会由低电平拉高等待接收障碍物反射回的超声。如果没有障碍物,回声脉冲大约持续36ms然后就自动拉低了。
你每隔20us就让超声发生模块产生一次触发脉冲,这肯定不行。它的时序要求,从接收回声结束到下一个触发脉冲开始允许10ms时间间隔,你那一个while,20us就触发一次。呵呵……
加油!祝你早日成功!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)