51 单片机外部中断测试代码例程
我的公众号目前已搁置(临近注销),所以我将以前所写的文章转移到博客园。
此篇公众号文章创建于 2019-11-18 21:32,内容后期无修改。
不会创建工程的可以跳转:Keil C51 工程的创建(新手向)
例程可能只适用于我购买的单片机开发板,并不完全适合所有 51 单片机,使用测试例程前请检查该程序是否和您的单片机符合,若不符合请根据您的单片机具体情况更改程序。
例程效果:触发外部中断 0 (P3.2) 后,低四位 LED 灯与高四位 LED 灯状态取反。
C 语言代码#
// 实现现象:下载程序后按下 K3 按键可以对灯状态取反。
#include "reg52.h" // 此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; // 对数据类型进行声明定义
typedef unsigned char u8;
sbit k3 = P3^2; // 定义按键 K3
// 延时 15ms 函数
void delay() {
int i = 15000;
while( i-- );
}
// 主函数
void main(void) {
P2 = 0xf0;
// 设置 INT0
IT0 = 1; // 跳变沿出发方式(下降沿)
EX0 = 1; // 打开 INT0 的中断允许
EA = 1; // 打开总中断
while(1);
}
// 外部中断 0 的中断函数
void Int0() interrupt 0 {
delay(); // 延时消抖
if( k3 == 0 ) P2 =~ P2; // 确认按键按下
}
汇编代码#
ORG 0000H
AJMP MAIN
ORG 0003H ; INT0 中断入口
AJMP WBI ; 转中断服务程序
ORG 0030H
MAIN: MOV P2, #0F0H ; 低四位灯亮
SETB IT0 ; 边沿触发中断
SETB EX0 ; 允许外中断 0 中断
SETB EA ; 打开中断开关
WAIT: AJMP WAIT ; 等待中断
WBI: ACALL DELAY ; 调用延时
JNB P3.2, START
ENDED:RETI ; 从中断服务程序返回
START:MOV A, P2
SWAP A ; 交换 P2
MOV P2, A
AJMP ENDED ; 结束中断
DELAY:MOV R0, #80H ; 外循环 128 次
DL2: MOV R1, #19H ; 内循环 25 次
DL1: NOP
NOP
DJNZ R1, DL1
DJNZ R0, DL2
RET
END
作者:xiaoaug
出处:https://www.cnblogs.com/xiaoaug/p/17269106.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)