单片机学习5——外部中断程序

cpp 复制代码
#include<reg52.h>

unsigned char a;
sbit lcden = P3^4;

void main()
{
	lcden=0;
	EA=1;
	EX0=1;
	IT0=0;
 	a=0xF0;         //点亮4位小灯
	while(1)
	{
		P1=a;
	}
}

//中断服务程序
void ext0() interrupt 0	 // 0 表示的是外部中断源0
{
  a=0x0f;                // 中断处理完,再返回主程序
}

void ext0() interrupt 0: 这是一个外部中断源0的中断服务程序。中断源0对应的是单片机上的P3的2端口,也就是P3.2。

如果写的是1,则对应的是定时器/计数器0。

一旦产生中断,就是执行中断服务程序。

那如何开中断呢?

IT0=0:IT0是低电平触发方式选择位,表示的是低电平触发。P3.2变为低电平,就触发中断。

这句话很重要,这是触发的起点。

然后按照这个图,在红框中按从左到右的顺序执行,设置相应的值即可。

EA=1;

EX0=1;

另外,这些位都已经在头文件中声明好了。

LCDEN网络标号是连到:

代码中LCDEN赋值了一个低电平。那么CSDA就得到了一个低电平,也就是单片机P3.2得到了一个低电平,那么就触发了中断服务程序。

中断服务程序将a的值改成了0x0F,那么LED的灯的点亮就发生了变化。

LCDEN网络标号接到的是单片机上的P3.4上,所以需要进行下声明:

sbit lcden=P3^4;

更改下晶振频率:

中断响应的过程演示。

相关推荐
浮若于心1 小时前
数码管LED显示屏矩阵驱动技术详解
单片机·嵌入式硬件
getapi2 小时前
单片机如何通过串口与上位机进行数据交换
单片机·嵌入式硬件·mongodb
kyle~2 小时前
嵌入式---零点漂移(Zero Drift)
单片机·嵌入式硬件
郝亚军3 小时前
MCU中的BSS和data都占用SRAM空间吗?
单片机·嵌入式硬件
&Cheems3 小时前
ZYNQ笔记(九):定时器中断
单片机·嵌入式硬件·fpga开发
雾削木3 小时前
WEMOS LOLIN32 开发板引脚布局和技术规格
单片机·嵌入式硬件
你好,奋斗者!5 小时前
STM32的三种启动方式
stm32·单片机·嵌入式硬件
qq_401700416 小时前
STM32配置系统时钟
stm32·单片机
qq_282195317 小时前
Cypress EZ-USB CX3 适配输出imx586相机
单片机·嵌入式硬件·数码相机
我命由我123459 小时前
Keil MDK 编译问题:function “HAL_IncTick“ declared implicitly
c语言·开发语言·c++·单片机·嵌入式硬件·visualstudio·嵌入式