中颖单片机_EUART介绍

来源:互联网 由 亚娴汐凡 贡献 责任编辑:鲁倩  

(中颖单片机_EUART介绍图1)


(中颖单片机_EUART介绍图2)


(中颖单片机_EUART介绍图3)


(中颖单片机_EUART介绍图4)


(中颖单片机_EUART介绍图5)


(中颖单片机_EUART介绍图6)


(中颖单片机_EUART介绍图7)


(中颖单片机_EUART介绍图8)


(中颖单片机_EUART介绍图9)


(中颖单片机_EUART介绍图10)


(中颖单片机_EUART介绍图11)


(中颖单片机_EUART介绍图12)

因转码可能存在排版等问题,敬请谅解!以下文字仅供您参考:

数(PAGE) 1/12

实验五:异步串行通讯

实验目标:

学习 8051 异步串行通讯的方法(包括异步串行接收、异步串行发送)

需求资源:

中颖 SH79F32 学习板,串口线,PC 机,串口调试软件

实验操作:

步骤一:烧录程序 1. Option 设置:设置振荡器为外部 32.768KHz,电源为 5V,开启看门 狗和 LVR 复位功能。

若仿真器版本为 V2.2 及 V2.2 以上,需勾选“使 用 Reset Pin 烧写”和“上电之前先下电” 。

2. 将程序烧录到学习板上,运行程序即可。

3. 使用串口线与 PC 机相连,若要使用 USB 转串口模块,则使用 USB 线 与 PC 机相连(使用前必须前安装驱动, 同时连接 USB 线可能造成程序 下载失败,最好烧录程序后再连接)。

步骤二:系统操作

1. 打开串口调试工具,设置串口参数。

若电脑只有一个串口,则串口号为 1,若有 两个串口, 则根据具体情况选择 1 或 2。

若使用 USB 转串口模块, 则串口号为 5。

2. 设置波特率为 9600,数据位 8 位。

3. 点击“打开窗口” 。

4. 输入任意数据。

无论发送什么,MCU 都反馈“收到了”

数(PAGE) 2/12

关键技术说明(包含程序) :

1. 串口通讯 1) 串口通讯原理

串口通讯技术是由电子工业协会在上世纪 60 年代发布的, 如今已发展出多种通讯标准, 包括 RS232、RS485、RS422 等,他们的原理大致上是相同的,区别只是在通讯速度、通讯距 离等电气特性上。

在家用领域应用中, 一般采用 RS232 标准, 其通讯距离短, 通讯速率慢(快 于并口),工作方式为一发一收。

而在工业领域则采用 RS485 和 RS422 等,它们通讯距离长, 通讯速率快,并且允许一发多收。

由于工作领域的关系,本章只以 RS232 作为对象。

如今,串口通讯技术在单片机通讯中占有很大的比重,经常被用于单片机之间的通讯, 以及单片机和 PC 机之间的通讯。

传统 8051 中集成了一组全双工的串行通讯模块, 而中颖 8051 单片机是增强型的 8051, 比传统 8051 多增加了一组全双工的串口通行模块,两组分别为 EUART 和 EUART1。

我们先来看看中颖 8051 学习板上,单片机与 PC 机串口通讯模块电路:

数(PAGE) 3/12

SH79F32 串口通讯引脚图 P3.1——TxD 口,用于串口数据输出;

P3.0——RxD 口,用于串口数据输入。

电平转换电路图 从图中我们可以看到, 串口发送时, 数据通过单片机主机 Txd(P3.1 口)输出, 经 MAX232 电平(TxIN 输入,TxOUT 输出,x=1,2)转换后,再通过串口线被 PC 机的 RxD 口接收。

串口接收时,数据通过 PC 机的 Txd 口发送,通过串口线进入主机的 MAX232 模块(RxIN 输入,RxOUT 输出,x=1,2)进行电平转化,单片机主机通过 Rxd(P3.0)口接收。

而当用于单片机两机通讯时,就需要去掉 MAX232 芯片了。

我们或许会想,为什么与 PC 机通讯时,数据必须通过 MAX232 进行转换了。

原因是两者的电平标准不同。

PC 机串口通讯为 RS232 电平标准, 当 bit=0 时电平为-15V 左右,bit=1 时电平为+15V 左右。

而单片机采用的是 TTL 电平标准,当 bit=0 时电平为 0V, bit=1 时电平为+5V。

若直接将 PC 机的串口数据通过串口线直接接入到单片机的 IO 口,将 损坏单片机。

RS232 标准采用的串口插口为 DB9 针,引脚分布如下图: 串口公头:

数(PAGE) 4/12

PC 机端:串口公头(正面向用户) Pin No. 1 2 3 4 5 6 7 8 9 串口母头: Signal DCD RxD TxD DTR GND DSR RTS CTS ---

单片机端:串口母头(正面向用户) Pin No. 1 2 3 4 5 Signal DCD TxD RxD DSR GND

数(PAGE) 5/12

6 7 8 9

DTR CTS RTS ---

我们在通讯中,一般只使用其中的 3 个引脚,分别是 GND、TxD 和 RxD。

其中主机的 TxD 口通过电平转换后与从机的 RxD 口相连,主机的 RxD 口通过电平转换后与从机的 TxD 相连。

2) 串口通讯相关寄存器

① 波特率

串口通讯速率有两种度量方式,一种为波特率,一种为比特率。

波特率表示的是每秒 传输多少个数据信号,单位为 Bps。

比特率表示的是每秒传输多少个数据位,单位为 bps。

两者经常会被混淆一谈,波特率指的是数据信号对载波的调制速率,它用单位时间内 载波调制状态改变的次数来表示。

当数据不压缩时,这时一个调制状态对应一个数据位,此 时波特率等于比特率。

当数据压缩时,这时一个调制状态对应两个或两个以上数据位。

两者的关系公式如下:

比特率=波特率 × 单个调制状态对应的二进制位数

中颖 8051 中,波特率可以设置为系统时钟的分频或定时器的分频。

设置注意事项及规则如下: A. 波特率不能等于系统时钟频率或定时器溢出率,只能为其分频值。

B. 当为串口方式 1 或 3 时,波特率发生器通过 T2CON 的 TCLK 和 RCLK 来选择。

TCLK 和 RCLK 为 1 时,选 Timer2;

TCLK 和 RCLK 为 0 时,选 Timer1。

C. 当使用 EUART1 时,不能使用 Timer1 产生波特率。

不管 TCLK 和 RCLK 为 1 或 0,波 特率发生器都为定时器 2。

但是当 TCLK 或 RCLK 为 1 时,波特率为 TCLK 或 RCLK 为 0 时的 波特率的二分频。

D. UART 工作在不同的工作方式下,波特率发生器有所不同,具体见下表。

SM0 0 0 1 1 SM1 0 1 0 1 0 1 2 3 帧 8 10 11 11 0 1 1 1 0 1 1 1 9 0 0 1 1 时 1 时 1 时 2 时 2 /64 ? /12 /4 /16

?/32 /32 ?/32

/16

当为方式 0 时,波特率固定,波特率发生器为系统时钟的分频。

当 SM2=1 时,波特率为系 统时钟的 4 分频;

当 SM2=0 时,波特率为系统时钟的 12 分频。

当为方式 1 时,波特率可变,通过设置 TCLK 和 RCLK 来选择 Timer1 或 Timer2 作为波特 率发生器。

通过 SMOD 位(二倍频控制位)来选择分频值。

当 SMOD=1 时,波特率为定时器 1 或 2 溢出率 / 32 的二倍频,即 16 分频;

当 SMOD=0 时,波特率为定时器 1 或 2 溢出率的 32 分频。

当为方式 2 时,波特率固定,波特率发生器为系统时钟的分频。

通过 SMOD 位(二倍频控 制位)来选择分频值。

当 SMOD=1 时, 波特率为系统时钟 / 64 的二倍频, 即 32 分频;

当 SMOD=0

数(PAGE) 6/12 时,波特率为系统时钟的 64 分频。

当为方式 3 时,波特率可变,通过设置 TCLK 和 RCLK 来选择 Timer1 或 Timer2 作为波特 率发生器。

通过 SMOD 位(二倍频控制位)来选择分频值。

当 SMOD=1 时,波特率为定时器 1 或 2 溢出率 / 32 的二倍频,即 16 分频;

当 SMOD=0 时,波特率为定时器 1 或 2 溢出率的 32 分频。

② 串口工作方式 由上一节,我们了解到要选择串口工作方式,我们可以根据自己的使用需要,设置 SCON 的 SM1 和 SM0 位来得到合适的工作方式,下面我来对 4 个串口工作方式进行讲解。

工作方式 0——8 位同步通讯,固定波特率(系统时钟的 4 / 12 分频),由 8 个数据位组成

8 位同步通讯,RxD 被作为输入/输出串行端口,而 TxD 被作为移位时钟。

也就是说,当使 用串口工作方式 0 时,不管是输出数据还是输入数据,都使用 RxD 口作为数据端口,而 TxD 端 口则振荡产生移位时钟。

串口发送时,将数据载入到 SBUF 中,每一个移位时钟(TxD 振荡产生),8 位数据从低位到 高位逐个从 RxD 口移出,当移完最后一个位时,发送结束,TI 硬件置一,RxD 要保持在高电平 (无发送状态)。

方式 0 发送时序 串口接收时,当 RxD 端口读到低电平时,开始接收动作。

先将 REN 置一、R1 清零,以允 许接收。

接收从下一个系统时钟开始。

每一个移位时钟(TxD 振荡产生),8 位数据从低位到高位 逐个从 RxD 口移入,当移完最后一个位时,接收结束,RI 硬件自动置一。

方式 0 接收时序

数(PAGE) 7/12

工作方式 1——10 位异步通讯,波特率可变(定时器 1 溢出率的 16 / 32 分频,或定时器

2 溢出率的 16 分频),由起始位(逻辑 0)、8 位数据、结束位组成。

串口发送时,先将 TI 清零,然后将 8 位数据存入到 SBUF 中,就会启动发送,先移出起始 位,再移出数据位,当溢出结束位时,发送完成,TI 硬件自动置一。

发送完成后,TxD 口要输 出高电平。

方式 1 发送时序 串口接收时,当 RxD 端口读到低电平时,开始接收动作。

先将 REN 置一、RI 清零,然后 MCU 就会对 RxD 端口进行采样。

当接收完 8 个数据位和结束位时,接收结束,RI 硬件置一。

8 位数据存入数据寄存器中,接收位存入 RB8 中。

接收完后,要继续接收,必须将 RI 清零。

方式 1 接收时序

工作方式 2——11 位异步通讯,波特率固定(系统时钟的 16 / 32 分频)起始位、8 位数据、

奇偶位和结束位组成。

此工作模式,增加了一个第九位,该位存入到 RB8 和 TB8 中。

可用于奇偶校验,用户可以 设置为 PSW 中的奇偶位 P;

也可用于多机通讯时,作为地址/数据标志位。

本 DEMO 中,该位 用于奇偶校验,载入 PSW 的奇偶位 P。

串口发送时,先将 TI 清零,并发送起始位(逻辑 0),然后将 8 位数据载入到 SBUF 中,TB8 载入 PSW 的 P 位。

当发送完结束位时,发送结束,TI 硬件置一。

发送完数据后,TxD 端口要处 在高电平状态。

数(PAGE) 8/12

方式 2 发送时序 串口接收时,当 RxD 端口读到低电平时,开始接收动作。

先将 RI 清零、REN 置一,MCU 开始采样 RxD 的状态,当接收完结束位时,接收结束,RI 硬件置一。

当只有 RB8 等于 PSW 的 奇偶位 P 时,此时接收才是正确的,我们才将数据保存到数据寄存器中。

接收完后,要继续接 收,必须将 RI 清零。

方式 2 接收时序

工作方式 3——11 位异步通讯,波特率可变(定时器 1 溢出率的 16 / 32 分频,或定时器 2

溢出率的 16 分频) 除波特率可变以外,其余与工作方式 2 一致。

下面,我们就以本 DEMO 中串口通讯部分为例,进行具体讲解。

/*-------------------------------------------------串口通讯初始化------------------------------------------------*/ TR1 TR2 TF1 TF2 TMOD (16bit,用于) = = = = = 0; 0; 0; 0; Bin(00010001); //设置 Timer1 为定时模式,工作方式一

数(PAGE) 9/12 TL1 TH1 T2MOD T2CON SCON RCAP2L TL2 = = = = = = = LOBYTE(CLOCK_1MS); HIBYTE(CLOCK_1MS); Bin(00000000); Bin(00110000); Bin(11010000); LOBYTE(UART_BAUDRATE); LOBYTE(UART_BAUDRATE); HIBYTE(UART_BAUDRATE); HIBYTE(UART_BAUDRATE); 1; 1; //start timer1 //start timer2 //开启 EUART 和 Timer1 中断 //设置串口通讯方式为方式 3 //设置定时器溢出率 //设置 Timer2 用于产生波特率

RCAP2H = TH2 TR1 TR2 IEN0 = IEN1 = = = =

Bin(00011000); Bin(00000000);

/* 波特率计算公式——

, 其中 f T2 为系统时

钟, DEMO 的系统时钟为 8.192MHz, 要得到 9600Bps, 则定时器 2 计数值为 65536 – 8192000/ 32 / 9600 = UART_BAUDRATE */

/*------------------------------------------------------数据发送-----------------------------------------------------*/ void UartSend (void) { Byte IntTemp; if(TI) { TI = 0x00; //发送完一个数据

/*------------------------------数据发送中------------------------------*/ if(gbUartTran) { /*----------------------发送未完成----------------------*/ if(gBUartLen <gBUartTotalByte) { ACC = TB8 = SBUF= gBUartBuf[gBUartLen]; P; ACC; //载入奇偶校验位 //载入要发送的数据 //字节个数计数加一

gBUartLen++; } /*-----------------发送已完成------------------*/

数(PAGE) 10/12 else { gBUartLen = 0x00; //清字节个数计数器 //清数据字节总数寄存器 //清发送状态标志 //允许接收

gBUartTotalByte = 0x00; gbUartTran REN = 1; } } } } /* = 0;

由于本 DEMO 的设置为,接收到任何数据后,都反馈给上位机字符“收到了” 。

所以发送完

成后,要开启接收,以便接收下一个数据 */

/*------------------------------------------------------数据接收-----------------------------------------------------*/ void UartRecive (void) { if(RI) { RI = 0x00; //接收完一个数据

if(!gbUartTran) { ACC = if( RB8 { IntTemp = ACC; //读取接收到的字节 //保存到数据缓冲器中 SBUF; == P) //奇偶校验是否正确

gBUartBuf[gBUartLen] = IntTemp; /*---------------未开始接收数据--------------*/ if(!gbUartRece) { gbUartRece= gBUartLen = 1; 0;

//设置当前为数据接收状态 //清字节个数计数器 //设置一个

gWUartRxdTimeOut = PACKAGE_RXD_TIMEOUT; 数据包接收超时时间 } gBUartLen++; } /*--------------------数据接收异常-------------------*/

数(PAGE) 11/12 if(gBUartLen >MAX_UART_DATA_LEN ) { gbUartRece= gBUartLen = } } } } 0; 0x00; //关闭接收

/*------------------------------------------------------超时处理-----------------------------------------------------*/ void UartRxdTimeout(void) { if(gbUartRece) { if((gWUartRxdTimeOut--)==0) { //finish gbUartRece = 0; gbUartTran = 0; gbUartRxdFrameReq = 1; REN = 0; } } } //清接收数据状态标志 //清发送数据状态标志 //设置接收完一个数据包标志 //禁止接收 //接收完成

/* 为了防止接收出错,接收部分做了两个保护。

1.当接收时间完成,但仍在接收数据,且没有超过最大字节数,则以接收完成处理。

2.在接收时间内,接收到的数据大于用户设置的最大字节数,以出错处理。

*/

/*------------------------------------------------------解码反馈-----------------------------------------------------*/ void UartDecode() { gBUartTotalByte = 6; gBUartLen = 0x00; //设置发送字节数为 6 个 //清字节个数计数器 //发送数据"收到了"

gBUartBuf[0] =0xca; gBUartBuf[1] =0xd5; gBUartBuf[2] =0xb5;

数(PAGE) 12/12 gBUartBuf[3] =0xbd; gBUartBuf[4] =0xc1; gBUartBuf[5] =0xcb; gBUartCon = Bin(00000000); gbUartTran = 1; TI = 1; } //设置发送数据状态标志 //软件置一,中断响应


  • 与《中颖单片机_EUART介绍》相关:
  • 中颖单片机_EUART
  • SH67P847M 中颖单片机介绍
  • 400本中颖单片机材料修订版
  • 中颖单片机2051_4051资料
  • 中颖单片机 开漏输出
  • SH67P847M 中颖单片机
  • 中颖单片机资料及编程
  • 中颖单片机SH79F164基于电子血压计的应用
  • 中颖四位单片机ADC测温实例
  • 中颖单片机仿真器硬件赏析_1101_01
  • 本站网站首页首页教育资格全部考试考试首页首页考试首页职业资格考试最近更新儿童教育综合综合文库22文库2建筑专业资料考试首页范文大全公务员考试首页英语首页首页教案模拟考考试pclist学路首页日记语文古诗赏析教育教育资讯1高考资讯教育头条幼教育儿知识库教育职场育儿留学教育高考公务员考研考试教育资讯1问答教育索引资讯综合学习网站地图学习考试学习方法首页14托福知道备考心经冲刺宝典机经真题名师点睛托福课程雅思GREGMATSAT留学首页首页作文
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.xue63.com All Rights Reserved