1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,嵌入式系统设计原理与应用,Design and application of embedded system based on MCU,第,7,章 串行通信接口,SCI,孙文义,wenyisun,东北大学秦皇岛分校控制工程学院,2014,年,3,月,1,提纲,异步串行通信的基础知识,电平转换电路与,SCI,通用编程原理,XS128 SCI,模块寄存器,串行口初始化与收发编程的基本方,法,串行通信通用函数与测试实例,有关串行通信编程的进一步讨论,2,异步串行通信的基础知识,1.,异步串行通信的格式,(NR
2、Z),2.,串行通信的波特率,定义,:,每秒内传送的位数。,单位,:,b/s,或,bps,常用,:,1200bps,、,4800bps,、,9600bps,3,3.,奇偶校验,奇校验:校验位为,0,或,1,,使得,1,的数目是奇数,偶校验:校验位为,0,或,1,,使得,1,的数目是偶数,4.,串行通信的传输方式,单工:,1,根数据线,全双工:,2,根数据线,半双工:,1,根数据线,4,RS-232C,总线标准,1.,采用负逻辑,逻辑“,1”,:,-15V,-3V,逻辑“,0”,:,+3V,+15V,2.,传输距离,30m,,通信速率,20Kbps,3.,接口,9,芯、,25,芯,地线、发送数据
3、线、接收数据线,5,电平转换芯片,MAX232,6,SCI,的基本编程原理,7,SCI,的主要功能是:,接收时,把外部的单线输入的数据变成一个字节的并行数据送入,MCU,内部;,发送时,把需要发送的一个字节的并行数据转换为单线输出。,8,9,10,根据波特率设置寄存器的公式:,BR=f,BUS,/(16Bt),举例:总线频率,fBUS,19.6608MHz,,,定义波特率,Bt=9600(,针对,SCI0),SCI0BDL=0 x80;/,须先给低,8,位赋值,SCI0BDH=0 x00;/,再给高,5,位赋值,11,缩写:,SCICR1,位定义:,数据位,D7,D6,D5,D4,D3,D2,
4、D1,D0,定,义,LOOPS,SCISWAI,RSRC,M,WAKE,ILT,PE,PT,复,位,0,0,0,0,0,0,0,0,SCICR2,控制寄存器,2,12,举例:设置允许,SCI,、正常码输出、,8,位数据、无校验,允许发送,允许接收,允许接收中断,SCI0CR1=0 x00,;,SCI0CR2=0 x2C,;,13,SCISR1,状态寄存器,1,SCISR2,状态寄存器,2,14,SCIDRH/L,数据寄存器,15,设置,SCI,波特率寄存器,设置,SCI,控制寄存器,1,设置,SCI,控制寄存器,2,初始化过程,16,查询方式发送接收一个字符,发送数据,可以发送,数据吗?,是,
5、否,接收数据,可以接收,数据吗?,是,否,17,void,SCI_Init(void,),SCI0BD=BUS_FREQUENCY/BAUDRATE;,SCI0CR1=0X00;,SCI0CR2=0X2C;,18,void,SCI_Transmit(byte,data),while(!SCI0SR1_TDRE);,/,等待发送缓冲区空,SCI0DRL=data;,19,void,SCI_Receive(byte,*data),*data=SCI0DRL;,20,#,pragma,CODE_SEG _NEAR_SEG NON_BANKED,interrupt void,SCI_Int(void,),/Receiver data register full interrupt,if(SCI0SR1_RDRF),SCI_IntRx,();,/Transmit data register empty interrupt,if(SCI0SR1_TDRE),/Transmit,complete interrupt,if(SCI0SR1_TC),#,pragma,CODE_SEG DEFAULT,21,22,