加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
uart.c 2.20 KB
一键复制 编辑 原始数据 按行查看 历史
#include "uart.h"
#include "delay.h"
uint ReceiveCount = 0;
uchar uart_timeout;
/**
* @brief :串口初始化
* @param :无
* @note :无
* @retval:无
*/
void drv_uart_init( )
{
//TX配置为输出 RX配置为输入
UART_TX_PxM0 |= IO_OUT_PUT_PP_M0 << UART_TX_PIN_BIT;
UART_TX_PxM1 |= IO_OUT_PUT_PP_M1 << UART_TX_PIN_BIT;
UART_RX_PxM0 |= IO_IN_PUT_ONLY_M0 << UART_RX_PIN_BIT;
UART_RX_PxM1 |= IO_IN_PUT_ONLY_M1 << UART_RX_PIN_BIT;
UART_TX = 1;
//串口配置
SCON &= (uchar)((uchar)( ~( UART_MODE | UART_RX ))); //清SM0 SM1 REN
SCON |= (uchar)( UART_8BAUDRATE_VOLATILE | UART_RX );
//TIM1配置
TMOD &= (uchar)((uchar)( ~TIM1_MODE ));
TMOD |= TIM1_MODE_2; //8位自动重装
PCON = 0x00;
TH1 = 0xFD; //波特率默认配置为9600
TL1 = 0xFD;
TI = 1; //清发送标志
TR1 = 1; //使能定时器
}
/**
* @brief :串口发送数据
* @param :
* @TxBuffer:发送数据首地址
* @Length:数据长度
* @note :无
* @retval:无
*/
void drv_uart_tx_bytes(char* TxBuffer, uchar len)
{
while(len--)
{
while( 0 == TI ); //等待上次发送完成
TI = 0; //清标志位
SBUF = *TxBuffer; //发送数据
TxBuffer++;
}
}
/**
* @brief :串口接收数据
* @param :
* @RxBuffer:发送数据首地址
* @note :无
* @retval:接收到的字节个数
*/
uchar drv_uart_rx_bytes()
{
char temp = 0;
ReceiveCount = 0;
uart_timeout = 250;
while(uart_timeout--) {
if((0 != RI) && 0 == ReceiveCount) //读取第一个字符
{
RI = 0;
temp = SBUF;
if(temp != '#')
Tx_Buf[ReceiveCount++] = temp;
else
return 0;
}
while(temp != '#' && ReceiveCount < 32 && uart_timeout--) //'#'为结束符号
{
if(0 != RI) //检测是否接收到数据
{
RI = 0; //清标志位
temp = SBUF;
Tx_Buf[ReceiveCount++] = temp; //读数据
}
uart_timeout = 250;
}
}
if(ReceiveCount <= 31)
Tx_Buf[ReceiveCount++] = '\0';
return ReceiveCount;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化