51单片机快速入门之中断的应用 2024/11/23 串口中断

news2025/1/16 5:05:02

51单片机快速入门之中断的应用 

基本函数:

 void T0(void) interrupt 1 using 1

{

这里放入中断后需要做的操作

}

void T0(void):

这是一个函数声明,表明函数 T0 不接受任何参数,并且不返回任何值。


interrupt 1:

这是关键字和参数,用于指定这个函数是一个中断服务例程,其中 1 表示中断号。不同的中断号对应不同的中断源.


using 1:

这是另一个关键字和参数,用于指定该中断服务例程使用的工作寄存器组。

在一些微控制器中,允许程序员在中断服务例程中使用不同的工作寄存器组,以避免与主程序中的寄存器冲突。这里的 1 表示使用第1个工作寄存器组


中断号解释:  interrupt

  1. 外部中断0 (INT0)         中断号0
  2. 定时器/计数器0 (T0)    中断号1
  3. 外部中断1 (INT1)         中断号2
  4. 定时器/计数器1 (T1)    中断号3
  5. 串行口中断 (串行I/O)   中断号4

使用中断前必要的设置:

串行通信控制寄存器 SCON 简称:串口控制      图片来源于网络

多机通信控制位 (SM2)
SM2 位主要用于多机通信模式(方式2和方式3)。它的功能如下:

方式0:SM2 必须为0。
方式1:SM2 不使用。


方式2和方式3:

如果 SM2 为0,无论接收到的第9位数据(RB8)是什么,
都会将前8位数据送入接收缓冲区 SBUF 并产生中断请求。

如果 SM2 为1,只有当接收到的第9位数据(RB8)为1时,
才会将前8位数据送入接收缓冲区 SBUF 并产生中断请求;否则,丢弃前8位数据。

 REN:是串行接收允许位

                                        1时:允许串行接收  

                                        0时:禁止串行接收  

  • REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。
快速理解参考:

SM0 SM1 串行通信 模式选择 ,参考前面文章中的传送门

关于 通信模式 设置 的资料 传送门

TI = 1; 表示数据 发送成功     一帧数据   触发中断处理 之后需要手动 =0

RI =1; 表示数据 接收成功      一帧数据   触发中断处理 之后需要手动 =0

复习拓展:
一帧数据的组成
  1. 起始位(Start Bit)
    • 通常是一个低电平(0),用于标记数据传输的开始。
    • 起始位的宽度通常是一个比特时间。
  2. 数据位(Data Bits)
    • 通常包含8位数据,但也可能是5位、6位、7位或9位。
    • 数据位是实际要传输的有效数据。
  3. 校验位(Parity Bit)(可选):
    • 用于检测传输过程中是否发生错误。
    • 校验位可以是奇校验或偶校验。
    • 奇校验:数据位中1的个数加上校验位后为奇数。
    • 偶校验:数据位中1的个数加上校验位后为偶数。
  4. 停止位(Stop Bit)
    • 通常是一个高电平(1),用于标记数据传输的结束。
    • 停止位的宽度可以是一个或两个比特时间。


 51单片机快速入门之串口中断的应用 

举例说明:通过 串口控制1602 显示文字

1602驱动代码(省略),不会写的参考 之前的文章.
串口通信原理:
  • 接收:

RXD串口信息过来,当接收到起始信号,SCON寄存器将打开接收,允许接收,通过T1 计数器/定时器 来产生移位脉冲 由低位到高位传入 移位寄存器,再 传输到SBUF(数据缓冲器) 中 中断后可取出其中内容

串口初始化

  1.  SCON = 0x50;:设置串口工作方式 1(8 位数据,1 位停止位)。
  2.  PCON = 0x00;:不使用倍速模式。

配置 T1 计数器/定时器  

  1. 定时器初始化

    • TMOD = 0x20;:设置定时器 1 为模式 2(8 位自动重装)。
    • TH1 = 0xA0;                                                                                                         设置初值,计算公式为 256 - (晶振频率(晶振频率需要转换成 Hz(赫兹)1 MHz 等于 (10^6) Hz) / 12 / 波特率)。对于 11.0592 MHz 的晶振和 9600 bps 的波特率,初值为 0xFD。1 MHz 等于 (10^6) Hz  11.0592x10^6 =11059200  11059200/12/9600=96  256-96=160   1010 0000 A0
    •  TL1 = 0xA0;
    • TR1 = 1;:启动定时器 1。
  • 发送:

只需要把数据写入SBUF中即可发送

        串口中断代码:


#include <STC89C5xRC.H>

#include <intrins.h>

typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL ;

sbit rs = P3^3;
sbit rw = P3^4;
sbit ep = P3^5;

BYTE  *rr= "WELCOME!1602";
BYTE  *rt= "2024/11/24";
void delay(BYTE ms);    //延时
void lcd_wdat(BYTE dat);//因为不能在声明前使用,这里声明一下函数1602 输出
void lcd_pos(BYTE pos);
void lcd_wcmd(BYTE cmd);

void Uart1_Init(void)	//9600bps@18.432MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xF6;			//设置定时初始值
	TH1 = 0xF6;			//设置定时重载值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时
}






void delay(BYTE ms)
{

    while(ms--);
}



void lcd_wcmd(BYTE cmd)
{


    rs = 0;
    rw = 0;
    ep = 1;

    P0 = cmd;
    delay(500);
    ep = 0;

}



void lcd_wdat(BYTE dat)
{


    rs = 1;
    rw = 0;
    ep = 1;
    P0 = dat;
    delay(500);
    ep = 0;

}

lcd_init()
{

    lcd_wcmd(0x3c);
    delay(50);
    lcd_wcmd(0x0f);
    delay(50);
    lcd_wcmd(0x01);
    delay(50);

}

int main(void)
{

	unsigned char dtt=33;
    P10=0;
    lcd_init();
    lcd_wcmd(0x01);
    delay(50);
    lcd_wcmd(0x80);

    while(*rr) {
        lcd_wdat(*rr);

        rr++;
    }



    lcd_wcmd(0xc0);
    while(*rt) {
        lcd_wdat(*rt);

        rt++;
    }


		Uart1_Init();


    
				
			SBUF=dtt;
				while(TI==0);
				TI=0;
				
		

}

    发现电脑串口无法识别单片机发出的信息2024/11/26

 

                  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2250678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ffmpeg安装(windows)

ffmpeg安装-windows 前言ffmpeg安装路径安装说明 前言 ffmpeg的安装也是开箱即用的,并没有小码哥说的那么难 ffmpeg安装路径 这就下载好了! 安装说明 将上面的bin目录加入到环境变量,然后在cmd中测试一下: C:\Users\12114\Desktop\test\TaskmgrPlayer\x64\Debug>ffmpe…

HCIA笔记6--路由基础

0. 概念 自治系统&#xff1a;一个统一管理的大型网络&#xff0c;由路由器组成的集合。 路由器隔离广播域&#xff0c;交换机隔离冲突域。 1.路由器工作原理 路由器根据路由表进行转发数据包&#xff1b; 路由表中没有路由&#xff0c;直接丢弃该数据包路由表中只有一条路…

IDEA如何快速地重写方法,如equals、toString等

前言 大家好&#xff0c;我是小徐啊。我们在使用IDEA的时候&#xff0c;有时候是需要重写equals和toString等方法的。这在IDEA中已经很方便的给我们准备好了快速的操作了。今天就来讲解一下。 如何重写 首先&#xff0c;打开要重写方法的文件&#xff0c;让鼠标定位到这个文…

跨境物流市场风云变幻,集运企业需精准决策以应对挑战

跨境物流市场&#xff0c;作为全球经济的重要纽带&#xff0c;正经历着前所未有的风云变幻。据最新数据显示&#xff0c;全球海运贸易在2023年实现了2.4%的增长&#xff0c;并预计在今年年底前将再增长2%。这一增长态势虽然积极&#xff0c;但背后却隐藏着诸多挑战与不确定性。…

2024年首届数证杯 初赛wp

“数证杯”电子数据取证分析大赛致力于成为全国第一大电子数据取证分析大赛&#xff0c;面向所有网络安全从业人员公开征集参赛选手。参赛选手根据所属行业报名参赛赛道&#xff0c;比赛设置冠军、亚军、季军奖。所涉及行业包括能源、金融、通信、取证、安全等企业以及各类司法…

电机瞬态分析基础(3):空间矢量

1. 空间矢量 空间矢量的概念在交流电机分析与控制中具有非常重要的作用。将各相的电压、电流、磁链等电磁量用空间矢量表达&#xff0c;可以使三相感应电机的动态方程表达更简洁&#xff0c;为电机的分析与控制带来方便&#xff0c;并有助于对交流电机的矢量控制、直接转矩控制…

C/C++绘制爱心

系列文章 序号直达链接1C/C爱心代码2C/C跳动的爱心3C/C李峋同款跳动的爱心代码4C/C满屏飘字表白代码5C/C大雪纷飞代码6C/C烟花代码7C/C黑客帝国同款字母雨8C/C樱花树代码9C/C奥特曼代码10C/C精美圣诞树11C/C俄罗斯方块12C/C贪吃蛇13C/C孤单又灿烂的神-鬼怪14C/C闪烁的爱心15C/…

LLM应用-prompt提示:RAG query重写、相似query生成 加强检索准确率

参考&#xff1a; https://zhuanlan.zhihu.com/p/719510286 1、query重写 你是一名AI助手&#xff0c;负责在RAG&#xff08;知识库&#xff09;系统中通过重构用户查询来提高检索效果。根据原始查询&#xff0c;将其重写得更具体、详细&#xff0c;以便更有可能检索到相关信…

MTK主板_小型联发科安卓主板_行业智能终端主板基于联发科方案

MTK安卓主板是一款小巧而高效的科技产品&#xff0c;其尺寸仅为43.4mm x 57.6mm。采用了先进的联发科12nm制程工艺&#xff0c;这款主板搭载四核或八核64位A53架构的CPU&#xff0c;主频高达2.0GHz&#xff0c;不但保证了出色的计算能力&#xff0c;还实现了超低功耗的特点。系…

递归---汉诺塔

问题描述 有三根相邻的柱子&#xff0c;标号为A,B,C&#xff0c;A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘&#xff0c;要把所有盘子一个一个移动到柱子B上&#xff0c;并且每次移动&#xff0c;同一根柱子上都不能出现大盘子在小盘子上方&#xff0c;输出每次的移动。…

HTML飞舞的爱心(完整代码)

写在前面 HTML语言实现飞舞的爱心完整代码。 完整代码 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><title>飞舞爱心</title><style>* {margin: 0;padding: 0;}html,body {overflow: hidd…

修改训练策略,无损提升性能

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月29日15点40分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…

@bytemd/vue掘金markdown插件预览内容有误

vue项目使用bytemd/vue 来预览字符串格式的markdown内容&#xff0c;总会多出如图的一段代码&#xff0c; 请问有没有大佬知道为什么&#xff1f; 很急&#xff0c;求教&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 项目介绍 2.0 用户登录功能 3.0 用户管理功能 4.0 影院管理功能 5.0 电影管理功能 6.0 影厅管理功能 7.0 电影排片管理功能 8.0 用户评论管理功能 9.0 用户购票功…

window.structuredClone 深拷贝

概述&#xff1a; structuredClone 是一种新的 JavaScript 原生方法&#xff0c;用于创建一个对象的深拷贝。与传统的浅拷贝方法&#xff08;如 Object.assign 或数组的 slice&#xff09;不同&#xff0c;structuredClone 可以递归地拷贝对象&#xff0c;包括其中的嵌套对象、…

java全栈day10--后端Web基础(基础知识)

引言&#xff1a;只要能通过浏览器访问的网站全是B/S架构&#xff0c;其中最常用的服务器就是Tomcat 在浏览器与服务器交互的时候采用的协议是HTTP协议 一、Tomcat服务器 1.1介绍 官网地址&#xff1a;Apache Tomcat - Welcome! 1.2基本使用(网上有安装教程&#xff0c;建议…

java:拆箱和装箱,缓存池概念简单介绍

1.基本数据类型及其包装类&#xff1a; 举例子&#xff1a; Integer i 10; //装箱int n i; //拆箱 概念&#xff1a; 装箱就是自动将基本数据类型转换为包装器类型&#xff1b; 拆箱就是自动将包装器类型转换为基本数据类型&#xff1b; public class Main {public s…

保持角色一致性!flux新模型redux用法(含模型与工作流)

​ 目录 redux模型是什么&#xff0c;能干啥&#xff1f; 用到的工具有哪些&#xff1f; 工具和模型文件在哪里下载&#xff1f; 整合包&#xff1a; 下载后需要分别放到指定目录&#xff1a; redux模型怎么用&#xff1f; 加载工作流 上传图片和输入提示词 生成结果…

通信原理实验:抽样定理实验

目录 一、实验目的和要求 二、实验内容和原理 实验器材 实验原理 三、实验步骤 (一)实验项目一:抽样信号观测及抽样定理验证 四、实验记录与处理 结论: 辅助学习资料: 五、实验结果及分析 一、实验目的和要求 了解抽样定理在通信系统中的重要性。掌握自然抽样及…

HarmonyOS NEXT应用开发,关于useNormalizedOHMUrl选项的坑

起因是这样的&#xff1a;我这库打包发布出问题了&#xff0c;这个有遇到的吗&#xff1f; 源码里面就没有 request .d.ts,这打包后哪来个这文件&#xff1f;且漏掉了其他文件。 猫哥csdn.yyz_1987 为啥我打包的har里面&#xff0c;只有接口&#xff0c;没有具体实现呢&#x…