这里只讲原理,不关注速度。实际设计工作中,已经有很多单片机能够识别io端口上升沿和下降沿中断,且方式不止一种。
sbit
io_inp=p2^1输入端
bit
old_bit输入端电平记忆
unsigned
char
low_high上升下降沿标志,0=无变化,1=上升沿,2、下降沿
void
io_rest(void)
{
if(old_bit=!io_inp)
{
old_bit=io_inp
if(io_inp=1)
low_high=1
else
low_high=2
}
}
void
main(void)
{
old_bit=io_inp=p2^1
while(1)
{
low_high=0
io_rest(void)
//在此应用
}
}
扩展资料:
直接使用汇编指令编写单片机程序,对硬件的控制更加直接,可以直接 *** 作物理地址,寄存器,端口等;其它更高级的语言(如:C语言)对硬件的控制是依赖于类库来实现的。并且,对于一些对程序大小和运行速度有非常严苛要求的项目而言,都必须使用汇编指令。
C语言只是为了方便编写,与机器打交道的其实都是2进制得代码,汇编语言就是这些代码好记忆的名称和规则,只是比C语言难理解些。
参考资料来源:百度百科-单片机汇编指令
您是问硬件的方式?还是软件的方式?如果是硬件的方式,那么,各种单片机很不相同,需要具体看它的资料。
一般来说,某些引脚,例如:外中断引脚、定时器的计数触发引脚、捕获引脚等等,都可以用来检测上升沿与下降沿。
以捕获(有的单片机资料如80196,将它称作“高速输入”)引脚为例:
捕获引脚可以与某个定时器相关联,在捕获引脚上遇到上升沿或下降沿时,硬件就自动记录下当时定时器的读数,并产生中断请求。您可以在中断服务程序中做所需的相应 *** 作。
至于是上升沿捕获,还是下降沿捕获,还是二者都能捕获,可以由用户自己选择配置。
如果是用软件的方式来检测,那道理就简单了。用查询方式:只要将要检测的信号接到某个输入端口的某个位,在程序中反复读取该位的输入,一旦遇到“上次是0此次是1”的情况,就说明检测到了上升沿,遇到“上次是1此次是0”的情况,就说明检测到了下降沿。
PLS指令是指输出(或叫产生)一个尖脉冲,它相当于线圈瞬动闭合一次,并保持一个扫描周期周期;LDP是指取上升沿脉冲,即取触头或开关、按钮等由断开(OFF)变为闭合(ON)的瞬间产生一个尖脉冲,与以后该触头或开关、按钮等的闭合持续时间长短无关,并保持一个扫描周期周期;
ANDP是指“与上升沿脉冲”,是指将该上升沿脉冲和前面的触头做“与”的逻辑运算。
你可以按上面的回答再理解一下。我的回答希望对你学习PLC有帮助。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)