0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

串口的基本结构与通信方式

GReq_mcu168 来源:未知 作者:李倩 2018-07-27 10:06 次阅读

通信方式

并行

适合短距离通信,并行通信控制简单、相对传输速度快(8位一起传输)。

串行

只能一位一位的传送。

同步(了解)

建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙。

发送方对接收方的同步可以通过外同步和自同步

异步(常)

以字符(构成的帧)为单位进行传输。数据位从低到高传送。

格式:

这里的空闲时间是任意的。

串行通信的制式(传输方向)

单工(仅能沿一个方向)

半双工(可进行双向,但需分时)

全双工

串行通信的错误校验

奇偶校验

在发送数据时,数据位尾随的1位为奇偶校验位(1/0)。奇校验时,数据中1的个数与检验位1的个数之和应为奇数;偶校验时,数据中1的个数与校验位1的个数之和应为偶数。接收字符时,对1的个数进行校验,若字符不一致,则说明传输数据过程中出现错误。

代码和校验

发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据时,同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较,一致则无差。

循环冗余校验

通过某种数学预算实现有效信息与校验位之间的循环校验,常用语对磁盘信息的传输、存储区的完整性校验。

串口的基本结构

SBUF:51单片机中的特殊寄存器,串行数据缓冲器(一个接收一个发送),两个其实是共用的一个地址99H,但是两个在物理上面是分开的。

当发送使用时,就采用SBUF=XXX; (XXX为需要传送的数据)

当接收使用时,采用XXX=SBUF;

记得因为是串行的所以传输都是一位一位进行的。

T1溢出率:T1计时器的溢出频率(就是计时器每次低位计满向高位进位时间的倒数)

用处:用于计算波特率(每秒传输二进制代码的位数)

实现单片机电脑之间的互相传送字符串通信

工具:STC-ISP

代码:

#include

#include //printf头文件

#define uc unsigned char

#define uint unsigned int

uc flag,i,flag_t,s[50]="",j=0,flag_n=0;

uc code table[]="I get ";

void init()

{

TMOD=0x20; //定时器工作方式,选择了定时器1,工作方式2 八位初值自动重装的8位定时器。

TH1=0xfd; //定时器1初值 ,设置波特率为9600 晶振11.0529MHZ?

TL1=0xfd;

TR1=1; //开启定时器1

SM0=0;

SM1=1; //10位异步接收,(8位数据)波特率可变

REN=1; //允许串行口接收位

EA=1; //允许中断(总闸)

ES=1; //允许串口中断

}

void main()

{

init();

while(1)

{

if(flag==1)

{ if(flag_n!=0) //使第二个及以后I get xx 换行,不与You transfer在一行(单纯为了格式好看)

{TI=1;

printf(" ");

while(!TI);

TI=0;

}

for(i=0;i<6;i++)

{

SBUF=table[i];

while(!TI);

TI=0;

}

for(i=0;s[i]!='#'&&i<50;i++)

{

SBUF=s[i];

while(!TI);

TI=0;

}

flag=0;

}

if(flag_t==1) //发送完毕之后,在电脑端输出。

{

TI=1; //printf之前必须将T1置为1才行。

printf (" You transfer %s",s);

while(!TI);

TI=0;

flag_t=0;

}

}

}

void ser() interrupt 4

{

if(RI) //接收数据,手动将RI清0

{

RI=0;

if(flag==0&&j!=0)//1.循环赋值为''(字符串结尾标志符),j=0,为了第二次传递字符串是又是从头输出

{ //2.flag为0和j不为0时,保证是第二次及以后,传输字符串(控制输出格式)

flag_n++;

for(j=0;s[j]!='#'&&j<50;j++)

s[j]='';

j=0;

}

s[j]=SBUF;

flag=1;

if(s[j]=='#'||j==49) //以'#'作为传送字符串的结尾符,我定义的字符数组最长为50所以49也应该结束。

flag_t=1;

else

j++;

}

if(TI) //发送数据

{

}

}

运行截图:

代码解读:基本上就是几个模块:计时器、中断以及串口通信

中断

寄存器介绍

IE(interrupt enable):(可位寻址)设定各个中断源的打开和关闭

IP(interrupt prior)中断优先级寄存器:(可位寻址)用来设定各个中断源属于两级中断中的哪一级

中断源:

中断响应条件:

1.中断源有中断请求

2.此中断源的中断允许位为1

3.CPU开中断(EA=1)

代码书写:

1.先开总中断EA

2

.然后再开特定的中断去控制

3.如果有特殊需要优先级问题再设置IP

4.中断函数书写

格式

void 函数名() interrupt 中断号(上面图示的序号)

//中断函数返回值一定是void

//函数名随便写

//中断号用来判断是哪个中断源

计时器

寄存器介绍

TCON 支持位寻址 :控制寄存器,控制T1、T0的启动和停止及设置溢出标志

TMOD,不支持位寻址:定时/计数器的工作方式寄存器,确定工作方式和功能

计时器代码书写步骤:

1.EA=1;

2.ETX=1; //开启计时器X中断

3.配置工作方式 TMOD=0x..; //根据自己需求按照上表来配

3.配置计时器初值

//THX=(65535-N)/256;

//TLX=(65535-N)%256;

//N由你要计时的时长决定。计时器计一个数花费一个时钟周期来计算。

4.TRX=1; //开启计时器X

串口通信

寄存器介绍

PCON电源管理寄存器 :(不可位寻址)

用来管理单片机的电源部分,包括上电复位检测、掉电模式

、空闲模式等

SCON:(可位寻址)用以设定串行口的工作方式、接收/发送控制以及设置状态标志

波特率计算

SMOD就是PCON中的第一位,默认为0

fosc为晶振频率,所以自己设定不同波特率时,也要考虑晶振不同的问题。

代码书写

1.上面都书写完毕之后

2.还需要ES=1

3.传输数据时,SBUF=XX

接收数据时,XX=SBUF

4.中断函数书写

一定要将RI清0,但是TI的清0在主函数中进行

//因为TI在中断中进行,(1)没有if(TI)的判断,那么就会和RI的处理混淆(2)如果有TI判断

//那么有可能永远进行不了传输数据,因为最开始TI是为0的,无法进入TI条件,就无传

//输数据(SBUF=XX)。而且在传输数据的时候会又一次进入中断,就是还没处理中

//断就又进入了另外一个中断,导致通信出现异常。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5997

    文章

    43947

    浏览量

    620497
  • 寄存器
    +关注

    关注

    30

    文章

    5020

    浏览量

    117613
  • 串口
    +关注

    关注

    14

    文章

    1482

    浏览量

    74478

原文标题:51单片机串口通信-基础篇

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    有线传输方式串口通信

    在之前的文章中小编介绍了什么是CAN总线,包括CAN总线的数据格式和通信特点等方面的内容,今天将分享串口通信相关知识内容。CAN总线、串口通信
    发表于 06-16 13:53 828次阅读
    有线传输<b class='flag-5'>方式</b>之<b class='flag-5'>串口</b><b class='flag-5'>通信</b>

    QT串口通信的简单使用

    QT串口通信是上位机和下位机通信常用的通信方式, 也是学习QT必须学会的基础知识, 这篇就简单介绍一下QT
    的头像 发表于 01-15 09:27 492次阅读
    QT<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的简单使用

    labview 串口通信中事件结构问题

    `我设计的一个串口通信程序,但在事件结构的程序有问题,按下打开串口控件之后,会一直采集数据,像退出和保存这样的其他的控件就使用不了,程序会不间断的运行,求高手帮忙。`
    发表于 11-07 16:21

    什么是串口通信串口通信的基本方式有哪几种?

    什么是串口通信串口通信的基本方式有哪几种?异步数据的数据发送过程有哪些步骤?串口
    发表于 07-16 08:21

    串口通信的作用及通信方式

    串口通信一、串口通信概念1、串口通信的作用2、串口
    发表于 11-18 08:36

    SCI串口有哪些通信方式

    一、SCI串口介绍随着单片机系统的广泛应用和计算机网络技术的普及,单片机的通信功能越来越显得重要了。单片机通信是指单片机与计算机或单片机与单片机之间的信息交换。通信
    发表于 11-26 06:18

    串行通信方式有哪些?如何使用串口通信

    串口通信原理是什么?串行通信方式有哪些?如何使用串口通信
    发表于 12-10 06:09

    请问串口通信方式有哪些?

    请问串口通信方式有哪些?
    发表于 02-14 07:13

    ARM7串口9位方式多机通信的编程技术

    ARM7串口9位方式多机通信的编程技术,感兴趣都可以看看。
    发表于 02-23 17:37 0次下载

    串口通信最远传输距离能达到多少

    本文首先介绍了串口通信的原理,其次介绍了串口通信结构串口
    发表于 05-22 11:47 5w次阅读
    <b class='flag-5'>串口</b><b class='flag-5'>通信</b>最远传输距离能达到多少

    单片机C语言之串口通信协议

    本文首先介绍了串口的基本结构,其次介绍了串口通信方式,最后详细介绍了单片机C语言之串口
    发表于 05-22 12:37 4617次阅读
    单片机C语言之<b class='flag-5'>串口</b><b class='flag-5'>通信</b>协议

    进行单片机串口通信方式详细说明

    本文档的主要内容详细介绍的是进行单片机串口通信方式详细说明。
    发表于 08-01 17:35 1次下载
    进行单片机<b class='flag-5'>串口</b><b class='flag-5'>通信</b>的<b class='flag-5'>方式</b>详细说明

    51单片机之串口通信详解

    串口通信一、串口通信概念1、串口通信的作用2、串口
    发表于 11-11 10:36 13次下载
    51单片机之<b class='flag-5'>串口</b><b class='flag-5'>通信</b>详解

    STM32实战-串口通信方式汇总

    STM32实战-串口通信方式汇总1.串口基本概念2.串口发送3.串口接收4.接收一帧数据5.
    发表于 12-14 18:39 3次下载
    STM32实战-<b class='flag-5'>串口</b><b class='flag-5'>通信</b><b class='flag-5'>方式</b>汇总

    【分享】什么是串口通信串口常见通信问题如何解决?

    在之前的文章中小编介绍了什么是CAN总线,包括CAN总线的数据格式和通信特点等方面的内容,今天将分享串口通信相关知识内容。CAN总线、串口通信
    的头像 发表于 06-21 17:45 1282次阅读
    【分享】什么是<b class='flag-5'>串口</b><b class='flag-5'>通信</b>?<b class='flag-5'>串口</b>常见<b class='flag-5'>通信</b>问题如何解决?