历史上的今天
今天是:2025年08月05日(星期二)
2021年08月05日 | 8051外部中断0解析
2021-08-05 来源:eefocus
程序实现功能:
在实验板上左下方有一个黑色的独立按键(K3), 当我们按下它时, D1(LED灯)的状态就会取反.
思路分析:
我们令IT0 = 1, 即选择了"边沿触发", 所以每当独立按键按下时, 中断处理函数EX_INT0()就会执行.
当进入中断处理函数执行时, 若P32引脚的电平为低电平, 则说明K3按键已按下; 若P32引脚的电平为高电平, 说明K3按键已抬起.
"低电平触发"和"边沿触发"的区别:
①"低电平触发"是指在电平处于低电平态的时间内触发.
②"边沿触发"是指在电平由高 -> 低或由低 -> 高的一瞬间触发.
独立按键电路原理图:
抖动的处理:
为什么我们要在中断处理函数开始执行时先加入1ms延时模块, 是因为按键在按下或抬起时电平不是一下子稳定到低或高状态的, 而是在经历一小段时间的电平抖动后才到达稳定态: 为了对P32引脚电平判断的准确性, 先加入1ms的延时模块, 当电平稳定之后 再行判断.

程序源代码:
#include void delay()//获得1ms延时 { TH0 = 0xFC; TL0 = 0x18;//65536 - 1000 = 64536 = FC18H TR0 = 1;//开启定时器0 while(TF0 == 0);//等待定时器0计数溢出 TF0 = 0; TR0 = 0;//暂停定时器0 } void EX_INT0() interrupt 0//外部中断0处理函数 { delay();//1ms延时消抖 if(P32 == 0) { P20 = ~ P20;//D1电平翻转 } } int main() { TMOD = 0x01;//设置定时器0的工作模式 TR0 = 0; TF0 = 0; P20 = 0;//开发板上D1亮 EA = 1;//中断总开关打开 EX0 = 1;//外部中断0开关打开 IT0 = 1;//边沿触发 //IT0 = 0 -> 低电平触发中断, IT0 = 1 -> 边沿触发中断 while(1) { ; } return 0; }
史海拾趣
|
51单片机采用485总线通信接收来自PC机的数据,单片机程序怎么编写呀?和232的有什么不同的地方?也要初始化串口么,我想采用中断的方法接 是不是和串口232的设置一样,先要初始化串口,设置波特率,开中断等等?… 查看全部问答> |
|
各位老师好! 我在使用protues仿真时出现以下问题,无法解决,请你们帮帮忙看看是什么原因,谢谢! 在keil c 编译、连接完成后,就会出现一个提示框显示 Fail to connect command socket to port 127.0.0.1:8000 GLE=00002743 点 ...… 查看全部问答> |
|
QuartusII编译以后不能产生POF文件往往是由于没有选择EPCS器件造成,下面就如何选择EPCS介绍以下步骤: 1 打开QuartusII2 打开“Assignments/Device”3 点击“Device anf Pin Option/Configuration” 4 选择“Use Configuration device”在下拉 ...… 查看全部问答> |
|
请教一下各位,在fpga 中 从sdram 中读取图像数据时, 怎么能够做到把每一帧分别识别出来?另外,在考虑时序问题时是怎么计算的,比如 主时钟60Mhz ,大小640*480模式下。 还有就是如何根据这些计算出来的延迟周期 延迟为基准,产生不同宽度和周期的 ...… 查看全部问答> |
|
本品为工程富余的全新短距离射频传输模块,可以用做简单的家电无线控制、简单的无线数据传输、 无线遥控器,或者串口1-》无线发送-》无线接收-》串口2 模式的无线串口数据传输。主要芯片:MSP430 8位单片机CC1020 射频芯片射频PA芯片粗略参数:无线 ...… 查看全部问答> |




