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

更改下晶振频率:

中断响应的过程演示。

相关推荐
zcmodeltech14 小时前
工程机械与矿山机械沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的露天开采-井下掘进-智慧矿山全场景联动方案
数据库·stm32·单片机·嵌入式硬件·制造·多分类
云泽80815 小时前
深入浅出 STM32(十五):多通道GPIO驱动的软件抽象与实现
stm32·单片机·嵌入式硬件
嵌入式阿蔡16 小时前
OTA 实战五(收官):量产落地 Checklist —— 版本号 / 防回滚 / 灰度 / 断点续传
网络·stm32·单片机·嵌入式硬件·嵌入式实时数据库
遇雪长安18 小时前
STM32_BOOT未引出_串口升级系统Bootloader方案
stm32·单片机·嵌入式硬件·bootloader
tangchao340勤奋的老年?19 小时前
AMT630C 开阳电子 RISC‑V 显示 SoC|工业级双屏驱动 MCU,带 CAN 总线,国产 HMI 控制芯片
单片机·嵌入式硬件
youshi666819 小时前
stm32-SPI通信协议、软件SPI
stm32·单片机·嵌入式硬件
振南的单片机世界19 小时前
EXTI“一线多挂”陷阱:PA0和PB0同时触发,中断函数懵了
arm开发·stm32·单片机·嵌入式硬件
oshan201221 小时前
零基础STM32入门教程--04-工程文件分析
stm32·单片机·嵌入式硬件
lhbweilai21 小时前
FreeRTOS(事件组)
stm32·单片机·嵌入式硬件
LCG元21 小时前
STM32 HAL 库串口 DMA + 空闲中断接收不定长数据:从原理到量产级稳定方案
stm32·单片机·嵌入式硬件