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

更改下晶振频率:

中断响应的过程演示。

相关推荐
Polanda。4 分钟前
ADC-逐次逼近型ADC
stm32·单片机·嵌入式硬件
宵时待雨1 小时前
STM32笔记归纳4:I2C
笔记·stm32·单片机
仰泳之鹅1 小时前
【杂谈】stm32重定向printf为什么需要勾选MicroLIB
stm32·单片机·嵌入式硬件
码农三叔2 小时前
(7-3-01)电机与执行器系统:驱动器开发与控制接口(1)电机驱动电路+编码器与反馈
人工智能·单片机·嵌入式硬件·架构·机器人·人形机器人
三佛科技-134163842122 小时前
HN3401_P沟道-30V -4.2A场效应管MOSFET应用场景分析
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
三佛科技-187366133972 小时前
宠物泡泡机方案开发,宠物洗澡打泡机方案
单片机·嵌入式硬件
方芯半导体3 小时前
EtherCAT从站控制器芯片(FCE1353)与MCU(STM32H743)功能板解析!
xml·stm32·单片机·嵌入式硬件·物联网·自动化
上海合宙LuatOS3 小时前
LuatOS socket基础知识和应用开发
开发语言·人工智能·单片机·嵌入式硬件·物联网·开源·php
松涛和鸣3 小时前
66、SPI驱动ADXL345加速度计
linux·运维·单片机·嵌入式硬件·ubuntu
Hello_Embed3 小时前
libmodbus 源码分析(发送请求篇)
笔记·单片机·嵌入式·freertos·libmodbus