求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 如何写一个单片机输入上升沿和下降沿的脉冲输出信号的c语言程序

作者&投稿:锐厘 (若有异议请与网页底部的电邮联系)
这里只讲原理,不关注速度。实际设计工作中,已经有很多单片机能够识别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);
//在此应用
}
}

可以利用定时器定时中断检测。每10ms检测一次开关的状态,多设几个状态值,最后将开关有效值读出;然后利用if语句检测。

定时中断程序此处省略
void main()
{
bit last_state;上一次开关有效值。
bit Now_state;当前开关有效值,从定时中断中读出。
while(1)
{
if((!last_state&&Now_state)==1)
{}上升沿检测
if((last_state&&!Now_state)==1)
{} 下降沿检测
last_state=Now_state;更新上一次开关有效值
}
}

用51单片机汇编语言检测上升沿和下降沿~

这里只讲原理,不关注速度。实际设计工作中,已经有很多单片机能够识别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语言难理解些。
参考资料来源:百度百科-单片机汇编指令

如果是循环中查询的话我一般这样做, 定义一个变量比如keyLastStatus来记录上一次扫描周期的状态
sbit key=P2.0; char keyLastStatus=0;
keyLastStatus=key; //初始化
while (1)
{
if(key==1 && keyLastStatus!=key) Todo(); //上升沿
if(key==0 && keyLastStatus!=key) Todo(); //下降沿
keyLastStatus=key; //记录上一次的状态
}

急!单片机频率计c语言程序,3位8段数码管显示,显示范围从0.01~9.99...
答:常用51单片机频率计有两种方法,一种方法,定时计脉冲个数,如定时100ms,计数器计值是55,则频率为55x10=550hz,另外一种方法,计单个脉冲的周期,可用外部中断,也可不用外部中断,下降沿到来时开定时器,上升沿或另外一个下降沿到来时关闭定时器,读出定时器的值,若脉冲宽度太宽,定时器可能会溢出...

怎么捕捉单片机的方波上升沿和下降沿 急!
答:用汇编语言,只用两条指令即可办到。--- 输入周期是2S的(占空比是50%)的方波给单片机的P3.2口,经过单片机延时50ms后输出周期为2S的(占空比为50%)的方波,从P1.0输出。程序正确。延时50ms,只是估算,基本上正确。

单片机上升沿的控制问题
答:按照你的C程序(我不懂C程序,会汇编语言编程),如果时钟可以这样实现的话,那么对于595你还要把13脚(输出允许,低电平允许数据输出)接地,或者在程序中把接13脚的单片机引脚清零,把10脚(595数据清零脚,低电平清零)接高电平,同时在你把数据发送完成后还要把12脚(数据锁存时钟引脚,上升沿锁存数据)从低电平...

c语言中clk_option是什么意思
答:c语言中clk_option是时钟显示的意思。clk是时钟(Clock)信号的意思。1、时钟信号是指有固定周期并与运行无关的信号量。2、时钟信号是时序逻辑的基础,它用于决定逻辑单元中的状态何时更新。3、时钟边沿触发信号意味着所有的状态变化都发生在时钟边沿到来时刻。4、在边沿触发机制中,只有上升沿或下降沿才是...

单片机 按键作为外部中断的输入,怎么使用软件防抖动?c语言,谢谢。
答:进入中断后,关闭这个外部中断,同时启动一个50ms的定时器,退出这个外部中断。在那个50ms定时到时,判断这个外部中断引脚的电平 ,确定是否为抖动。

关于单片机c语言中位选段选的问题
答:你用的是什么芯片存储的,是边沿触发还是电平触发,边沿的话,就是第一种,电平的话,就是第二种。边沿的话,只需一个 上升沿 或者一个 下降沿 就可以将数据锁存到存储器中,电平的话通常是,无效的时候送数据,然后来个电平触发有效并锁存,下一次无效电平送数据,再来个有效电平触发。

霍尔模块信息采集的问题。单片机 C语言
答:只需要判断一下zhuan是否已经+1,设置一个变量。如果zhuan已经+1,将这个变量置1,在后面的程序中同时匹配这个变量,如果这个变量为1,则表示已经zhuan+1了,则不再进行zhuan+1操作,当out变为低电平的时候将变量置0。这样,在下一次切割的时候,能够让zhuan+1这个操作在当out为高电平的时候只执行一次...

...单片机ATmega8515读取RTC(DS1302)的时间信息的C语言程序,只要读秒...
答:求大神们给个C语言的程序,我现在完... 这个是我画的单片机和DS1302的连接图,本人初学单片机,还有...SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备 delaynus(2); //稍微等待,使硬件做好准备 for...SCLK=1; //将SCLK置于高电平,为下降沿读出 delaynus(2); //稍微等待 SCLK=0; //拉低SCLK,形成...

如何用C语言编程使单片机产生方波信号
答:你要看一下你使用的单片机的PWM或者时钟模块,里面会有一项功能,捕捉单片机PIN脚上的电平变化,通常叫输入捕捉。这种功能通常都有一个自由时钟在运行,通过单片机的寄存器配置可以设置——捕捉输入PIN脚上的上升沿还是下降沿,或者两种变化沿都捕捉,当PIN脚上出现对应的变化沿时,输入捕捉功能会将此时自由...

给定一个方波如何用单片机测周期(C语言怎么编)?
答:测完整的一个周期,可以用上升沿或者下降沿中断和定时器,如第一次中断,设置定时器初始值为0,那么第二次中断,定时器的值A就是周期了.