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

b1e55d5f8504b8bf26f010a263e1d564.png

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

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

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

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

0fe3350ef1432208a87ab7f0df868f16.png

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

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

9ee2d39ad6cbde2ea28d4dc09d7fb606.png

图1

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

5daa5c3af9ad3be60118b0e83fa26d50.png

图2

主程序如图2。

f8bb4c5e766134d7ffcfaa00fa2ee757.png

图3

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

7bfea50022d23fcbb766205a8962a732.png

图4

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

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

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

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

#include

#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位输出

}

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
此装置“风速计”实际上旨在根据电流的变化来测量风的速度。 硬件简介: K1:-- 电源接口。 K2:-- 检查输出电流变化的接口。 风速计电路设计分析: 此装置利用一个事实,即电流对一个比其周围环境温暖的物体的冷却效果。在本例中被冷却的对象是一个晶体管(T2),它与一个二极管连接。为了让它比周围环境更暖需要一个热耦合的晶体管(T1),不断有电流流经它。风速是通过比较通过冷却二极管(T3)的电压来测量的。这两个电压分别供应给各自的非反相和反相输入。 这个放大器,预设了1000的增益,通过一个电流经过电阻器R1通过加热晶体管。当风冷却二极管,二极管的正电压上升(2mV/C)造成运算放大器的电压增加。因此,运算放大器的输出电压上升,为T1提供更多的基础驱动电流,从而产生更多的热量在这个晶体管里。运算放大器因为而尝试弥补温度的下降,从而导致T1集电极电流的增加。 使T2高于5度,高于其周围环境,获得一个高灵敏度通过。这是通过预设仪表,当没有风吹过时,给出一个约5毫安的偏移量。选择电阻R1,以确保通过T1的电流不过高。 在该风速计电路中,T1显示为BC639,但也可以使用BC547型:最大集电极电流必须不大于100毫安。如果电路易于振荡,IC1的增益应该减少——通过增加R5的值。 风速计电路板截图: 说明:这张照片显示了风速探测器的结构。两个晶体管耦合,使用导热胶将它们的扁平面粘合在一起。 测试过程说明: 为了测得根据风速的电流变化,晶体管T1和T2使用导热胶很好地固定在一起,以及适当调整电位器P1。然后输出(电流变化)可以在连接器K2测量。
关于是德科技: 是德科技(NYSE:KEYS)-原安捷伦电子测量事业部,是全球电子测量技术和市场的领导者,致力于推动无线通信、模块化和软件解决方案的持续创新,专注于为客户提供卓越的测量体验。是德科技提供的电子测量仪器、系统、软件及服务广泛应用于电子设备的设计、研发、制造、安装、部署和运营。 前言: 最近一直在玩STM32和LCD屏,从字符到TFT,从1.8到3.5寸,挨个都摸了个摸,公司产品出来了,可一直想用这些东东来作点什么。示波器上班用公司的,虽说也是便携的,但也不好带回家去用呵,看看市场上动辙千元以上,唉,还是自己动手来DIY方便自己,也造福网友。 性能目标: 电源使用二节2500mA锂电,正常工作5小时以上。 数字示波器参数: 主控: STM32F103ZET6 液晶屏: 3.2"TFT320×240 65K彩色LCD显示屏 STM32 FSMC总线驱动 AD: ADS831 IDT7205 最高实时取样率60Msps 8Bits, 取样缓冲器深度:5K 垂直灵敏度:5V,1V,500mV,200mV,100mV,50mV,20mV,10mV; 基准电压使用STM32 DA输出,实现按键调节波形基准。并有位置指示 水平时基范围:2S, 1S,500mS,200mS,100mS,50mS,20mS,10mS,5mS,2mS,1mS,500uS,200uS,100uS,50uS,20uS,10uS,5uS,2uS,1uS,500nS, 水平位置可调并有指示 输入阻抗:≥1MΩ 最高输入电压:50Vpp 耦合方式:AC/DC 实现自动、常规、单次触发方式 ,上升或下降边沿触发 实现计算测量输入信号的频率、周期、占空比、交流峰-峰值、平均值 触发电平高低位置可调,并电压指示 触发时基位置可调,并带指示 实现RUN/STOP功能 使用16个按键,真正作到单键操作以免去组合按键麻烦。 如截图: 功能预留: 波形发生器:使用STM32另一路DA+NE5532实现正弦,三角波,方波输出。 SD卡波形存储输出。 系统串口,可连接电脑输出数据,也可实现远程ISP升级:通过从网上下载升级包文件,方便地升级示波器软件。 注意: 具体看原理图,实现机理:在系统复位后,SYSCLK的第4个上升沿,BOOT管脚的值将被锁存。在开机时使用按键将BOOT0位拉低即可实现STM公司原ISP程序升级,而不再用提前预装IAP程序造成使用麻烦 数字示波器实物展示: 原文出处:https://www.amobbs.com/thread-3706638-1-1.html
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值