第四讲异步串行通信(SCI)通信协议基础协议的分层握手与应答超时控制1.串行通信是CPU与外界进行信息交换的一种方式,是指数据一位一位地按顺序传送带通信方式。2.串行通信的两种基本的工作方式:异步传送方式同步传送3.1通信协议基础通信的内容是什么。如何通信何时通信通信协议的内容通信协议的功能通信协议就是对数据传送方式的规定,包括数据格式定义和数据位定等。3.2SCI协议的分层应用程序自定协议异步串行通信协议电气接口与底层通信链路应用层中间层串行协议RS232这个就是今天的主要内容提示:这个简单的协议后面马上要到!!!SCI字符数据的传送格式:1、起始位:通信线上没有数据被传输时处于逻辑“1”状态。当发送设备要发送一个字符数据时,首先发出一个逻辑“0”电平,这个逻辑低电平就是起始位。起始位通过通信线传向接收设备,接收设备检测到这个低电平后,就开始准备接收数据位信号。起始位的作用就是使设备同步,通信双方必须在传送数据位前协调同步。2、数据位:当接收设备收到起始位后,接着就会收到数据位。数据位的个数可以是5、6、7、8、9位,这些数据位被接收到移位寄存器中,构成传送数据字符。在字符传送过程中,数据位从最低有效位开始传送,依次在接收设备中被转换为并行数据。3、奇偶校验位:数据发送完之后,便可以发送奇偶校验位。奇偶校验用于有限差错检测,通信双方应约定一致的奇偶校验方式。偶校验:数据位和奇偶位1的个数为偶数奇校验:数据位和奇偶位1的个数为奇数4、停止位:在奇偶位或数据位后发送的是停止位,停止位是一个字符数据的结束标志,可以是1位、1.5位、2位的低电平。接收设备收到停止位后,通信线路上就恢复逻辑“1”状态,直到下一个字符数据的起始位到来。5、波特率设置:通信线路上传输的所有位信号都保持一致的持续时间,每一位的宽度都由数据传送速率确定,而传送速率是以每秒多少个二进制位来度量的,这个速率是波特率。如果数据以每秒300个二进制位在通信线路上传送,则其传输速率就位300波特。12345687起始位数据位奇偶校验位停止位协调同步低电平,标志一个数据的结束数据位数可位5、6、7、8、9、何谓奇偶校验?主机发送握手信号并等待对方回应主机判断应答信息后进行相应的处理主机发送“结束通信”消息并等待回应接收到对方的确认消息主机结束通信检测应答信息根据回应进行相应处理接收到对方的应答信息,连接建立主机接收数据并检验后发送相应消息通知发送方根据本机状态发送回应给发送方收到“结束通信”后发送确认消息结束通信发送方接收方3.3握手与应答握手与应答的使用是相当灵活的。在保证链路可靠的情况下,发送发可以在发出握手信号后就开始发送数据。在发送完数据后不发送任何信号来表示通信结束。提示程序分析:/*=========发送子程序==========*/voidTxSCI(bytesend_data){bytei;TXDATA=0;Delay(200);//启动信号for(i=0;i8;i++){//发送8位数据if((send_data&0x01)==0)TXDATA=0;elseTXDATA=1;send_data=1;Delay(200);}TXDATA=1;//空闲时恢复高电平状态Delay(200);}发送开始位轮流发送8位数据发送奇偶校验位发送停止位12345687思考练习问题:如果要求发送偶校验位(即8位数据位和奇偶位1的个数为偶数),该怎样编写该子程序?提示:1、添加一个局部变量j。2、当TXDATA为1时,j加一。3、发送完8位数据后,该发送第九位数据(即奇偶位)时,判断变量j的第0位是否为1,若为1,第九位发送1。若为0,第九位发送0。/*=========接收子程序==========*/byteRxSCI(){bytei;byterece_data=0;while(RXDATA);Delay(100);if(RXDATA==1)//startreturn0;for(i=1;i8;i++){Delay(200);//1??为什么i不是从1到9呢。if(RXDATA==0)rece_data&=0x7f;elserece_data|=0x80;rece_data=1;}Delay(200);//8if(RXDATA==0)rece_data&=0x7f;elserece_data|=0x80;Delay(200);//endif(RXDATA==0){RxBuf=0x00;return0;}else{RxBuf=rece_data;rece_data=0;return1;}}TxSCI()和RxSCI()是SCI通信的基础,所有上层通信协议是建立在这个基础之上。思考练习题:如果发送端在第九位发送有奇偶校验位。在接收端,怎样编写子程序。提示:1、设置一个局部变量j。2、接收从1到9位数据时,如果为1,则j加一。3、停止位接收完毕后,检查变量j的第0位是否为0。如果为0,则接收的数据正确。否则错误。作业:1、请在读懂程序的基础上,要求发送一组8个数据。(30分)2、请SCI实现一个握手与应答通信过程。如主机发送一个0x13给从机,从机受到0x13后,发送一个0x31给主机。这时表示从机可以批量接受数据了。(40分)3、请用流程图说明本程序。(30分)4、在完成1、2、题的基础上,利用握手与应答实现一组8个数据的传送。首先由主机进行连接,连接后,从机给出应答。主机接受到从机的应答后,开始发送8个数据,从机接受完数据给出“确认信息”,通信结束。(附加题)