1嵌入式系统设计原理与应用DesignandapplicationofembeddedsystembasedonMCU第7章串行通信接口SCI孙文义wenyisun@126.com东北大学秦皇岛分校控制工程学院2014年3月2提纲异步串行通信的基础知识电平转换电路与SCI通用编程原理XS128SCI模块寄存器串行口初始化与收发编程的基本方法串行通信通用函数与测试实例有关串行通信编程的进一步讨论3异步串行通信的基础知识1.异步串行通信的格式(NRZ)第0位第1位第2位第3位第4位第5位第6位第7位停止位开始位2.串行通信的波特率定义:每秒内传送的位数。单位:b/s或bps常用:1200bps、4800bps、9600bps……43.奇偶校验奇校验:校验位为0或1,使得1的数目是奇数偶校验:校验位为0或1,使得1的数目是偶数4.串行通信的传输方式单工:1根数据线全双工:2根数据线半双工:1根数据线5RS-232C总线标准1.采用负逻辑逻辑“1”:-15V~-3V逻辑“0”:+3V~+15V2.传输距离≤30m,通信速率≤20Kbps3.接口9芯、25芯地线、发送数据线、接收数据线6+5V232电平R1INT1OUTMAX232CPE16151413121110912345678+5VGND1µF×5+TTL电平转为232电平++V1++TTL电平T1INR1OUT电平转换芯片MAX2327SCI的基本编程原理SCI数据寄存器MCU的内部总线(InternalBus)接收移位寄存器15SPH15H87X0707发送移位寄存器接收引脚RxD发送引脚TxDSCI控制寄存器SCI状态寄存器SCI波特率寄存器8SCI的主要功能是:接收时,把外部的单线输入的数据变成一个字节的并行数据送入MCU内部;发送时,把需要发送的一个字节的并行数据转换为单线输出。91011根据波特率设置寄存器的公式:BR=fBUS/(16×Bt)举例:总线频率fBUS=19.6608MHz,定义波特率Bt=9600(针对SCI0)SCI0BDL=0x80;//须先给低8位赋值SCI0BDH=0x00;//再给高5位赋值12缩写:SCICR1位定义:数据位D7D6D5D4D3D2D1D0定义LOOPSSCISWAIRSRCMWAKEILTPEPT复位00000000SCICR2控制寄存器213举例:设置允许SCI、正常码输出、8位数据、无校验允许发送,允许接收,允许接收中断SCI0CR1=0x00;SCI0CR2=0x2C;14SCISR1状态寄存器1SCISR2状态寄存器215SCIDRH/L数据寄存器16设置SCI波特率寄存器设置SCI控制寄存器1设置SCI控制寄存器2初始化过程17查询方式发送接收一个字符发送数据可以发送数据吗?是否接收数据可以接收数据吗?是否18voidSCI_Init(void){SCI0BD=BUS_FREQUENCY/BAUDRATE;SCI0CR1=0X00;SCI0CR2=0X2C;}19voidSCI_Transmit(bytedata){while(!SCI0SR1_TDRE);//等待发送缓冲区空SCI0DRL=data;}20voidSCI_Receive(byte*data){*data=SCI0DRL;}21#pragmaCODE_SEG__NEAR_SEGNON_BANKEDinterruptvoidSCI_Int(void){//Receiverdataregisterfullinterruptif(SCI0SR1_RDRF){SCI_IntRx();}//Transmitdataregisteremptyinterruptif(SCI0SR1_TDRE){}//Transmitcompleteinterruptif(SCI0SR1_TC){}}#pragmaCODE_SEGDEFAULT