
单片机中断系统编程,2
发布日期:2021-05-07 10:13:02
浏览次数:38
分类:精选文章
本文共 1552 字,大约阅读时间需要 5 分钟。
定时器控制与键盘输入处理
定时器配置
本程序主要使用两种定时器,分别用于不同的功能模块。定时器0和定时器1的配置方式各有不同,具体实现如下:
定时器0配置
- 波特率:设置为4800(通过定时器1实现)
- 自动装载:使用定时器1的自动装载功能(TMOD |= 0x20)
- 初始值:高8位设置为0x100,低8位设置为0x100(TL1 = 0x30,TH1 = 0x30)
- 中断处理:允许中断源ET1为1(ET1 = 1)
定时器1配置
- 波特率:设置为2400(默认模式)
- 中断处理:允许中断源ET0为1(ET0 = 1)
键盘输入处理
键盘输入通过中断处理进行响应,分别为以下功能:
键盘中断处理
- 键盘0中断:对应键3,延迟10次后检查键状态
- 键盘1中断:对应键4,延迟10次后检查键状态
串口通信
串口配置为:
串口配置
- 双倍频:通过SMOD = 1实现(PCON |= 0x80)
- 波特率:默认2400
- 中断控制:打开串口中断(ES = 1)
中断服务函数
定时器中断
- 定时器0中断(INT0):每500次定时器中断触发一次
- 定时器1中断(INT1):每1000次定时器中断触发一次
串口中断
- 串口中断(INT4):用于接收和发送数据
数据处理逻辑
数据接收
- 接收数据:通过SBUF存储
- 数据处理:自动清零(RI |= 0)
数据发送
- 发送数据:通过SBUF发送
- 自动清零:TI |= 0
总体结构
程序主要包括以下部分:
初始化函数
void yvchuli() { // 定时器0和1配置 TMOD |= 0x20; // 定时器1自动装载 TH1 = 0x30; // 波特率设置 TL1 = 0x30; // 波特率设置 TR1 = 1; // 启动定时器1 ET1 = 1; // 允许定时器1中断 PCON |= 0x80; // 启用双倍频 SCON |= 0x50; // 配置串口 ES = 1; // 允许串口中断 EA = 1; // 允许中断}
主函数
void main() { yvchuli(); // 初始化 P2 = 0x00; // 初始化输入端 while(1) { // 等待串口中断或定时器中断 }}
中断处理函数
void t0() interrupt 1 { // 定时器0中断服务 a++; if(a >= 1000) { P2 = 0xff; // 全部LED亮起 a = 0; }}void t1() interrupt 3 { // 定时器1中断服务 x++; if(x >= 1000) { P2 = 0x0f; // LED4亮起 x = 0; }}void chuankou() interrupt 4 { // 串口中断服务 receive = SBUF; // 接收数据 RI = 0; // 清零接收标志 SBUF = receive; // 保存接收数据 while(TI == 0); // 等待发送完成 TI = 0; // 清零发送标志}
功能总结
本程序通过定时器和串口配置,实现了多种功能,包括:
- 多个定时器的中断处理
- 键盘输入响应
- 串口数据传输
- LED显示控制
程序结构清晰,中断处理高效,适用于多个定时任务的同时执行。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月19日 16时35分39秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux Ubuntu 装LAMP心得
2023-02-01
linux Ubuntu安装ftp并将本地文件上传到云服务器
2023-02-01
linux udev 自动挂载 SD卡/U盘
2023-02-01
Linux UDP C/S例子
2023-02-01
Linux uniq学习笔记
2023-02-01
Linux unit14
2023-02-01
Linux VFS中write系统调用实现原理【转】
2023-02-01
Linux VI command
2023-02-01
linux vim 插件
2023-02-01
Linux vim 操作大集合,Linux运维工程师收藏!
2023-02-01
Linux vim编辑器
2023-02-01
Linux —— 信号初识
2023-02-01
Linux —— 信号(3)
2023-02-01
Linux —— 信号(4)
2023-02-01
Linux 上 Python 中的环境变量
2023-02-01
linux 上定时任务执行shell脚本
2023-02-01
Linux 上查看和刷新 DNS 缓存
2023-02-01
linux 下 php 安装 libevent
2023-02-01