项目9MCU之间的串行通信(_第1页
项目9MCU之间的串行通信(_第2页
项目9MCU之间的串行通信(_第3页
项目9MCU之间的串行通信(_第4页
项目9MCU之间的串行通信(_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、项目9 MCU之间的串行通信(一)学习目标学习目标n通过本项目的学习,能够熟练阐述串行通信接口(SCI)模块的特点;能够熟悉SCI 波特率寄存器 (SCIxBDH, SCIxBDL)的配置;能够熟悉SCI控制寄存器1(SCIxC1)的配置;能够熟悉SCI控制寄存器2 (SCIxC2)的配置;能够熟悉SCI控制寄存器3 (SCIxC3)的配置;能够熟悉SCI状态寄存器1(SCIxS1)的配置;能够熟悉SCI状态寄存器2(SCIxS2)的配置;能够熟悉数据寄存器(SCIxD)的配置;能够应用串行通信接口(SCI)模块编写相关的应用程序。学习要求学习要求n能够熟练阐述串行通信接口(SCI)模块的特点

2、能n够熟悉SCI 波特率寄存器 (SCIxBDH, SCIxBDL)的配置n能够熟悉SCI控制寄存器1(SCIxC1)的配置n能够熟悉SCI控制寄存器2 (SCIxC2)的配置能够熟悉SCI状态寄存器1(SCIxS1)的配置n能够熟悉SCI状态寄存器2(SCIxS2)的配置n能够熟悉数据寄存器(SCIxD)的配置n能够应用串行通信接口(SCI)模块编写相关的应用程序项目导入项目导入n在控制系统中,有时器件之间需要进行通信,例如,单片机与外围器件之间,单片机之间,单片机与计算机之间等,它们是怎么通信的呢?nMCU把从另一个MCU发送过来的数据接收存贮到变量TmpData中,同时接收计数变量Cou

3、nter加1,并把变量Counter的值送到端口PTAD(或PTBD)中,以显示接收数据的次数,然后再把变量TmpData中的数据发送出另一个MCU,电路原理图如图9-11所示。项目导入项目导入项目分析项目分析n1用最少的元器件构成两个单片机通信的最小应用系统。n 2应用MC9S08GB60型单片机的串行通信接口模块(SCI),将两个单片机的数据信息互相传递。n在动手实现两个单片机之间的通信之前,首先学习MC9S08GB60型单片机串行通信接口模块(SCI)的相关知识及其寄存器的配置。相关知识相关知识n9.1 串行通信接口及其相关概念串行通信接口及其相关概念n9.2 串行通信接口串行通信接口S

4、CI模块的概述模块的概述n9.3 串行通信接口串行通信接口SCI模块的应用模块的应用9.1 串行通信接口及其相关概念串行通信接口及其相关概念n微控制器与外部设备的信息交换称为通信。通信的基本方式有两种,它们是并行通信和串行通信。并行通信通过并行输入/输出端口进行,数据的各位同时进行传送,数据有多少位就要有同样多少的传送线。串行通信借助于串行输入/输出端口来实现,串行通信是数据一位一位顺序传送,只需要一条传输线路。故串行通信节省传输线,特别是当数据量多和进行长距离数据通信时宜采用串行传送,可降低通信成本。9.1 串行通信接口及其相关概念串行通信接口及其相关概念n串行通信是用一条传输线按位传送数据

5、,要传送的每一个数据(字符)都要符合一定的格式。根据通信格式,串行通信可分为同步通信方式和异步通信方式。9.1 串行通信接口及其相关概念串行通信接口及其相关概念n(1)同步通信n同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。 9.1 串行通信接口及其相关概念串行通信接口及其相关概念n(2)异步通信n异步通信方式传送数据时,用一个起始位表示一个字符的开始,用一个停止位表示字符的结束。由起始位到停止位的所有位构成了一个字符的全部信息,称为一帧。 9.1 串行通信接口及其相关概念串行通信接口及其相关概念n每一帧包括以下

6、内容:n起始位。起始位标志着传送数据的开始,一般为低电平,占一位。n数据位。数据位是要传送的字符,一般是7位或8位,由低位到高位顺序发送。n奇偶校验位。奇偶校验位用来校验串行传送的正确性,分为奇校验、偶校验,校验位占一位。n停止位。停止位标志一个字符的传送结束,一般为高电平,占一位,一位半或两位。微控制器常采用一位停止位。9.1 串行通信接口及其相关概念串行通信接口及其相关概念n在进行异步通信传送数据时,微控制器与外设之间必须事先约定以下内容:n字符格式。双方约定编码格式,即上述各位的具体约定,例如数据位数、是否要奇偶校验位等内容。n波特率。波特率是指串行通信数据传送的速率,由于串行通信是按位

7、传送数据的,因此定义每秒传输的位数为波特率,即1波特率=1位/秒(1bps)。串行通信时要求两个进行数据传送的设备要有相同的波特率。9.1 串行通信接口及其相关概念串行通信接口及其相关概念n异步通信中,接收端检测到传输线上发送过来的低电平逻辑0(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。n串行异步通信方式中,数据是在单条1位宽的传输线上一位接一位地顺序传送。这样一个字节的数据要分8次由低位到高位按顺序一位位地传送。由此可见,串行通信的特点如下: n节省传输线,这是显而易见的。尤其是在远程通信时,此特点尤为重要。这也是串行通信的主

8、要优点。 n数据传送效率低。与并行通信比,这也这是显而易见的。这也是串行通信的主要缺点。 9.1 串行通信接口及其相关概念串行通信接口及其相关概念n在串行通信中,二进制数据以数字信号的形式出现,不论是发送还是接收,都必须有时钟信号对传送的数据进行定位。在TTL标准表示的二进制数中,传输线上高电平表示二进制1,低电平表示二进制0,且每一位持续时间是固定的,由发送时钟和接收时钟的频率决定。 9.1 串行通信接口及其相关概念串行通信接口及其相关概念n(1)发送时钟 n发送数据时,先将要发送的数据送入移位寄存器,然后在发送时钟的控制下,将该串行数据逐位移位输出。通常是在发送时钟的下降沿将移位寄存器中的

9、数据串行输出,每个数据位的时间间隔由发送时钟的周期来划分。 n 接收时钟 n在接收串行数据时,接收时钟的上升沿对接收数据采样,进行数据位检测,并将其移入接收器的移位寄存器中,最后组成并行数据输出。 n 波特率系数n接收时钟和发送时钟与波特率有如下关系:F = n B 这里F 是发送时钟或接收时钟的频率; B 是数据传输的波特率; n 称为波特率因子。设发送或接收时钟的周期为Tc,频率为F的位传输时间为Td,则: Tc = 1/F , Td = 1/B 得到: Tc = Td /n。 在实际串行通信中,波特率系数可以设定。在异步传送时,n = 1,16,64,实际常采用n = 16,即发送或接收

10、时钟的频率要比数据传送的波特率高n倍。在同步通信时,波特率系数n必须等于1。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nMC9S08GB60包含两个独立的串行通信接口模块(SCI),该模块有时也叫通用异步发送器/接收器(UARTs)。串行通信接口模块1(SCI1)的相关引脚与端口E的PTE0、PTE1引脚共享,串行通信接口模块2(SCI2)的相关引脚与端口C的PTC0、PTC1引脚共享。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n一般地,它们通过RS232串行通信接口与个人PC机或工作站进行通信,SCI模块也允许在MCU之间进行全双工、不归零(NRZ)的异步通信

11、,它包含1个波特率发生器、发送器和接受器。虽然发送器和接收器共用1个波特率发生器,但是它们各自可以独立操作。 9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nSCI 模块的特性包括:n全双工、标准的不归零(NRZ)格式n具有独立使能的双缓冲发送器和接收器n可编程波特率(13 位模数分频器)n中断驱动型或轮询操作n 发送数据寄存器空,发送完成n 接收数据寄存器已满n 接收溢出、奇偶效验错误、成帧错误和噪音错误n 闲置接收器检测n 接收管脚上的活动边沿n 支持LIN 的断点检测n硬件奇偶效验生成和检查n可编程8 位或9 位字符长度n闲置线路或地址标记可唤醒接收器9.2 串行通信接口串行

12、通信接口SCI模块的概述模块的概述nSCI 通信要求发送器和接收器(一般情况下从独立时钟源中获取波特率)使用相同的波特率。该波特频率的允许容限取决于接收器与起始位的前沿,以及位采样执行的具体情况。每次从高电平转换到低电平时, MCU都重新同步位边界,但在最坏的情况下,整个10或11位时间字符数据中没有这种同步,所以波特率中的任何不匹配都累积到整个字符数据的时间。对于总线频率由晶振驱动的飞思卡尔半导体SCI 系统,允许的波特率不匹配范围是:8位数据格式大约为4.5%、9 位数据格式大约4%。尽管不会永远生成与标准速率严格匹配的波特率,但在一个可控制的范围内,通信是可靠的。波特率发生器的时钟源通过

13、总线时钟来获取,如图9-1所示:9.2 串行通信接口串行通信接口SCI模块的概述模块的概述9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n发送器n图9-2 为SCI发送器内部结构图,SCI发送数据寄存器是位于内部数据总线与发送移位寄存器之间的只写缓冲器,发送时从移位寄存器移出一个字符至TxD引脚。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n发送器的使能是通过设置SCIxC2 寄存器中的TE 位,当TE=1时,内部电路会产生一个逻辑高电平的前导字符,这个字符是一个处于闲置状态的字符帧。如果发送数据寄存器中没有数

14、据,那么发送器将会保持闲置状态。通过把数据写入SCI 数据寄存器(SCIxD),就可把数据保存到发送数据寄存器。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nSCI发送器的中心元件是长度为10 或11 位(取决于M 控制位中的设置)的发送移位寄存器。假设M = 0,则为正常的8 位数据模式,在8 位数据模式中,移位寄存器中有1 个起始位、8 个数据位和1 个停止位。当数据经发送移位寄存器由TxD引脚发送完毕时,发送数据寄存器空(TDRE)状态标志置1,如果SCIxC2寄存器的发送结束中断使能位TCIE已置允许,那么还会产生发送完成中断请求。当发送数据寄存器传送一个字节至发送移位寄

15、存器后,SCIx状态寄存器的发送空标志位TDRE置1,表示发送数据寄存器此时可以从内部数据总路线接收新的数据,如果SCIxC2寄存器中的发送中断使能位TIE已置允许,那么还会产生发送寄存器空中断请求。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n接收器n图9-3 为SCI接收器内部结构图,SCI在接收期间,接收器移位寄存器从RxD引脚移入字符数据,SCI数据寄存器是位于内部数据总线与接收移位寄存器之间的一个只读缓冲器。一个完整的字符数据移入接收移位寄存器后,其数据部分立即传送至接收数据寄存器,此时SCIxS1寄存器的接收器满标志位RDRF置1,表示收到的字节可以读走了,如果SCI

16、xC2寄存器中的接收器中断允许位RIE已置1,同时还会产生接收器满中断请求。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n接收器的使能是通过设置SCIxC2寄存器中的RE 位,当RE=1时使能接收器。接收器接收到的字符数据是由逻辑0 的起始位、8 个(或9 个)数据位(LSB 先发)和逻辑1 的停止位组成。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n假设SCI被配置为8 位数据模式,当字符数据从接收移位寄存器传输到接收数据寄存器(SCIxD)时,则置位接收数据寄存器已满(RDRF)状态标志;如果已经置位了已

17、满(RDRF)状态标志,就设置溢出(OR)状态标志,这时新数据将会丢失。当程序检测到接收数据寄存器已满(RDRF = 1)时,它通过读SCIxD寄存器械可从接收数据寄存器中获取数据。RDRF 标志由一个2 步式顺序自动清除,这个2 步式顺序通常在处理接收数据的用户程序中满足。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n9.2.1 SCI 波特率寄存器波特率寄存器 (SCIxBDH, SCIxBDL)9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n这两个寄存器控制生成SCI 波特率的预分频系数。若要更新波特率可设置控制位SBR12:SBR0,方法是先将数据写入高8位的

18、SCIxBDH寄存器,然后再将数据写入低8位的SCIxBDL寄存器。注意,SCIxBDH寄存器中的值在改变SCIxBDL寄存器后才会变化。复位时,SCIxBDL寄存器为非零值,因此复位后,波特率发生器一直处于禁止状态,直到第一次使能接收器或发送器(SCIxC2 中的RE 或TE 位被设置为1)。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nSBR12:SBR0-波特率模数系数nSBR12:0 中的13个位统称为BR,它们为SCI 波特率发生器设置模数系数。当BR =0,SCI 波特率发生器被禁止,以降低电源电流。当BR = 18191 时, SCI 波特率= BUSCLK (16

19、 x BR)。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n例:如果总线时钟为4MHz,波特率模数除数为4,那么SCI 波特率是多少?分别用汇编语言和C语言实现。nSCI 波特率 = 4000000 (16 x 4)= 62500n汇编程序:nCLR SCI1BDH ;SCI1BD内容为SBR12=0,SBR11=0,SBR10=0,SBR9=0,SBR8=0nMOV #$04,SCI1BDL ;SCI1BDL内容为SBR7=0,SBR6=0,SBR5=0,SBR4=0n,SBR3=0,SBR2=1, SBR1=0,SBR0=0nC语言程序:nSCI1BDH=0 x00;/把十六

20、进制立即数00传送给SCI1BDH寄存器nSCI1BDL=0 x04;/把十六进制立即数04传送给SCI1BDL寄存器9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n9.2.2 SCI 控制寄存器控制寄存器1(SCIxC1)n该寄存器是一个可读可写的寄存器,用于控制SCI 系统的各种可选功能。如图9-5所示。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nLOOPS-循环模式选择位n循环模式只有当发送和接收同时允许操作时才能使用。此时RxD引脚与SCI模块断开,发送器输出在芯片内部直接连接接收器输入。它可以在循环模式和全双工模式之间进行选择。当LOOPS = 1,发送器

21、输出内部连接到接收器输入。该位有两种状态:n 1循环模式或单线模式,发送器输出在芯片内部连接到接收器输入,SCI 不使用RxD 管脚n 0正常运行 ,RxD 和TxD 使用独立管脚9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nSCISWI-等待模式中的SCI停止位n该位有两种状态:n 1SCI 时钟在CPU 处于等待模式时冻结n 0SCI 时钟继续在等待模式中运行,因此SCI 是唤醒CPU 的中断源9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nRSRC-接收器源选择位n如果LOOPS =0,则该位没有任何意义或影响;当LOOPS = 1 时,接收器输入内部连接到Tx

22、D引脚, RSRC位决定该连接是否也连接到发送器输出。该位有两种状态:n 1单线SCI 模式,其中TxD 引脚连接到发送器输出和接收器输入n 0假设LOOPS = 1, RSRC = 0选择内部环回模式, SCI 不使用RxD1或TxD1管脚9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nM-8位或9位格式选择位n该位有两种状态:n 1接收器和发送器使用9 位数据格式字符:启动位+ 8 个数据位(LSB 先发) + 第9 个数据位+ 停止位n 0正常 :启动位 + 8 个数据位(LSB 先发) + 停止位9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nWAKE-接收唤醒

23、方法选择位n该位有两种状态:n 1地址标记唤醒n 0闲置线路唤醒9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nILT-闲置线路类型选择位n若将该位设置为1,可以确保数据字符末端的停止位和逻辑1 不会计数闲置线路检测逻辑所需的逻辑高电平的10 或11 个位时间。该位有两种状态:n 1停止位后闲置字符位计数开始n 0开始位后闲置字符位计数开始9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nPE-奇偶校验使能位n该位使能硬件奇偶效验。当使能奇偶效验时,数据字符(第8 或第9 数据位)的最高位(MSB)视为奇偶校验位。该位有两种状态:n 1奇偶效验使能n 0无硬件奇偶效验生成

24、或检9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nPT-奇偶效验类型位n如果使能奇偶效验(PE = 1),该位的状态决定选择的奇效验还是偶效验。奇效验表示数据字符中1 的总数(包括奇偶校验位)是奇数。偶数表示数据字符中1 的总数(包括奇偶校验位)是偶数。该位有两种状态:n 1奇效验n 0偶效验9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n9.2.3 SCI 控制寄存器控制寄存器2 (SCIxC2)n该寄存器是一个可读可写的8位寄存器,如图9-6所示。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nTIE-发送中断使能位(用于发送寄存器空标志TDRE)n该

25、位使能发送中断请求。若该位允许,并且发送寄存器空标志TDRE被置1,则响应中断发送请求。该位有两种状态:n 1当TDRE 标志为1 时允许硬件中断n 0来自TDRE 的硬件中断禁止(使用轮询)9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nTCIE-发送中断使能位(用于发送完成标志TC)n该位使能发送中断请求。若该位允许,并且发送完成标志TC被置1,则响应中断发送请求。该位有两种状态:n 1当TC 标志为1 时允许硬件中断n 0来自TC 的硬件中断禁止(使用轮询)9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nRIE-接收中断使能(用于接收数据寄存器满标志RDRF)n该

26、位使能接收中断请求。若该位允许,并且接收数据寄存器满标志RDRF被置1,则响应中断发送请求。该位有两种状态:n 1当TDRE 标志为1 时允许硬件中断n 0来自TDRE 的硬件中断禁止(使用轮询)9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nILIE-闲置线路中断使能位(用于闭置线路标志IDLE)n该位使能闲置线路中断请求。若该位允许,并且闭置线路标志IDLE被置1,则响应中断发送请求。该位有两种状态:n 1当IDLE 标志为1 时允许硬件中断n 0来自IDLE的硬件中断禁止(使用轮询 9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nTE-发送器使能位n该位使能SCI

27、 发送器。当TE = 1时, SCI 强制TxD引脚作为SCI系统的输出。当SCI 配置用于单线运行(LOOPS = 1,RSRC = 1)时, TXDIR位控制单线运行的SCI 通信线路(TxD 引脚)上的数据流方向。该位有两种状态:n 1发送器打开n 0发送器关闭9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nRE-接收器使能位n该位使能接收器。当SCI 接收器关闭时,RxD 管脚恢复为通用端口I/O引脚。如果LOOPS = 1,不管RE = 1还是RE=0,RxD 管脚都会恢复为通用I/O引脚。该位有两种状态:n 1接收器打开n 0接收器关闭9.2 串行通信接口串行通信接口S

28、CI模块的概述模块的概述nRWU-接收器唤醒控制位n该位为接收器唤醒控制位,若RWU =1,将SCI 接收器处于待机状态并关闭接收中断,SCIxC1寄存器中的WAKE位确定接收器以何种方式退出待机状态(WAKE = 0,闲置线路唤醒;WAKE = 1,地址标记唤醒),且在退出时将RWU位清0。该位有两种状态:n 1处于待机状态的SCI 接收器等待唤醒条件n 0正常的SCI 接收器运行9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nSBK-发送中止位n发送中止位的方法是先将1写入SBK位,再将0写入SBK位。这样即可在发送数据流中插入了一个中止字符。只要SBK=1, 多达10 或11

29、(如果BRK13 = 1,则为13 或14 位)位时间的逻辑0 中止字符被加入队列。该位有两种状态:n 1将发送的队列中止字符n 0正常的发送器运行9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n9.2.4 SCIx控制寄存器控制寄存器3(SCIxC3)n该寄存器是一个可读可写的8位寄存器,如图9-7所示。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nR8-接收器的第9 个数据位n当SCI 配置用于9 位数据格式(M = 1)时, R8 可以视为SCIxD 数据寄存器中缓冲数据的MSB左侧的第9个接收数据位。注意,读取数据时,要先读取R8位再读取SCIxD寄存器,这是

30、因为读SCIxD寄存器时自动清除标志,并允许R8位和SCIxD寄存器被新数据覆盖。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nT8-发送器的第9 个数据位n当SCI 配置用于9位数据格式(M = 1)时, T8 可以视为SCIxD数据寄存器中缓冲数据的MSB 左侧的第9个发送数据位。注意,写9位数据时,先写入T8位,再写入SCIxD寄存器的数据。写完后数据会被传输到SCI 移位寄存器。如果T8 不需要在新值(例如当它用于生成标志或奇偶效验)中修改,它就不需要在每次写SCIxD寄存器时写入。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nTXDIR-单线模式中的TxD

31、 引脚方向位n当SCI 配置用于单线半双工运行(LOOPS = 1,RSRC = 1)时,该位决定TxD 引脚上的数据流方向。该位有两种状态:n 1TxD管脚是单线模式中的输出n 0TxD管脚是单线模式中的输入9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nORIE-溢出中断使能位n该位使能溢出标志(OR)以生成硬件中断请求。该位有两种状态:n 1允许OR硬件中断n 0OR硬件中断禁止(使用轮询)9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nNEIE-噪音错误中断使能位n该位使能噪音标志(NF)以生成硬件中断请求。该位有两种状态:n 1允许硬件中断(NF = 1)n

32、0NF中断禁止(使用轮询)9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nFEIE-帧错误中断使能位n该位使能帧错误标志(FE)以生成硬件中断请求。该位有两种状态:n 1当FE = 1 时允许硬件中断n 0FE中断禁止(使用轮询)9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nPEIE-奇偶效验错误中断使能位n该位使能奇偶错误标志 (PF)以生成硬件中断请求。该位有两种状态:n 1当PF = 1 时允许硬件中断n 0PF中断禁止(使用轮询)9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n9.2.5 SCIx状态寄存器状态寄存器1(SCIxS1)n该寄存器有8

33、 种只读状态标志。写入没有影响状态标志,特殊软件队列(不包括写入该寄存器)可用来清除这些状态标志,如图9-8。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nTDRE-发送数据寄存器空标志n当发送数据寄存器传送1个字符至发送移位寄存器时,该位置1,表明数据寄存器在传输数据给发送移位寄存器后为新的数据字符留出空间。若TIE位已置1则还能产生SCI发送器空中断请求。要清除TDRE位,读SCIxS寄存器,然后再将数据写入SCI 数据寄存器(SCIxD)即可。该位有两种状态:n 1发送数据寄存器空n 0发送数据寄存器满9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nTDRE-发

34、送数据寄存器空标志n当发送数据寄存器传送1个字符至发送移位寄存器时,该位置1,表明数据寄存器在传输数据给发送移位寄存器后为新的数据字符留出空间。若TIE位已置1则还能产生SCI发送器空中断请求。要清除TDRE位,读SCIxS寄存器,然后再将数据写入SCI 数据寄存器(SCIxD)即可。该位有两种状态:n 1发送数据寄存器空n 0发送数据寄存器满9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nTC-发送完成标志位nTC 设置于复位,当TDRE = 1时但没有数据等待发送时该位置1。当TC = 1 时读取SCIxS1寄存器时可以自动清除TC位,然后可以进行以下其中操作的一种:n 将数据

35、写入SCI 数据寄存器(SCIxD),以发送新数据n 通过把TE 从0 变为1,排队前导信号n 将1写入SCIxC2 中的SBK,排队中止字符。n该位有两种状态:n 1发送器闲置(发送活动完成)n 0发送器活动(发送数据、前导信号或中止字符)。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nRDRF-接收数据寄存器满标志位n当数据从接收移位寄存器传输到接收数据寄存器(SCIxD)时,RDRF位置1,表示数据寄存器中的数据可用。若RIE位已置1则还能产生SCIRU接收器满中断请求。在8位数据格式中,要清除RDRF位,先读SCIxS1寄存器,然后读SCI数据寄存器(SCIxD);在9位

36、数据格式中,要清除RDRF,先读SCIxS1寄存器,然后读SCI 数据寄存器(SCIxD)和SCI控制寄存器3(SCIxC3)。注意,SCIxD和SCIxC3也用其他命令进行读取,但是标志则要在两个寄存器被读取后才能清除。该位有两种状态:n 1接收数据寄存器已满n 0接收数据寄存器空9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nIDLE-闭置线路标志位n在一段时间的活动后,当SCI 接收线路已经闲置了一个全字符时间时,IDLE位置1。当ILT =0,接收器在起始位后开始计算闲置位时间,因此如果接收的字符都为1,则这些位时间和停止位时间都被计入接收器;当ILT = 1,接收器直到停

37、止位后才开始计算闲置位时间。因此停止位和前一字符末端的任何逻辑高电平时间不会被计入接收器。要清除IDLE,先读取SCIxS1寄存器,然后读取SCI 数据寄存器(SCIxD)。清除IDLE位后,不能再次进行设置,直到接收到新字符且已设置了RDRF位为止。该位有两种状态:n 1检测到闲置线路n 0没有检测到闲置线路9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n接收器移位寄存器收到下一个字符之前,倘若读取SCI 数据寄存器(SCIxD)当前数据遭遇失败即将OR位置1,如果此时ORIE位已置1,则还会产生SCI接收器溢出错误中断请求。此时移位寄存器中的数据丢失,但不会影响SCI 数据寄存

38、器(SCIxD)中的数据。要清除OR位,先读SCIxS1,然后读SCI 数据寄存器(SCIxD)即可。该位有两种状态:n 1接收溢出(新SCI 数据丢失)n 0没有溢出9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nNF-噪声标志位n接收器采用了先进的采样技术,它在起始位中提取7 个样本,在每个数据位和停止位中提取3个样本,如果这些样本中的任何一个样本与帧中任何位时间内的其余样本不一致,则RDRF位置1 ,同时NF位也置1。即是接收器在RxD引脚上检测到噪声。如果此时SCIxC3寄存器的NEIE位已置1,则还会产生SCI接收器噪声错误中断请求。若要清除NF位,先读SCIxS1寄存器

39、,然后读SCI 数据寄存器 (SCIxD)即可。该位有两种状态:n 1SCIxD中的已接收字符中检测到噪音n 0没有检测到噪音9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nFE-帧错误标志位nSCI接收器在停止位收到逻辑0时显然出现帧错误,此时FE位置1,如果此时SCIxC3寄存器的FE位已置1,则还会产生SCI接收器帧错误中断请求。要清除FE位,先读SCIxS1寄存器,然后读SCI 数据寄存器 (SCIxD)即可。该位有两种状态:n 1检测到帧错误n 0未检测到帧错误,这不能保证帧正确9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nPE-奇偶效验错误标志位 nSCI

40、接收器在输入的数据中检测到奇偶错误时,PE位置1,如果此时SCIxC3寄存器的PE位已置1,则还会产生SCI接收器奇偶效验错误中断请求。要清除PF位,读SCIxS1寄存器,然后读SCI 数据寄存器(SCIxD)即可。该位有两种状态:n 1奇偶效验错误n 0没有奇偶效验错误9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n9.2.6 SCIx状态寄存器状态寄存器2(SCIxS2)n该寄存器只有1个状态标志位,其余的位作扩展使用。任何写入操作对该状态标志位都无影响,如图9-9。9.2 串行通信接口串行通信接口SCI模块的概述模块的概述nRAF-接收器活动标志位n当SCI 接收器检测到有效

41、起始位时,RAF置1;当接收器检测到闲置线路时,RAF被自动清除。该状态标志可以用来检查在引导MCU进入停止模式前,是否正在接收SCI 字符数据。该位有两种状态:n 1SCI 接收器活动(RxD 输入不闲置)n 0SCI 接收器闲置,正在等待起始位9.2 串行通信接口串行通信接口SCI模块的概述模块的概述n9.2.7 SCIx数据寄存器(数据寄存器(SCIxD)n该寄存器实际上是两个独立的寄存器。读取数据时,返回只读接收数据缓冲器的内容;写入数据时,写进只写发送数据缓冲器。该寄存器的读写还涉及SCI 状态标志的自动标志清除机制,如图9-10所示。9.2 串行通信接口串行通信接口SCI模块的概述

42、模块的概述n例:把十六进制立即数#$A5写入数据寄存器中。分别用汇编语言和C语言实现。n汇编程序:n MOV #$A5,SCI1D ;十六进制立即数#$A5传送给数据寄存器SCI1DnC语言程序:nSCI1D=0 xa5;/十六进制立即数#$A5传送给数据寄存器SCI1D9.3 串行通信接口串行通信接口SCI模块的应用模块的应用n串行通信接口SCI模块的应用十分广泛,主要用于MCU之间的通信、MCU与外围设备的通信以及MCU与计算机的通信。n下面的例子是两个MCU之间的数据通信。n例:MCU之间的数据通信。MCU把从另一个MCU发送过来的数据接收存贮到变量TmpData中,同时接收计数变量Co

43、unter加1,并把变量Counter的值送到端口PTAD(或PTBD)中,以显示接收数据的次数,然后再把变量TmpData中的数据发送出另一个MCU,电路原理图如图9-11所示。两个MCU中的程序一样,程序方框图如图9-12所示。nMCU1汇编语言源程序:n INCLUDE derivative.incn ; XREF MCU_initn XDEF _Startup, mainn XREF _SEG_END_SSTACK nMY_ZEROPAGE: SECTION SHORT ; 变量定义区n nCounter: DS.B 1 ; 计算接收次数的变量 nTmpData: DS.B 1 ; 存

44、储接收变量nMyCode: SECTION ;代码区nmain:n_Startup:n LDHX #_SEG_END_SSTACK ;初始化堆栈n TXSn JSR MCU_init ;调用初始化子程序n n CLC n LDA #1 ; n STA Counter ; 初始化变量nmainLoop: nwaitToReceive: n BRCLR 5,SCI1S1,waitToReceive ;有接收满标志吗n LDA SCI1D ; 有记取数据到变量TmpData n STA TmpData n INC Counter ; 变量counter加1 n LDA Counter n NEGA

45、; 取反n STA PTAD ; 送到端口A以显示接收次数 nwaitToSend: n BRCLR 7,SCI1S1,waitToSend;是否可以发送数据,否,一直在等待 n LDA TmpData ;是,发送数据 n STA SCI1D n BRA mainLoop nMCU_init: ;初始化子程序 n ;SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 n CLR SCI1C2 ; 禁止SCI1模块 n LDA SCI1S1 ; 读取寄存器 SCI1S1 以清除寄存器 SCI1S1的标志 n LDA SCI1D ; 读取

46、寄存器 SCI1D 以清除其他标志 n ; SCI1BDH: SBR12=0,SBR11=0,SBR10=0,SBR9=0,SBR8=0 n CLR SCI1BDH ;设置波特率为65200 n ;SCI1BDL:SBR7=0,SBR6=0,SBR5=1,SBR4=1,SBR3=0,SBR2=0,SBR1=1,SBR0=1 n MOV #$33,SCI1BDL n ;SCI1C1:LOOPS=0,SCISWAI=0,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 n CLR SCI1C1 ;RxD 和TxD 使用独立管脚,8位,无硬件奇偶效验 n ; SCI1C3: R8=

47、0,T8=0,TXDIR=0,ORIE=0,NEIE=0,FEIE=0,PEIE=0 n CLR SCI1C3 ;中断禁止 n ;SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=1,RE=1,RWU=0,SBK=0 n MOV #$0C,SCI1C2 ;发送器打开,接收器打开 n LDA PTAD ;初始化端口值为FF n ORA #$FFn STA PTADn n LDA PTADD ;端口A设置为输出 n ORA #$FFn STA PTADDn ; n CLI ; 全局中断使能 n RTSn ;-n END nMCU1 C语言源程序:n#include n#in

48、clude derivative.h n byte Counter = 0; /变量n byte TmpData = 0;nvoid MCU_init(void); /初始化子程序声明nvoid main(void) /主程序nn n MCU_init(); /调用初始化子程序n for(;)n n while(!SCI1S1_RDRF); / 等待接收满标志 n TmpData = SCI1D; / 接收满了就读取数据存储入变量TmpData *n Counter+; / 计数变量加1 n PTAD = Counter; / 端口A显示计数变量的值 n while(!SCI1S1_TC);

49、/ 等待发送标志 n SCI1D = TmpData; / 可发送就将变量TmpData的值发送出去 n nn void MCU_init(void) /初始化子程序nn /* SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 */n SCI1C2 = 0 x00; /先禁止SCI模块 n (void)(SCI1S1 = 0); /读取寄存器 SCI1S1 可清除SCI1S1 中的标志 */n (void)(SCI1D = 0); /* 读取寄存器 SCI1D 可清除其他的标志 */n /* SCI1BDH: SBR12=0,SBR

50、11=0,SBR10=0,SBR9=0,SBR8=0 */n SCI1BDH = 0 x00; /设置波特率65200 n /*SCI1BDL: SBR7=0,SBR6=0,SBR5=0,SBR4=0,SBR3=0,SBR2=1,SBR1=0,SBR0=0 */n SCI1BDL = 0 x04; n /*SCI1C1: LOOPS=0,SCISWAI=0,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 */n SCI1C1 = 0 x00; /RxD 和TxD 使用独立管脚,8位,无硬件奇偶效验 n /* SCI1C3: R8=0,T8=0,TXDIR=1,ORIE=0,

51、NEIE=0,FEIE=0,PEIE=0 */n SCI1C3 = 0 x20; /中断禁止 n /* SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=1,RE=1,RWU=0,SBK=0 */n SCI1C2 = 0 x0C; /发送器打开,接收器打开 n/PTAD:PTAD7=1,PTAD6=1,PTAD5=1,PTAD4=1,PTAD3=1,PTAD2=1,PTAD1=1,PTAD0=1 n PTAD = 0 xFF; /初始化端口值为FF n/*PTADD:PTADD7=1,PTADD6=1,PTADD5=1,PTADD4=1,PTADD3=1,PTADD2=

52、1,PTADD1=1,PTADD0=1 */n PTADD = 0 xFF; /端口A设置为输出 n asm CLI; /全局中断使能 ,nnMCU2汇编语言源程序:n INCLUDE derivative.incn ; XREF MCU_initn XDEF _Startup, mainn XREF _SEG_END_SSTACK nMY_ZEROPAGE: SECTION SHORT ; 变量定义区n nCounter: DS.B 1 ; 计算接收次数的变量 nTmpData: DS.B 1 ; 存储接收变量n;-nMyCode: SECTION ;代码区nmain:n_Startup:n

53、 LDHX #_SEG_END_SSTACK ;初始化堆栈n TXSn JSR MCU_init ;调用初始化子程序n n CLC n LDA #1 ; n STA Counter ; 初始化变量nmainLoop: nwaitToReceive: n BRCLR 5,SCI1S1,waitToReceive ;有接收满标志吗n LDA SCI1D ; 有记取数据到变量TmpData n STA TmpData n INC Counter ; 变量counter加1 n LDA Counter n NEGA ; 取反n STA PTBD ; 送到端口A以显示接收次数 nwaitToSend:

54、n BRCLR 7,SCI1S1,waitToSend;是否可以发送数据,否,一直在等待 n LDA TmpData ;是,发送数据 n STA SCI1D n BRA mainLoop nMCU_init: ;初始化子程序 n ;SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=0,RE=0,RWU=0,SBK=0 n CLR SCI1C2 ; 禁止SCI1模块 n LDA SCI1S1 ; 读取寄存器 SCI1S1 以清除寄存器 SCI1S1的标志 n LDA SCI1D ; 读取寄存器 SCI1D 以清除其他标志 n ; SCI1BDH: SBR12=0,SBR1

55、1=0,SBR10=0,SBR9=0,SBR8=0 n CLR SCI1BDH ;设置波特率为65200 n ;SCI1BDL:SBR7=0,SBR6=0,SBR5=1,SBR4=1,SBR3=0,SBR2=0,SBR1=1,SBR0=1 n MOV #$33,SCI1BDL n ;SCI1C1:LOOPS=0,SCISWAI=0,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0 n CLR SCI1C1 ;RxD 和TxD 使用独立管脚,8位,无硬件奇偶效验 n ; SCI1C3: R8=0,T8=0,TXDIR=0,ORIE=0,NEIE=0,FEIE=0,PEIE=0 n CLR SCI1C3 ;中断禁止 n ;SCI1C2: TIE=0,TCIE=0,RIE=0,ILIE=0,TE=1,RE=1,RWU=0,SBK=0 n MOV #$0C,SCI1C2 ;发送器打开,接收器打开 n n LDA PTBD ;初始化端口值为FF n ORA #$FFn STA PTBDn n LDA PTBDD ;端口B设置为输出 n ORA #$F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论