如何写一个单片机输入上升沿和下降沿的脉冲输出信号的c语言程序

如何写一个单片机输入上升沿和下降沿的脉冲输出信号的c语言程序,第1张

如果是循环中查询的话我一般这样做, 定义一个变量比如keyLastStatus来记录上一次扫描周期的状态

sbit key=P2.0char keyLastStatus=0

keyLastStatus=key //初始化

while (1)

{

if(key==1 &&keyLastStatus!=key) Todo()//上升沿

if(key==0 &&keyLastStatus!=key) Todo()//下降沿

keyLastStatus=key //记录上一次的状态

}

这里只讲原理,不关注速度。实际设计工作中,已经有很多单片机能够识别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语言难理解些。

参考资料来源:百度百科-单片机汇编指令

单片机上升沿:

顺时针旋转A超前B相信号90°:

A: _|--|__|--|_

B: __|--|__|--|

逆时针旋转B相信号超前A相信号90°:

A:__|--|__|--|_

B:_|--|__|--|__

下面是AT89C2051检测并进行二倍频程序:

采用外部中断方式

ORG 00H

LJMP MAIN

ORG 03H

LJMP INT0

ORG 13H

LJMP INT1

ORG 50H

MAIN: MOV SP,#40H

MOV P3,#0FFH

MOV IE,#10000101B 设定外部中断

MOV TCON,#00000101B

SETB EA

MA1: MOV P1,#0FFH

MOV P3,#0FFH

SJMP MA1

*******************

INT0: PUSH PSW

CLR EA

I0: JNB P1.0,FAN

CLR P3.4

SJMP INT0END

FAN: CLR P3.5

INT0END:

POP PSW

SETB EA

MOV P3,#0FFH

RETI

INT1: PUSH PSW

CLR EA

JNB P1.0,ZHENG

CLR P3.5

SJMP INT1END

ZHENG: CLR P3.4

INT1END:

POP PSW

SETB EA

MOV P3,#0FFH

RETI


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11180639.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存