串行通信接口SCI课件_第1页
串行通信接口SCI课件_第2页
串行通信接口SCI课件_第3页
串行通信接口SCI课件_第4页
串行通信接口SCI课件_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、第7章 串行通信接口(SCI)主要内容异步串行通信的基础知识电平转换电路与SCI通用编程原理GP32SCI模块寄存器 串行口初始化与收发编程的基本方法 串行通信通用函数与测试实例 串行通信进一步讨论 7.1异步串行通信的基础知识 7.1.1 基本概念()异步串行通信的格式 SCI通常采用NRZ数据格式,即:standard non-return-zero mark/space data format,译为:“标准不归零传号/空号数据格式”。“不归零”的最初含义是:用正、负电平表示二进制值,不使用零电平。“mark/space”即“传号/空号”分别是表示两种状态的物理名称,逻辑名称记为“1/0”

2、。下图给出了 8位数据、无校验情况的传送格式。第0位第1位第2位第3位第4位第5位第6位第7位停止位开始位SCI数据格式(2)串行通信的波特率 波特率(baud rate):每秒内传送的位数。 波特率单位是位/秒,记为bps。通常情况下,波特率的单位可以省略。通常使用的波特率有300、600、900、1200、1800、2400、4800、9600、19200、38400。 字符奇偶校验检查(character parity checking)称为垂直冗余检查( vertical redundancy checking,VRC),它是每个字符增加一个额外位使字符中“1”的个数为奇数或偶数。 奇

3、校验:如果字符数据位中“1”的数目是偶数,校验位应为“1”,如果“1”的数目是奇数,校验位应为“0”。 偶校验:如果字符数据位中“1”的数目是偶数,则校验位应为“0”,如果是奇数则为“1”。 (3)奇偶校验MCU引脚一般输入/输出使用TTL电平,而TTL电平的“1”和“0”的特征电压分别为2.4V和0.4V,适用于板内数据传输。为了使信号传输得更远,美国电子工业协会EIA(Electronic Industry Association) 制订了串行物理接口标准RS-232C。RS-232C采用负逻辑,-3V-15V为逻辑“1”,+3V+15V为逻辑“0”。RS-232C最大的传输距离是30m,

4、通信速率一般低于20Kbps。 7.1.2 RS-232C总线标准7.1.2 RS-232C总线标准 RS-232接口,简称“串口”,它主要用于连接具有同样接口的室内设备。目前几乎所有计算机上的串行口都是9芯接口。右图给出了9芯串行接口的排列位置,相应引脚含义见表7-1。4123567899芯串行接口排列表7-1 9芯串行接口引脚含义表引脚号功 能引脚号功 能12345接收线信号检测(载波检测DCD)接收数据线(RXD)发送数据线(TXD)数据终端准备就绪(DTR)信号地(SG)6789数据通信设备准备就绪(DSR)请求发送(RTS)清除发送振铃指示返回7.2.2 SCI的基本编程原理SCI编

5、程模型SCI 数据寄存器MCU 的 内 部 总 线 (Internal Bus)接收移位寄存器发送移位寄存器接收引脚RxD发送引脚TxDSCI 控制寄存器SCI状态寄存器SCI波特率寄存器返回7.3 GP32 SCI模块寄存器 SCI的寄存器 MC68HC908GP32的SCI有7个寄存器,地址为$0013$0019 。(1)SCI波特率寄存器(SCI Baud Rate Register,SCBR) SCBR的作用是设置串行通信的波特率 ,其地址是$0019。 D7、D6、D3:未定义; D5D4 SCP:波特率预分频位(SCI Baud Rate Prescaler Bits) SCP1、

6、SCP0=00 01 10 11 PD= 1 3 4 13数据位 D7 D6 D5 D4 D3 D2 D1 D0定义 x x SCP1 SCP0 x SCR2 SCR1 SCR0复位 0 0 0 0 0 0 0 0 D2D0 SCR:波特率选择位(SCI Baud Rate Select Bits),定义波特率另一分频值,记为:BD,定义如下: SCR2、1、0 =000 001 010 011 100 101 110 111 BD = 1 2 4 8 16 32 64 128 设fSCI为串行通信时钟源频率,fSCI= fBUS或CGMXCLK,取决于CONFIG2的SCIBDSRC,一般设

7、定SCIBDSRC=1,SCI用内部总线时钟,则fSCI= fBUS,则波特率的定义公式为: BtfBUS /(64PDBD)(1)SCI波特率寄存器(SCI Baud Rate Register,SCBR)(2) SCI控制寄存器1(SCI Control Register 1,SCC1)SCC1的地址是:$0013 ,定义为: D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 0 0复位 LOOPS ENSCI TXINV M WAKE ILTY PEN PTY定义数据位循环模式选择位SCI允许位奇偶校验允许位空闲线类型位唤醒条件位模式-字符长度选择位发送反转标志位奇

8、偶校验类型选择位(3) SCI控制寄存器2(SCI Control Register 2,SCC2)SCC2的地址是:$0014 ,定义为:发送中断允许位 发送完成中断允许位 接收器唤醒位发送器允许位 接收中断允许位 0 0 0 0 0 0 0 0复位SCTIE TCIE SCRIE ILIE TE RE RWU SBK定义 D7 D6 D5 D4 D3 D2 D1 D0数据位空闲线中断允许位接收器允许位 发送终止位 (4) SCI控制寄存器3(SCI Control Register 3,SCC3)SCC3的地址是:$0015 ,定义为: 0 0 0 0 0 0 0 0复位R8 T8 DMA

9、RE DMATE ORIE NEIE FEIE PEIE 定义 D7 D6 D5 D4 D3 D2 D1 D0数据位接收位8 发送位8 接收器帧错误中断允许位 接收器噪声错误中断允许位 接收器溢出中断允许位 DMA发送允许位 DMA接收允许位 接收器奇偶错误中断允许位 (6) SCI状态寄存器2(SCI Status Register 2,SCS2 )SCS2的地址是:$0017 ,定义为: 0 0 0 0 0 0 0 0复位 BKF RPF定义(只读) D7 D6 D5 D4 D3 D2 D1 D0数据位未定义 终止码标志位 接收进行标志位 (7) SCI数据寄存器(SCI Data Reg

10、ister ,SCDR ) SCDR为SCI系统最常用的寄存器,它的地址是:$0018。写入时,为要发送的8位数据,记为:T7T0;读出时,为接收的8位数据,记为:R7R0。不受复位影响。(2)发送一个数据与接收一个数据 发送数据是通过判断状态寄存器SCS1的第7位(SCTE)进行的,而接收数据是通过判断状态寄存器SCS1的第5位(SCRF)进行的。不论是发送还是接收,均使用SCI数据寄存器SCDR。发送时,将要发送的数据送入SCDR即可,接收时,从SCDR中取出的即是收到的数据。 ;串行发送A中的数 BRCLR 7,SCS1,* ;SCS1.7=0? 为0则等待 STA SCDR ;SCS1

11、.7=1,可以发送数据 ;查询方式接收一个串行数据,接收的数据放入寄存器A中 BRCLR 5,SCS1,* ;SCS1.5=0? 为0则等待 LDA SCDR ;SCS1.5=1,可以取出数据返回7.5 串行通信通用函数与测试实例7.5.1 串行通信子程序串行通信头文件 SCI.h 串行通信驱动文件 SCI.c 串行通信头文件 SCI.h /SCI.h串行通信头文件- #include GP32C.h /GP32 MCU映像寄存器名定义#include Type.h /类型别名定义#define ReSendStatusR SCS1 /SCI状态寄存器#define ReTestBit 5 /

12、接收缓冲区满标志位#define SendTestBit 7 /发送缓冲区空标志位#define ReSendDataR SCDR /数据寄存器/串行通信函数声明void SCIinit(void); /串行口初始化void SCIsend1(INT8U o); /发送1字节void SCIsendN(INT8U n, INT8U ch); /发送n字节INT8U SCIre1(INT8U *p); /接收1字节INT8U SCIreN(INT8U n, INT8U ch); /接收n字节_串行通信驱动文件 SCI.c串行通信驱动文件包括SCI初始化、接收1字节、发送1字节、接收n字节和发送n

13、字节函数。读者可以直接使用这些函数进行MCU的串行通信编程。/SCI.c串行通信-*/本文件包含: */ (1)SCIinit: 串行口初始化 */ (2)SCIsend1:串行发送1个字节 */ (3)SCIsendN:串行发送n字节 */ (4)SCIre1: 串行接收1字节 */ (5)SCIreN: 串行接收n字节 */硬件连接: */ MCU的串口与PC方的串口相连 */-*/头文件#include SCI.h/SCIinit:串行口初始化-*/功能:对串行口进行初始化,默认为允许SCI,正常码输出,8位数 * 据,无校验, */允许发送器,允许接收器.查询方式收发,波特率为9600

14、(设fBUS * = 2.4576MHz) */参数:无 */返回:无 */说明:该函数与具体的芯片型号(MC68HC908GP32)有关 */-*void SCIinit(void) /1.总线频率fBUS = 2.4576MHz,定义波特率Bt = 9600 SCBR = 0b00000010; /2.设置允许SCI,正常码输出,8位数据,无校验 SCC1 = 0b01000000; /3.设置允许发送,允许接收,查询方式收发 SCC2 = 0b00001100;/SCIsend1:串行发送1个字节-*/功能:串行发送1个字节 */参数:要发送的数据 */返回:无 */-*void SCI

15、send1(INT8U o) /判断ReStatusR的第SendTestBit位是否为1,是1可以发送 while (1) if (ReSendStatusR & (1SendTestBit) != 0) ReSendDataR = o; break; /SCIre1:串行收一个字节数据-*/功能:从串行口接收1个字节的数据 */参数:标志指针p */返回:接收到的数据(若接收失败,返回0 xff) */说明:参数*p带回接收标志.*p = 0,收到数据;*p = 1,未收到数据 */-*INT8U SCIre1(INT8U *p) INT16U k; INT8U i; /ReStatusR

16、第ReTestBit位为1表示可接收数据 for(k=0; k 0 xfbbb; k+) if (ReSendStatusR & (1= 0 xfbbb) i = 0 xff; *p = 0 x01; return i;m = 0; while (m n) chm = SCIre1(&fp); if (fp = 1) return 1; m+; return 0;(1)查询方式工程(08C)文件列表(2)查询方式08C语言主程序(3)中断方式MCU方主程序 7.5.2查询方式工程文件中断方式08C工程文件列表中断方式08C语言主程序main.c 串行中断子函数声明EnDisInt.h 串行中断

17、处理函数 串行中断方式矢量表文件7.5.3 中断方式工程文件返回中断方式08C工程文件列表表7-5 中断方式08C测试工程文件工程文件名SCI_INT.prj所在路径MC08Ex2007GP32GP32CC03_串行通信中断方式文件类型文件名功能简述讲解章节头文件GP32C.h芯片头文件08C工程文件组织5.3Includes.h总头文件08C工程文件组织5.3EnDisInt.h开放或禁止MCU模块中断08C工程文件组织5.3SCI.h串行通信头文件本章Type.h数据类型头文件08C工程文件组织5.3C语言子函数文件MCUinit.c芯片系统初始化函数定义初始化及PLL编程实例14.2.5

18、SCI.cCI收发子函数定义本章Vectors.c中断处理及中断向量表08C工程文件组织5.3C语言主函数Main.c主函数本章中断方式08C语言主程序main.c/-*/工 程 名:SCI_Int.prj */硬件连接: */ (1)MCU的串口与PC方的串口相连 */程序描述:利用中断方式把收到的数据发送回去 */目 的:初步掌握利用中断方式进行串行通信的基本知识 */-清华2007版嵌入式技术基础与实践实例-*/总头文件#include Includes.h/主函数void main() DisableMCUint(); /禁止总中断 /1. 芯片初始化 MCUinit(); /2. 模

19、块初始化 SCIinit(); /(1) 串口初始化 /3. 开放各模块中断 EnableSCIreInt(); /(1)开放SCI接收中断 /4. 开放总中断 EnableMCUint(); /主循环 while (1) 串行中断子函数声明EnDisInt.h 在该头文件中对开关总中断进行了宏定义,并且其他各个模块的中断设置函数在此进行声明。/EnDisInt.h开放或禁止MCU各模块中断头文件-#include GP32C.h /GP32 MCU映像寄存器名定义/开放或禁止中断宏定义#define EnableMCUint() asm(CLI) /开放总中断#define DisableM

20、CUint() asm(SEI) /禁止总中断#define EnableSCIreInt() SCC2 |= (1 5) /令SCC2.5=1,开放SCI接收中断#define DisableSCIreInt() SCC2 &= (1 5) /令SCC2.5=0,禁止SCI接收中断串行中断处理函数/Vectors08.c中断处理函数与中断向量表-*/功能: */ (1)定义中断处理子程序 */ (2)放置中断向量表 */本文件包含: / (1)SCI接收中断处理函数 */ (2)未定义的中断处理函数 */说明:该文件与芯片具体型号有关 */ (1)芯片型号MC68HC908GP32 */-

21、*#include Type.h /类型别名定义#include EnDisInt.h /开放或禁止MCU各模块中断的宏定义#include SCI.h /该头文件包含串行通信函数声明/isrSCIre:接收中断处理函数- -*/功能:接收1个字节数据, 发送接到的数据 */参数:无 */返回:无 */内部调用函数:SCIreN, SCIsendN */-*#pragma interrupt_handler isrSCIre void isrSCIre(void) INT8U f; /标志是否接受到数据 INT8U SerialBuff1; /存放接收数据的数组 DisableMCUint()

22、; /禁止总中断 /接收1个字节的数据 f = SCIreN(1, SerialBuff); /若收到数据,则发送接到的数据 if (f = 0) SCIsendN(1, SerialBuff); EnableMCUint(); /开放总中断/此处为用户中断处理函数的存放处/未定义的中断处理函数,本函数不能删除#pragma interrupt_handler isrDummy void isrDummy(void) /中断矢量表,需定义中断函数,可修改下表中的相应项目/(interrupt service routine,isr 中断处理程序)#pragma abs_address:0 xffdc /中断向量表起始地址void (* const _vectab)(void) = /省略其他未使用的中断向量定义 isrSCIre, /SCI接收中断 /省略其他未使用的中断向量定义 ;#pragma end_abs_address串行中断方式矢量表文件HC08的中断向量表的详细说明在前面章节已经介绍。在使用中断方式时,只要将

温馨提示

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

评论

0/150

提交评论