51单片机之串口通讯
2018/3/26
51单片机
1.说在前面
今天,将 51一些最基础的功能全部速通了一遍,问我有什么感受嘛,单片机的确挺好玩的,用心去钻研才最重要,当然,对于51而言,点一个灯,按一个键并不是终点,51还有很多可以玩的地方,等待去探索;
2.串口通信
1.为什么要实现串口通信
对于单片机而言,串口通信相当于单片机的交流工具,使用单片机的串口通讯可以让单片机和直连的电脑连接,或者和一些无线模块(esp8266,HC06)进行连接,达到近程或者远程的连接
2.串口通信的一些基础知识
1.同步通信:需要实现发送方对接收方时钟的直接控制,位和字符均同步
2.异步通信:每个字符要附加两到三位的起止位和校验位,操作方便但是传输效率不高
3.比特率(波特率):每秒传输二进制代码的位数
4.寄存器
SCON:
1.八位寄存器,用来设定串行口的工作方式,设置状态(主要对SM0和SM1进行设置)
在51单片机的工作方式中,采用10位异步收发器的时候较多(8位数据)
2.TI为发送中断位,当发送数据停止时,内部硬件设TI为1,然后用软件再次将其清零,取消中断申请
3.RI为接受中断位,当接受数据停止时,内部硬件设RI为1,然后用软件再次将其清零,取消中断申请
PCON
【51单片机之串口通讯】在PCON的第七位,存在波特率放大设备,当置于1,波特率放大;
3.串口的使用(设置串口初始化函数)
1.确定T1的工作方式(对寄存器TMOD进行编程),设置定时器
2.计算T1的初值(波特率),确定波特率一置
3.启动定时器
4.确定串行口的控制(SCON)
5.注意中断控制(启动中断器)
6.SBUF代表着数据的缓冲区,可以暂时用来存储数据
4.由此看来,串口通信和定时器和中断器可以一起使用的
//实现串口通讯
//确定T1的工作方式(TMOD)
//计算TH1和TL1的初值(高四位和低四位)
//启动串口工具 (启动T1)编程TCON的TR1位置
//确定串行口的控制
//中断控制
#include
typedef unsigned int u16;
typedef unsigned char u8;
void initusart()
{
TMOD=0X20;
//0010 0000控制m1 mo为10,表示8位有效数字定时器
//设置波特率
TH1=0xf3;
TL1=0xf3;
PCON=0x80;
//设置波特率翻倍
TR1=1;
//设置中断开关
SCON=0X50;
//设置单片机的模式:10位异步收发(常用)
ES=1;
//串口中断
EA=1;
//设置总中断
}
void main()
{
initusart();
while(1);
//循环
} void usart() interrupt 4//注意设置中断号
{
u8 recdata=https://www.it610.com/article/SBUF;
//接受缓冲区
RI=0;
//由于硬件将电位拉高,中断,软件可以重新拉低
SBUF=recdata;
while(!TI);
TI=0;
//重新将中断标志位变为0;
}
文章图片
文章图片
推荐阅读
- 深度学习|深度学习典型应用之超分重建
- Python从零到壹|[Python从零到壹] 四十三.图像增强及运算篇之图像点运算和图像灰度化处理
- Material|Material Design 之 Behavior的使用和自定义Behavior
- 2021-05-26 unity学习笔记(22)之任务系统
- Android|安卓 实现网易云音乐底部播放栏效果之使用自定义BaseActivity实现 下
- Vue3学习(十五)之|Vue3学习(十五)之 级联选择组件Cascader的使用
- GUI猜数字游戏,直接开玩...
- Java学习之旅|【数据结构】 哈希表 详解
- Android|Android全面解析之由浅及深Handler消息机制
- Android进阶之路|Android 面试准备进行曲-Handler源码/面试题