51单片机学习篇-- --串口通信笔记

开篇先说一句废话····
本旺名字叫萨摩耶,,Please 叫我旺财,,,哈哈,招财进宝嘛!

废话

因为是通过观看郭天祥《新概念51单片机C语言教程》在B站的视频来学习的,所以有些内容加快学习的,(毕竟人家是十天学会单片机,哈哈哈),所以先来总结一些串口通信的笔记,然后接着学习吧。说半天废话,主要的意思就是这篇内容是笔记,是我认为重要的内容,一定会有遗漏,详细参考郭天祥《新概念51单片机C语言教程》。

串口通信概念

计算机通信分为串行通信和并行通信,我们主要学习串行通信。
串行:将数据分成一位一位的形式在一条传输线逐个传送。而串行通信也有两种形式:异步和同步

异步:

  • 以字符为单位
  • 各帧之间还有间隔
  • 效率不高

同步:要建立发送方时钟频率对接收方时钟频率的直接控制

  • 外同步
  • 自同步
    这两种同步的目的都是为了两方的时钟一致

错误校验:判断传输过程中内容是否出

  • 奇偶校验
  • 代码和校验
  • 循环冗余校验

比特率(波特率):即串口通信中数据传输速率

  • 每秒钟传输二进制代码的位数
  • 单位:位/秒(bps)
  • 波特率与传输距离成正比

常见接口

  • RS-232C接口

    定义数据终端(DIE)与数据通信设备(DCE)之间物理接口
    规定使用25针连接器
    TXD:25针–>2 9针–>3
    SGND:25针–>7 9针–>5
    RXD:25针–>3 9针–>2
    存在问题:
    传输距离短、传输速率低
    电平偏移
    抗干扰能力差(不得不采用比较大的电压振幅)

  • RS-442A接口

输入驱动器为双端平行驱动器
差分接收器可到分辨率200mv以上的电位差
90kbps时,传输距离为1200m

  • RS-485接口
    多发送器标准
    传输距离可达1200m,速率可达1Mbps
    用在工业控制
  • 80C51串行口
    有两个物理上独立的接受、发送寄存器SBUF
    发送时cpu主动完成的,不会产生重叠错误

80C51串行口

控制寄存器SCON:用来设定串行口的工作方式、接受/发送控制、设置状态标志。
串行口工作方式有4种,由SCON寄存器种SM0和SM1控制
一般情况下我们使用工作方式1(SM0=0;SM1=1;)10位异步收发(8位数据),波特率可变(由定时器1的溢出率控制)
允许串行口接受位:REN
我们若想接受数据REN必须为1(REN=1;)
发送中断标志位:TI
简单说就是内容发送完毕后,由内部硬件使TI置1,向CPU发出中断申请,必须由软件清0。
接受中断标志位:RI
简单说就是内容接受完毕后,由内部硬件使RI置1,向CPU发出中断申请,必须由软件清0。
波特率倍增位SMOD(PCON^7)
串行口工作方式为1、2、3时,波特率与SMOD有关
SMOD=1 波特率提高一倍
SMOD=0 波特率不变

  • 波特率计算

这里只说方式1的计算公式。
波特率=(2^SMOD/32)*(T1溢出率)
使T1工作在自动装入的8位定时器模式(方式2)
T1溢出率=fosc/[12X(256-TH1)]
可以用软件计算哦!!!

编写步骤

初始化

  1. 确定T1的工作方式(TMOD)
  2. 设T1的初值(波特率初值,8位,TH1和TL1一样)
  3. (看情况)PCON=0x80;(加倍)
  4. 启动T1(TR1)
  5. 中断设置(串口中断、总中断)

可以在主函数中用查询法也可以用中断法写中断函数

接受数据(相对于单片机)
设定一变量存放数据(一般定义为全局变量)
软件清0(RI)
存放SBUF的数据 SBUF–>变量

发送数据(相对于单片机)
设定一变量存放数据(一般定义为全局变量)
SBUF存放数据 变量–>SBUF
检测数据是否发送完毕(可用while循环)
软件清0(TI)

应用

用户在计算机以16进制通过串口发送数据,点亮对应LED并且传回计算机。

#include "reg52.h"
#include "intrins.h"
#define led P2
typedef unsigned int u16;
typedef unsigned char u8;

u8 recData;
void SeriInit(){
	TMOD=0x20;
	TH1=0xF4;
	TL1=0xF4;
	PCON=0x80;
	TR1=1;
	SM0=0;
	SM1=1;
	REN=1;
	ES=1;
	EA=1;
}
void main(){
	SeriInit();
	while(1);
void Seri() interrupt 4{
	RI=0;
	recData=SBUF;
	led=recData;
	SBUF=recData;
	while(!TI);
	TI=0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值