单片机学习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;

更改下晶振频率:

中断响应的过程演示。

相关推荐
CC呢22 分钟前
基于单片机万年历/时钟/语音时钟
单片机·嵌入式硬件·万年历·智能时钟
Net_Walke7 小时前
【FreeRTOS 】任务通知
单片机·物联网
酷飞飞7 小时前
ADC常用库函数(STC8系列)
单片机·嵌入式硬件·51单片机·嵌入式·stc8
猫猫的小茶馆18 小时前
【STM32】HAL库中的实现(二):串口(USART)/看门狗(IWDG/WWDG)/定时器(TIM)
arm开发·驱动开发·stm32·单片机·嵌入式硬件·mcu·智能硬件
zhmc18 小时前
MCU程序的编译与链接及格式转换
arm开发·单片机·嵌入式硬件
普中科技18 小时前
【普中STM32精灵开发攻略】--第 10 章 STM32位带操作
stm32·单片机·嵌入式硬件·物联网·arm·普中科技·位带操作
HW-BASE19 小时前
C语言的结构体与联合体
c语言·单片机·嵌入式·编程·c
FightingFreedom20 小时前
GPIO交换矩阵和IO_MUX
单片机·嵌入式硬件·esp32·arduino·esp32s3
HW-BASE21 小时前
C语言控制语句练习题1
c语言·开发语言·单片机·算法·嵌入式·c
echo_pen1 天前
蓝桥杯----锁存器、LED、蜂鸣器、继电器、Motor
单片机·蓝桥杯