通信协议——uart

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分。它将要传输的资料在串行通信并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上,且UART可实现全双工通信。

 

UART初始化需要定义的一些参数:

1. 起始位

2. 数据位(8位或9位)

3. 奇偶校验位(第9位)

4. 停止位

5. 波特率设置

如下图所示

 通信协议——uart_第1张图片



UART接收数据过程

1. 输入移位寄存器将在串行数据输入线上的数据逐位移入,当数据装满后,发送到输入缓冲寄存器(SBUF)中

2. SBUF装载完数据时,产生中断,并且接收中断标志位置1

3. CPU可以此时可以在中断函数中读取SBUF中的数据

其接收中断函数如下:

/*******************************************************************************
* 函 数 名         :Uart_Interrupt()
* 函数功能		   :串口中断接收
* 输    入         :无
* 输    出         :无
*******************************************************************************/
void Uart_Interrupt(void) interrupt 4
{  
   	if(RI)
    {
		ES = 0;  //串口中断禁止
	    RI = 0;  //清除接收标志位 
		res = SBUF;   //将接收到的数据存入一个变量
		if(res != 0x0a)    //判断接收到的数据是否为换行符,0xa0为换行符的ASCII码
	    {
		    Buff[len++] = res;   //存入缓存数组
		}
		else
		{
			if(Buff[len-1] == 0x0d)     //判断前一个数据是否为回车符
			{ 
				urt_flag = 1;           //置串口标志位为1,说明数据已经接收完成
				len--;                  //接收的数据不包括回车符,所以减1后为实际的字符数目
			}
		}
		ES=1;
	}
}


UART发送数据过程

1. CPU将需要发送的数据传递给输出缓冲寄存器(SBUF,发送和接收缓冲寄存器是地址重叠,但物理结构独立的两个缓冲寄存器)

2. 输出移位寄存器接收输出缓冲寄存器的数据,然后一位一位进行输出,在输出完成后,发送标志位置1,完成数据发送

 其发送数据函数如下:

/*******************************************************************************
* 函 数 名         :Uart_Sendstring(unsigned char *str)
* 函数功能		   :串口发送函数
* 输    入         :需要发送的数组数据
* 输    出         :无
*******************************************************************************/
void Uart_Sendstring(unsigned char *str)
{
    unsigned char *str1;
    
    str1 = str;
    while(*str1 != '\0')     //空字符,意味着结束,也可以自行定义一个结束字符
    {
        SBUF = *str1;
		while(TI == 0);  //等待发送标志位置位
		TI = 0;
        str1++;
    }
}


 

你可能感兴趣的:(通信协议)