C51单片机————串行接口


Created with Raphaël 2.1.2张三张三李四李四嘿,四哥,我最近在学习串行接口?想了想!有我啥事嗯!牛逼我有点不懂?哪里不懂哇额! 都不懂。。。

1.引文

计算机和外界的信息交换叫做通信。

串行和并行

基本的通信方式分为2种:串行和并行
串行通信:这种通信方式发送/接收数据是一位一位按顺序(bit)的进行传输的(相当于公路的单行道吧!)

传输线多(每次多传一位就多一根线)、价格贵、适合近距离的传输、传输速度快

并行通信:发送/接收数据可以是多位同时传输的(到底是多少位一起传输,要看硬件设备了)

传输线只需要1到2根就可以、便宜、远距离传输、但是速度慢(别人一次传几个,你一次传一个你说慢不慢)


同步和异步

这个怎么区分呢?
根据帧信息的格式区分的!
同步:我的理解就是通信的双方拥有相同的时间线,严格按照此时间线进行通信
1. 通信的数据格式是 :同步字符–连续的数据–校验字节
2. 速度高于异步,硬件结构高
异步:可以看做不同时间轴的操作
1. 通信的数据格式是 :一帧数据为11位的帧格式:起始位–数据8位–校验位-停止位 (1帧==11位)

通俗点的理解:
大家都买过衣服吧!在商场去买和在某宝上买就像同步和异步操作。
在商场买衣服,需要选衣服,选了衣服后让服务员帮你包好,然后结束自己带回家,这个过程是连续的。
在某宝上呢?你只是需要选衣服、下单然后就等着收快递了,虽然衣服还没有送到家,但是你买衣服的任务已经完成了。商家接到你的订单后,就会加紧安排送货,当然这一切已经跟你无关了,你已经支付完成,想什么就能去干什么了。
额。。。好像也不通俗。。。


通信方向

单工传送:单行道,数据只可以朝着一个方向!
半双工:可以双向传送的车道,但是两个方向不可同时使用(不能同时发送接收)
全双工:双向传送的车道,可同时发送接收。

2.串行通信的任务

Created with Raphaël 2.1.2李四李四张三张三CPU处理什么数据的?知道吗额,并行数据对了!那他怎么处理串行数据呢?对啊!怎么处理啊?以手蒙面状。。。

串行接口就在这儿起作用了?
CPU处理并行数据的,让他处理串行数据的话就需要串行接口的帮忙了!CPU还要遵守串行通信的协议(通信双方都需要遵守的约定,约定有:数据格式、同步方式、传送步骤、检查/纠错的方式、控制符的定义。。。)

串行接口的任务:

  1. 数据的处理(不同的串行通信有不同的数据格式)
  2. 并行数据和串行数据的转换
  3. 数据的传输速度
  4. 传输的错误检测(奇偶校验位、校验码。。。)

串行接口的类型:

串行通信接口Serial Communication Interface:设备之间互联接口,互相之间距离较长

串行扩展接口Serial Expand Interface: SPI IIC。。。

Baud rate | bps | Band width:

Baud rate波特率:单位时间里传输的二进制代码有效位数

bps比特率:单位时间里传输的码元个数

Band width带宽:
1. 模拟信号中:带宽是信号所占频率
2. 数字信号里:带宽是传送数字信号速率

单片机中波特率和比特率数值上相同(一个状态对应一个1或0)


3.单片机串行口结构和工作原理

51单片机的串行口:可编程、全双工。
1. 可作为UART(Universal Asynchronous Receiver/Transmitter)
2. 同步移位器
3. 帧格式:8位、10位、11位
4. 可设置波特率

SBUF:发送和接收的数据缓冲区
SOCN:串行口控制寄存器 (98H)
PCON:电源控制寄存器 (87H)
TI:发送中断标志位 (方式0:发送结束硬件置1 发送前软件置0)
RI:接收中断标志位 (方式0:发送结束硬件置1 发送前软件置0)
TXD: P3.1引脚,发送数据口
RXD: P3.0引脚,接收数据口

发送和接收SBUF可同时发送接收(它们在物理上独立的)但是它们公用 SFR地址99H。
发送时:data 写入SBUF ,经过TXD发出
接收时:存储RXD接收到的数据


(1)SCON 串行口控制寄存器(地址98h)

SCON (98H)
SM0 SM1 SM2 REN TB8 RB8 TI RI
方式选择 多机通信控制 串行接收允许 欲发的第九位 欲收的第九位 发送中有无中断 接收中有无中断
有四种方式0、1、2、3 方式2、3时候用 0禁止、1允许 方式2、3中 方式2、3中 软件清零 硬件置一 软件清零 硬件置一

(2)PCON 串行口控制寄存器(地址87h)

PCON (78H)
SMOD X X X GF1 GF0 PD IDL
波特率加倍位 X X X 通用标志位 掉电方式位 待机方式位
1加倍、0不加倍 X X X 用户可作为软件使用标志 1激活掉电工作方式 1激活待机工作方式

4.单片机串行口工作方式


方式0:

方式0 :移位寄存器IO方式
TXD:移位数据IO
RXD:移位时钟IO
波特率 = fosc / 12
8位 数据为一帧,不设置其实和停止位,从最低位开始发送
发送过程:(1).写SBUF(2).8位数据发完,TI=1(3).发送下一数据
接收过程:(1).REN=1(2).8位数据收完,RI=1(3).读SBUF
功能:(1)短距离单片机之间数据传输(2)扩展输出接口 。。。

方式1:

方式1:波特率可变10位异步通信方式
TXD:串行数据发送端
RXD:串行数据接收端
波特率 :

baudrate=2SMOD32∗(T1的溢出率)baudrate=2SMOD32∗(T1的溢出率)

baud rate = \dfrac{{2^{SMOD}}}{32}*(T1的溢出率)

波特率 :

baudrate=2SMOD32∗fosc12∗(256−X)baudrate=2SMOD32∗fosc12∗(256−X)

baud rate = \dfrac{{2^{SMOD}}}{32}*\dfrac{{fosc}}{12*(256-X)} >> X为T1的计数初值 T1工作在方式2(这是计数器的工作方式哈)

10位 数据为一帧,从最低位开始发送 起始位和停止位是自动插入的
使用了T1计数器

方式2:

方式2:波特率固定11位异步通信方式
TXD:串行数据发送端
RXD:串行数据接收端
波特率固定 :

baudrate=2SMOD∗fosc64baudrate=2SMOD∗fosc64

baud rate = \dfrac{{2^{SMOD}}*fosc}{64}

11位 数据为一帧,从最低位开始发送
起始位和停止位是自动插入的
第九个数据是TB8、RB8(分别是发送和接收)位提供的

方式3:

方式3:波特率可变11位异步通信方式 (数据格式同方式2、波特率计算同方式1)
TXD:串行数据发送端
RXD:串行数据接收端
波特率可变同方式1 :

baudrate=2SMOD32∗fosc12∗(256−X)baudrate=2SMOD32∗fosc12∗(256−X)

baud rate = \dfrac{{2^{SMOD}}}{32}*\dfrac{{fosc}}{12*(256-X)} >> X为T1的计数初值 T1工作在方式2(这是计数器的工作方式哈)

11位 数据为一帧,从最低位开始发送
起始位和停止位是自动插入的
第九个数据是TB8、RB8(分别是发送和接收)位提供的

5.单片机串行口编程

编程要点:
1. 波特率计算
2. 控制字填写
3. 两种工作方式选择(查询和中断)
4. 两方波特率一致,可约定某一个标志字符作为发送数据的开始(多机通信中,标志字符就是各分机的地址)

  • 查询方式:
    发送程序:发数据— 查询TI — 发送下一个数据(先发后查)
    接收程序:查询RI—读数据—查询RI—读下一个数据(先查后收)
  • 中断方式:
    发送程序:发数据—等待中断 — 发送下一个数据
    接收程序:等待中断,在中断中再接收下一个数据

两种方式中都要注意清TI、RI


ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV TMOD,#20H ;TMOD设置  T1方式二MOV TH0 ,#3cH;TL0 = #0b0H;  ;初值MOV SCON,#40H  ;SCON设置 串行方式1MOV R0,#20h    ;发送的数据缓冲区起始地址MOV R7,#32     ;发送的数据个数SETB TR1      ;启动定时器,TRx = 1SETB EA     ;中断总开关SETB ET1    ;定时器0  允许中断LOOP:MOV SBUF,@R0;发送的数据放到缓冲区JNB TI,$    ;  TI==0 死循环CLR TI      ;软件清零INC R0      ;下一个数据DJNZ R7,LOOP;是否发完
HERE:AJMP HERE
END
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV TMOD,#20H ;TMOD设置  T1方式二MOV TH0 ,#3cH;TL0 = #0b0H;  ;初值MOV SCON,#50H  ;串行方式1   可接收RENMOV R0,#20h    ;发送的数据缓冲区起始地址MOV R7,#32     ;发送的数据个数SETB TR1      ;启动定时器,TRx = 1SETB EA     ;中断总开关SETB ET1    ;定时器0  允许中断LOOP:JNB RI,$    ;RI ==0 死循环 CLR RI      ;软件清零MOV @R0,SBUF;发送的数据放到缓冲区INC R0      ;下一个数据DJNZ R7,LOOP;是否发完
HERE:AJMP HERE
END

如有错误!请多多包含,方便的话留个言!我好马上修改。

C51单片机————串行接口相关推荐

  1. 【C51单片机学习笔记--DS1302时钟芯片蜂鸣器I2C总线AT24C02存储器】

    C51单片机学习笔记–DS1302时钟芯片&&蜂鸣器&&I2C总线&&AT24C02存储器 文章目录 一.DS1302时钟芯片介绍 二.DS1302时钟 ...

  2. c语言编程流水灯与交通灯实验,C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟.doc...

    C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟 学 号: 班 级: 自动化10班 姓 名: 张 指导老师: 胡 2012.12 单片机核心板实验要求 流水灯实验 实验目的: 简单I/O引 ...

  3. C51单片机学习思维导图

    C51单片机学习总结: ​​​​​​​​​​​​​​​​​​ 图片链接 由于原稿丢失,只有图片链接

  4. C51单片机————总线与系统扩展

    C51单片机----总线与系统扩展 Created with Raphaël 2.1.2张三张三李四李四四哥,IO口不够用怎么办?你可以进行系统扩展!什么鬼?那是什么东西?...看书去 1.引文 前面 ...

  5. C51单片机————汇编与C语言

    C51单片机-----汇编与C语言 如有错误,请留言指正!!!

  6. C51单片机——指令系统

    C51单片机--指令系统 图片可点击放大观看 如有错误,请多多包含!   可以的话请留言,好及时修改!

  7. C51单片机数码管动态显示

    数码管作为最廉价的输出设备,在各种自动化设备中有很大的应用,最简单普通的显示方式为动态刷新显示,称为假动态显示,即通过分时扫描每一位,利于人眼的视觉停留现象,造成一种静态显示的效果,如下图所示: C5 ...

  8. c51单片机烧录程序 控制台显示正在检测目标单片机

    问题 c51单片机烧录程序 控制台显示正在检测目标单片机 详细问题 笔者使用单片机型号STC89C52, 进行程序烧录.控制台显示正在检测目标单片机 解决方案 将单片机型号由STC89C52更改为ST ...

  9. 基于C51单片机的万年历设计(LCD1602显示)

    C51单片机万年历设计 注:该程序基于普中科技C51 V2.2开发板设计,库函数和硬件资料均来自普中科技,侵删.main.c大部分为原创,如有雷同,纯属巧合. 名称:C51万年历. 硬件:以C51芯片 ...

最新文章

  1. Go 学习笔记(3)— 包概念、包特点、包名约束、main 包、包的声明、包的引用、包初始化
  2. cppcheck编译安装命令
  3. cisco pix防火墙命令使用
  4. Python可视化应用实战-三万字长文(建议收藏)matplotlib可视化实例,实操有效
  5. 9行代码满分 【C语言】 L1-062 幸运彩票 (15分)
  6. SUSE11 搭建iscsi target 配置
  7. 智慧城市产业图谱研究报告(2020年)
  8. BookKeeper总结
  9. 【函数计算月报】2018年10月刊
  10. access游戏库不显示 ea_全球游戏公司营收一览:腾讯连续第六年霸榜
  11. 整数实例hdu2041(超级楼梯)
  12. spring事务传播机制源码学习笔记
  13. 易优CMS:arcview的基础用法
  14. cada0图纸框_求标准CAD图纸(A0、A1、A2、A3、A4)图框(外框、内框)、标题栏及明细栏大小样式字体是多大?...
  15. ubuntu mysql卸载教程_ubuntu下安装mysql及卸载mysql详细教程/方法
  16. python爬取百思不得姐视频代码
  17. 锁屏显示Activity
  18. Application启动流程
  19. Qt加载百度地图和谷歌地图
  20. 局域网聊天软件源代码(包括语音聊天)

热门文章

  1. antd 下拉框怎么联动_Antd的Table组件嵌套Table以及选择框联动操作
  2. 为什么用c语言程序中的if语句实现从1加到100最后的结果是负数,用C语言程式计算从1加到100的程式是怎样的?...
  3. java实用类_Java—实用类
  4. Git 学习笔记(二)分支管理
  5. Linux从入门到精通——文件传输
  6. Android群英传笔记——摘要,概述,新的出发点,温故而知新,能够为师矣!
  7. GitHub中watch star fork三个按钮干什么用的?
  8. 我学习设计模式的一些所想所得
  9. 如何解决Error: failed PB timebomb check
  10. 如何取得事件中鼠标坐标