产品概述

单片机 上升沿 输入输出的上升沿和下降沿是怎么来的,一起看看

小编 2024-10-09 产品概述 23 0

输入输出的上升沿和下降沿是怎么来的,一起看看

高电平、低电平、上升沿和下降沿的区别

数字电路中,电平从低电平(逻辑信号为0)变为高电平(逻辑信号为1)的那一瞬间叫作上升沿,电平从高电平(逻辑信号为1)变为低电平(逻辑信号为0)的那一瞬间叫作下降沿。

高电平触发,是指I/O口电平为高电平时相应的功能或执行程序一直有效,直到电平被拉为低电平才失效。上升沿触发是当信号从低电平变为高电平时的瞬间有效,不管后面再变为高电平或低电平都无效。

低电平触发,是指I/O口电平为低电平时相应的功能或执行程序一直有效,直到电平被拉为高电平才失效。下升沿触发是当信号从高电平变为低电平时的瞬间有效,不管后面再变为低电平或高电平都无效。

数字电路中的“1”和“0”指的就是电平的高低

这种电平触发方式在数字电路的应用上最为常见,在工业自动化应用的控制程序上也很常见。我们最为熟悉的就是PLC在编写程序时用到的上升沿和下降沿指令,这些指令是集成在PLC内部的程序块。如果我们不选择PLC作为控制部件,而是要用单片机来控制,那么上升沿和下降沿的功能我们该如何实现?单片机内部是没有这些编辑好的程序块的,要实现这个功能就必须自己编写程序。程序该如何编写,下面我们结合程序深入地来讲一讲这个问题。

图1

首先,程序中使用的变量定义如图1。

图2

主程序如图2。

图3

输入上升沿、输入下降沿是如何通过程序产生的,如图3。

图4

输出上升沿、输出下降沿是如何通过程序产生的,如图4。

以上只演示了输入、输出IO口的上升沿和下降沿产生的过程。如果我们需要用到其他"位变量"的上升沿或下降沿,同样可以用这种方式实现。

下面我把完整的程序附在后面,有需要的老铁们可以复制出来使用

/***********************实现上升沿下降沿的程序源代码*************************/

#include <STC15F2K60S2.H>

#define FOSC 24000000L

void get_input(); //输入函数

void out_output(); //输出函数

char underedge, uperedge; //输入上升沿、下降沿变量

char out_underedge, out_uperedge; //输出上升沿、下降沿变量

char inputimg = 0, outputimg = 0; //输入、输出映像变量

char inputimgtmp = 0, outputimgtmp = 0; //输入、输出临时映像变量

void main()

{

while(1)

{

underedge = 0; uperedge = 0; //输入上升沿清除。因为每扫描一次上升沿都

//会被复位,所以上升沿的持续时间是一个扫

//描周期。

get_input();

if(uperedge & 0x1) //检测是否有输入上升沿出现,有则执行流程程序。

{

//此处编写流程处理程序

}

if(underedge & 0x1) //检测是否有输入下降沿出现,有则执行流程程序。

{

//此处编写流程处理程序

}

outputimg |= 0x1; //IO口第一位输出

out_underedge = 0; out_uperedge = 0; //输出上升沿清除。下降沿的持续时间

//与上升沿相同。

out_output();

}

}

void get_input()

{

int i;

bit a, b;

if(P20) //P20 = 1,表示输入口为高电平,无输入。

inputimgtmp &= 0xfe; //无输入,清除临时映像的相应位。

else

inputimgtmp |= 0x1; //有输入,置位临时映像的相应位。

for(i = 1; i < 256; i = i * 2)

{

a = inputimg & i; //取出输入映像和临时映像的值

b = inputimgtmp & i; //在下面比较。

if(a != b) //输入映像和临时映像的值出现变化,

//说明有上升沿或下降沿出现。

{

if(a) //输入映像相应位为1,置位下降沿位标志。

underedge |= i;

else //输入映像相应位为0,置位上升沿位标志。

uperedge |= i;

}

}

inputimg = inputimgtmp; //临时映像转存入输入映像

}

void out_output()

{

int i;

bit a, b;

for(i = 1; i < 256; i = i * 2)

{

a = outputimgtmp & i; //取出输出映像和临时映像的值

b = outputimg & i; //在下面比较。

if(a != b) //输出映像和临时映像的值出现变化,

//说明有上升沿或下降沿出现。

{

if(a) //输出映像相应位为1,置位下降沿位标志。

out_underedge |= i;

else //输出映像相应位为1,置位下降沿位标志。

out_uperedge |= i;

}

}

outputimgtmp = outputimg; //输出映像转存入临时映像

P10 = outputimg & 0x1; //IO口第1位输出

P11 = outputimg & 0x2; //IO口第2位输出

}

单片机芯片74HC595的引脚图详解

14脚:DS(SER),串行数据输入引脚

13脚:OE,%20输出使能控制脚,它是低电才使能输出,所以接GND

12脚:RCK,存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存带存储寄存器。

11脚:SCK,移位寄存器时钟引脚,上升沿时,移位寄存器中的bit%20数据整体后移,并接受新的bit(从SER输入)。

10脚:MR,低电平时,清空移位寄存器中已有的bit数据,一般不用,接%20高电平即可。

9%20脚%20:串行数据出口引脚。当移位寄存器中的数据多于8bit时,会把已有的bit“挤出去”,就是从这里出去的。用于595的级联。

Qx:并行输出引脚

使用参数VCC:2V~6V,5V最好

I%20Qn:+-%2035mA

注意第一个从SER送入的bit将会从Q7出去。

74HC595介绍一张图片和一段文字,哪种信息传递方式给人的第一视觉冲击是最大的?我想大家心中都有答案。

这也是我文章标题的来由。废话就到这里,下面我就用图片来分析595这个chip。

74HC595的最重要的功能就是:串行输入,并行输出。3态高速位移寄存器(好腻害的说)

595里面有2个8位寄存器:移位寄存器、存储寄存器

移位寄存器

在我看来,74HC595的移位寄存器工作方式就像shou%20%20qiang弹夹。但是子弹的发射(移位寄存器中的数据转储到存储寄存器),又像是【散x弹】(因为是并行输出嘛)

为什么说和弹夹很像呢?

1、串行输入,已进入的位数据依次下移(所以叫移位寄存器)%20|%20子弹也是一颗一颗上的,先上的子弹,被后上的慢慢往下压。

2、第一个输入的位,是并行输出的最后一个位%20|%20最先进入弹夹的子弹,最后射出。

74HC595的引脚图

14脚:DS,又叫SER 英文全称是:Serial data input ,顾名思义,就是串行数据输入口。

595的数据来源只有这一个口,一次只能输入一个位,那么连续输入8次,就可以积攒为一个字节了。

假如,我们要将二进制数据0111 1111 输入到595的移位寄存器中,下面来上一张动态图,模拟了前2个位输入的情景。

这个图有7帧,做了很久,毕竟不是做美工的。可谓术业有专攻,闻道有先后啊,还是要虚心学习 :)

0111 1111 这个数据完全输入后是这样的

我们还要注意一个脚:11脚,(shift register clock input) 移位寄存器时钟引脚。上升沿有效。

首先我们要介绍这个引脚的作用。

我们知道51单片机的工作离不开晶振,他使CPU的工作步调稳定有序,就像跑步时喊1,2,1的那个人。

那么这里的位移寄存器时钟也是同样的道理,当一个新的位数据要进来时,已经进入的位数据就在移位寄存器时钟脉冲的控制下,整体后移,让出位置。

上升沿:电平从低到高的那个过程。移位寄存器时钟在上升沿这个过程中才起作用。

存储寄存器

到这里我们已经大致讲了怎么上子弹,也把子弹上齐了。下面来将怎么将子弹打出去,也就是怎么将移位寄存器的数据转移到存储寄存器

存储寄存器是直接和8个输出引脚相通的,将移位寄存器的数据转移到存储寄存器后,Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 就可以接受带到我们

开始输入的一个字节的数据。所谓存储寄存器,就是数据可以存在这个寄存器中,并不会随着一次输出就消失,只要595不断电,也没有新 的

数据从移位寄存器中过来,数据就一直不变且有效。新的数据过来后,存储寄存器中的数据就会被覆盖更新。

12脚: (storage register clock input ) 存储寄存器时钟

数据从位移寄存器转移到存储寄存器,也是需要时钟脉冲驱动的,这就是12脚的作用。它也是上升沿有效。

自此,我们已经讲解了一个595正常情况下的工作流程

相关问答

单片机 中,负跳变和高脉冲是什么意思? - tKscDcZrv 的回答 ...

负跳变指平由高变成低的过程,也叫下降沿,高脉冲就是正脉冲,给一个上升沿。其实负跳变就是下降沿的意思,有人故意这样说,也就是电平由高变低的那个...

外部中断0和外部中断1的触发方式?

国内外生产的51单片机,在外部中断0/外部中断1触发方式上略有不同。以ATMEL和飞利浦为代表的51单片机采用了边沿触发和电平触发方式,例如AT89C系列,外部中断既...

单片机 高电平输出是一个阶梯波是怎么回事?

1、阶梯波是阶梯波逆变器或其他类似的逆变器输出的交流电压波形。2、逆变器实现阶梯波输出有多种不同线路,输出波形的阶梯数目差别很大。阶梯波逆变器的优点...

单片机 引脚取反原理?

简单说有如下几种原理:1、用单片机编程控制的结果,此种成本稍高,但闪烁效果多样。2、PLC控制。可编程序逻辑控制器,是一种专门用于接通和断开控制的设备,...

单片机 上电高电平怎么处理?我想上电是低电平,可是在程序里即使上电处理也会有很长时间的高点平?

单片机输出一般是“开漏极”或“开集电极”的,也就是说,在刚上电的瞬间或复位期间,单片机cpu在“尚未正常工作”的时候,输出晶体管处于关断状态,这时由于上...

51 单片机 的哪个口具有外中断的作用?

基本型mcs51单片机有两个外部中断引脚,分别是P3.2和P3.3。现在以stc为代表的生产厂家研发出了多款扩展型的51单片机,以STC8A单片机为例,又增加了P3.6和P3.7...

单片机 复位电路问题 - 真_一匹老马仔 的回答 - 懂得

单片机复位电路相对比较简单,一般来说运用最多的就是上电复位。所谓上电复位是指在单片机通电的瞬间,因各部分电路电压未正常建立,这时单片机会出现...

单片机 为什么能直接烧录程序?

我刚开始学习单片机的时候也有和题主类似的困惑。当时是在大二,刚申请了个淘宝账号不久,刚看了下我的淘宝已购物品,第五件东西买的就是51单片机开发板,前几件...

单片机 里的时钟周期是什么意思?

时钟周期就是单片机的时间,我们人类的常用的最小时间是秒,单片机的时间是微妙,每一个微妙执行一条指令,1秒钟可以执行很多程序,可以跑几圈了,没有时钟单片...

最佳点火提前角是什么 - 汽车维修技术网

[回答]这样效率最高,振动最小,温升最低。影响点火提前量最大的因素是转速。随着转速的上升,转过同样角度的时间变短,只有更大的提前角才能得到相应的提前...

猜你喜欢