代码拉取完成,页面将自动刷新
#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;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。