当前位置: 首页 > news >正文

(基于江协科技)51单片机入门:6.串口

目录

电平标准

专业术语的解释

UART模式1

串口模式图

串口相关的寄存器

定时器8位定时重装模式

STC - ISP 波特率计算

STC - ISP 串口助手使用

1.串口向电脑每秒发送递增数据 代码:

2.电脑通过串口控制LED 代码:

波特率计算流程


2个小项目的的现象:

                1.串口向电脑发送数据

                2.通过电脑向单片机发送数据,控制P2的亮灭,返回电脑向单片机发送的数据给电脑

                

                51单片机内部自带UART(通用异步发收器)可实现单片机的串口通信

                简单的双向串口通信有两根通信线(发送端TXD和接收端RXD)

电平标准

电平标准就是 规定什么电压是0什么电压是1

                TTL电平:5V表示1,0V表示0

                RS232电平:-3V ~ -15V 表示1,3v ~ 15V 表示0

                RS485电平:两线压差+2 ~ +6V表示1,-2V ~ -6V表示0(差分信息)

                TTL 和 RS232 电平受电线长度影响最大范围只有几十米

                RS485 也受电线长度影响但由两线电压的差值决定数据,所以最长范围有千米

专业术语的解释

                全双工:通信双方可以在同一时刻互相传输数据

                半双工:通信双方可以互相传输数据,但必须分时复用一根数据线

                单工:通信只能有一方发送到另一方,不能反向传输

                异步:通信双方各自约定通信速率

                同步:通信双方靠一根时钟线来约定通信速率

                

                总线:链接各个设备的数据传输线路

UART模式1

51单片机的UART有4种工作模式

                最常用的模式是:模式1,8位UART,波特率可变

                波特率:串口通信的速率(发送和接收各数据位的间隔时间)

                检验位:用于数据检验

                停止位:用于数据帧间隔

                数据位几位就是UART几位

                9位UART,在8为UART上,最后多一位,用于校验

                例如:发送数据为 0000 0011 根据数据中的1的个数继续判断最后一位补什么

                                奇校验:保证数据中1的个数为奇数 0000 0011  补1

                                偶校验:保证数据中1的个数为偶数 0000 0011 补0

数据的发送

                例如:发送 0000  0011 由后向前发送  发送顺序为 1100 0000 

串口模式图

            

串口相关的寄存器

                将SM0 和SM1配置为 0 1 就是UART模式1           

                REN:控制串口接收 1为允许接收 0为禁止接收

                TI 和 RI 分别为 判断发送完成和接收完成的标准

                SMOD控制UART的时钟,记数速度

当TI 等于 0 时,串口发送信息完成后,TI会被自动赋值为1,然后向中断发送请求,TI不会自动赋值回0,所以在中断中需要重新赋值为0

RI类似

                SCAN初始化 为 0101 0000(0x50) 或者0100 0000(0x40)第一个向电脑发送数据不需要接收

                UART利用的是定时器1,这里计时需要用上8位定时重装

定时器8位定时重装模式

                重装模式说的是先前利用 16位模式 计算器每1毫秒发送一次中断,在中断赋值这个操作,重装模式自己附带了

STC - ISP 波特率计算

                生产代码后将第3行和第4行删除

初始化函数:

void UartInit(void)		//4800bps@11.0592MHz
{PCON &= 0x7F;		//波特率不倍速SCON = 0x50;		//8位数据,可变波特率TMOD &= 0x0F;		//清除定时器1模式位TMOD |= 0x20;		//设定定时器1为8位自动重装方式TL1 = 0xFA;		//设定定时初值TH1 = 0xFA;		//设定定时器重装值ET1 = 0;		//禁止定时器1中断TR1 = 1;		//启动定时器1
}

STC - ISP 串口助手使用

                波特率和程序波特率一致

                由于金振的原因,波特率太高会丢失数据,所以常用4800

1.串口向电脑每秒发送递增数据 代码:

#include <REGX52.H>
#include "Delay.h"void UART_Init()
{SCON = 0x50;PCON |= 0x80;TMOD &= 0x0F;TMOD |= 0x20;TL1 = 0xF4;		TH1 = 0xF4;		ET1 = 0;TR1 = 1; 
}void UART(unsigned char num)
{SBUF = num;while(TI == 0);TI = 0;
}int main()
{unsigned int i = 0;UART_Init();while(1){UART(i);i++;Delay(1000);}return 0;
}

2.电脑通过串口控制LED 代码:

#include <REGX52.H>void UART_Init()            //11.0592MHz 4800
{SCON = 0x50;PCON |= 0x80;TMOD &= 0x0F;TMOD |= 0x20;TL1 = 0xF4;		TH1 = 0xF4;		ET1 = 0;TR1 = 1; EA = 1;ES = 1;}void UART_Cpy(unsigned char num)
{SBUF = num;while(TI == 0);TI = 0;
}int main()
{UART_Init();while(1){;}return 0;
}void UART_Routine() interrupt 4
{if(RI == 1){RI = 0;P2 = SBUF;UART_Cpy(SBUF);}
}

波特率计算流程

                

这里计算11.0592MHz的波特率

                256(定时器单个计数器最大值)  -  F4(244)(赋给计数器的值) = 12

每计算12次就溢出一次

这里计算11.0592MHz 每微妙计算几次:

                11.092 除 12 = 0.9216

                0.9216 除 12 = 0.0768(溢出率)

由于 PCON 赋值为 0x80; 其中第八位 SMOD0 = 1;所以 SMOD0指向1

                0.0768(溢出率) 除 1 = 0.0768

                0.0768 除 16 乘 1000 000 (因为单位是MHz) = 4800

http://www.dtcms.com/a/422882.html

相关文章:

  • UE5 小知识点 —— 09 - 旋转小问题
  • Git 暂存文件警告信息:warning: LF will be replaced by CRLF in XXX.java.
  • 石狮网站建设价格万网网站根目录
  • VBA ADO使用EXCEL 8.0驱动读取 .xlsx 格式表格数据-有限支持
  • freeswitch集成离线语音识别funasr
  • 建设网站管理规定源码做网站图文教程
  • Qt 入门:构建跨平台 GUI 应用的强大框架
  • Spring WebFlux调用生成式AI提供的stream流式接口,实现返回实时对话
  • 【学习笔记】高质量数据集
  • 微美全息科学院(WIMI.US):互信息赋能运动想象脑电分类,脑机接口精度迎来突破!
  • 协议 NTP UDP 获取实时网络时间
  • 公司网站可以分两个域名做吗残疾人网站服务平台
  • spark pipeline 转换n个字段,如何对某个字段反向转换
  • 学习React-18-useCallBack
  • 长沙制作网站的公司与传统市场营销的区别与联系有哪些
  • 从语言到向量:自然语言处理核心转换技术的深度拆解与工程实践导论(自然语言处理入门必读)
  • 无人设备遥控器之无线发射接收技术篇
  • 《从数组到动态顺序表:数据结构与算法如何优化内存管理?》
  • 浏览器正能量网站2021网页设计免费模板图片
  • 花生壳内网穿透网站如何做seo优化目前最好的找工作平台
  • 1-wireshark网络安全分析——VLAN基础细节详解
  • android studio 无法运行java main()
  • 如何用 Claude Code 搭建安全、可测、可自动化的 GitHub CI 流程?
  • K6的CI/CD集成在云原生应用的性能测试应用
  • Selective Kernel Networks 学习笔记
  • wordpress 浮动留言框搜索引擎优化是什么工作
  • UNIX下C语言编程与实践9-UNIX 动态库创建实战:gcc 参数 -fpic、-shared 的作用与动态库生成步骤
  • 无锡市建设工程质量监督站网站三星网上商城投诉电话
  • Cesium快速入门到精通系列教程十九:Cesium 1.95 中地图模式
  • 内网穿透部署