笔记 学习51单片机串口中断
单片机的串口通信功能是比较常用的功能。
80C51的串行口
我在学习的过程中,觉得SBUF的使用方法是最难的,于是对着这个图和资料一步步理解,才搞明白一点“A=SBUF”和“SBUF=A”的意思。
51单片机通过特殊功能寄存器SBUF对串行接收或串行发送寄存器进行访问,两个寄存器共用一个地址99H,但在物理上是两个独立的寄存器。当接收数据时,写“A=SBUF”,单片机会自动将串口接收寄存器中的数据取走给A;当发送数据时,写“SBUF=A”,程序执行完这条语句便自动开始将串口发送寄存器中的数据一位位从串口发送出去。这些知识可以在书籍上面找到。
对定时器和串口初始化
void uasrinit()
{TMOD=0X20;//选择为定时器1模式,工作方式1,仅用TR1打开启动。TH1=0xfa; //波特率位4800 晶振频率为11.0592MHzTL1=0Xfa;
// PCON=0x80; //把SMOD=1,该状态下串口方式1,2,3的波特率加倍TR1=1;//打开定时器 SM0=0;SM1=1; //串口通信方式1,10位异步收发(8位数据)REN=1; //打开接收ES=1; //串口中断打开 EA=1; //打开总中断
}
中断程序
void uasr() interrupt 4
{int a;a=SBUF;RI=0; //接收中断,与发送中断类似SBUF=a;while(!TI);TI=0; //发送中断标志,在方式1,2,3中由内部硬件置1,不清零就会一直发送。
}
全部程序
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
#include <intrins.h>
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
void uasrinit()
{TMOD=0X20;//选择为定时器1模式,工作方式1,仅用TR1打开启动。TH1=0xfa; //波特率位4800 晶振频率为11.0592MHzTL1=0Xfa;
// PCON=0x80; //把SMOD=1,该状态下串口方式1,2,3的波特率加倍TR1=1;//打开定时器 SM0=0;SM1=1; //串口通信方式1,10位异步收发(8位数据)REN=1; //打开接收ES=1; //串口中断打开 EA=1; //打开总中断
}
void main()
{uasrinit();while(1);
}void uasr() interrupt 4
{int a;a=SBUF;RI=0; //接收中断,与发送中断类似SBUF=a;while(!TI);TI=0; //发送中断标志,在方式1,2,3中由内部硬件置1,不清零就会一直发送。
}
程序运行后的效果
也可以让单片机固定发送指定内容
unsigned char flag,a,i;
unsigned char code table[]="I get ";
void init()
{TMOD=0X20;//选择为定时器1模式,工作方式1,仅用TR1打开启动。TH1=0xfd; //波特率位9600TL1=0Xfd;
// ET1=1;//打开定时器0中断允许EA=1;//打开总中断TR1=1;//打开定时器 SM0=0;SM1=1; //串口通信方式1,10位异步收发(8位数据)REN=1; //打开接收ES=1; //串口中断打开
}
void main()
{ init(); //初始化while(1){if(flag==1){ES=0;for(i=0;i<6;i++){SBUF=table[i];while(!TI);TI=0;}SBUF=a;while(!TI);TI=0;ES=1;flag=0;}}
}
void ti1() interrupt 4
{RI=0;a=SBUF;flag=1;
}
效果
该程序案例来自郭天祥的《51单片机C语言教程》
总结:波特率很重要,在使用串口通信的之前一定要明白单片机的晶振频率。之前的学习因为波特率没有匹配正确,导致输出一段乱码。
笔记 学习51单片机串口中断相关推荐
- 关于51单片机串口中断的理解
关于51单片机串口中断的理解 关于这个问题找了好几个帖子,都没看到能让我明白的.自己就想了想,又看了看.新手不一定说得对,您凑合着看看.要不对的话,望指正. 首先,我们在SCON中设置的时候,一般都会 ...
- 51单片机串口中断功能的设置
51单片机的串口功能就是和外界进行通讯,所谓的"外界"也就是与单片机进行交互的媒介,最常用的就是我们经常使用的计算机.平板或者其他设备(比如另一个单片机配合显示模块使用). 既然和 ...
- 学习51单片机串口工作方式及应用
1.串口控制寄存器SCON SM2:多机通信控制位 REN:允许接收控制位 TB8:发送第九位数据 RB8:接收第九位数据 TI:发送中断标志位 RI:接收中断标志位 2.电源控制寄存器PCON 当S ...
- 使用51单片机采用中断方式进行串口通信的学习记录:
使用51单片机进行串口通信的学习记录之中断方式: 1.51单片机采用中断方式的串口通信过程及程序分析: 所谓中断方式,就是串口收/发标志位出发中断后,在中断中执行既定操作,可通过函数调用来实现. 接收 ...
- 学习笔记之-51单片机特殊功能寄存器
一.前言 学习51单片机的过程中,其实就是学习怎么用它的特殊功能寄存器(有些寄存器是我们看不到的),特殊功能寄存器是80C51单片机中各功能部件对应的寄存器,用于存放相应功能部件的控制命令,状态或数据 ...
- 51单片机串口通信【收集学习向】
本篇整理了学习51串口通信过程中看到的一些比较好的文章,有很多的超链接.并根据自己遇到的情况分析了串口传输乱码的一些原因. 目录 1.原理知识 2.测试程序和虚拟仿真 3.电路设计与公母口连线 电路设 ...
- 用 C学习51单片机——记录 4、中断系统 (1)外部中断
用 C学习51单片机--记录 4.中断系统 用 C 学习51单片机过程与自我拓展--记录(STC89C52芯片) 前言--其实51并不太难,多看 多写代码,多调试,就一定会有所感悟. 所以我在此留下一 ...
- 51单片机串口通信实操(中断函数)
51单片机串口通信实操(中断函数) 详细参考单片机手册 SM0.SM1分别为0,1时为模式一,因为模式一最为常用 REN=1,为接收,REN=0,为不接收 当 SM0,SM1,SM2,REN,TB8, ...
- 51单片机-串口通信(串口向电脑发送信息电脑通过串口控制LED)
文章目录 前言 一.串行通信口的功能以及串行通信口的结构及原理 1.1 串行通信口的功能 1.2 51单片机串口的结构 二.串行通信口的控制寄存器 2.1 串行控制寄存器SCON 2.2 电源控制寄存 ...
最新文章
- 面试 | 22道机器学习常见面试题目
- LeetCode-Balanced Binary Tree
- antd tree 动态添加_一文了解Matlab如何制作动态图像
- 模板 字段_Anki学习之路(08)|什么是Anki模板类型?什么是字段?
- CentOS6.5 将安装光盘作为yum源
- 多值参数-数字累加案例演练
- java g1 gc ref proc_深入理解垃圾收集器的G1及日志分析
- MySQL笔记 4月记
- javascript进阶课程--第三章--匿名函数和闭包
- win10系统更新服务器太慢了,Win10易升更新系统很慢的解决方法
- 蔡为东:行之有效的IT技术团队管理实践
- Golang学习日志 ━━ Gin-Vue-Admin按步骤手动创建api及router、service
- 鸿蒙Ability继承FractionAbility可以直接获取Fraction内的控件
- IOC 之深入理解 Spring IoC
- LR脚本录制3——Fiddler生成LR脚本(推荐)
- html 拓扑图 开源,GitHub - pylixm/zJTopo: 开源拓扑图工具类jTopo的扩展,jtopo是一个不错的拓扑图,基于html5 canvas,功能强大...
- Git config --global user.email or user.name
- sketchup边线设置_SketchUp Pro for mac 背景天空边线样式的设置方法
- 求平方根问题 (C++ 实现)
- DOS游戏手柄键盘映射说明书