#define XON 0x11

#define XOFF 0x13查找ASCII码表,这两个对应的是DC1(设备控制1)和DC3(设备控制3)

X/ON和X/OFF为开启和关闭发送器的信号。X /ON的实际信号为ASCII的Ctrl-Q键盘组合的位组合,X/OFF信号为Ctrl-S字符。在为计算机操作系统定义调制解调器时,可能需要用 XON/XOFF或CTS/RTS来指定流控制的使用。在发送二进制数据时,XON/XOFF可能不能识别,因为它被译成了字符。

 

XON/OFF_置位

 


XON/OFF_置位_02XON/OFF_置位_03


1 #define XON  0x11    /*Ctrl-Q*/
2 #define XOFF 0x13 /*Ctrl-S*/
3
4 void Xon_Xoffsend(unsigned char *buf,unsigned char len)
5 {
6 static unsigned short int NbrDataToTransfer =len;
7
8 while(USART_ReceiveData(USART1)!=XON);
9 while(NbrDataToTransfer--)
10 {
11 USART_SendData(USART1,TxBuffer[TxCounter++]);
12 while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //等待发送结
13 if (USART_ReceiveData(USART1)==XOFF)
14 {
15 while(USART_ReceiveData(USART1)==XON);
16 }
17 }
18 }
19
20 void RTS_CTS(void)
21 {
22 if (接收缓冲区为空)
23 {
24 RTS =0 ;/*从机查询if(CTS ==0)则从机可以发送,否则停止发送*/
25 }
26 else
27 {
28 RTS =1 ;
29 }
30 if (CTS ==0) /*由从机复位和置位*/
31 {
32 Mast_send;
33 }
34 else
35 {
36 Mast_sendStop!;
37 }
38 }

View Code

XON/OFF_#define_04

 

RTS/CTS:

  用在RS232中为控制收发方向;用在协议中或UART中是硬件流控

没有串口控制器,用中断和普通IO口即可实现RTS与CTS功能。

RTS用GPIO实现,串口就绪准备接收数据拉低电平,串口停止接收拉高电平

CTS(是否可以发送数据,低电平有效)用中断实现,检测到低电平,将串口数据发送出去,检测到高电平则保留串口数据直到检测到低电平为止。

硬件流控:

  单片机   设备

  RTS     ->CTS

       CTS     <-RTS