本帖最后由 gin果果 于 2022-8-31 15:43 编辑
按照官方的例程取配置的uart0 通讯收发,为什么会出现这样子的现象
红色的是电脑发给单片机的数据
蓝色的是单片机发给电脑的数据
我没有用回显,为什么会出现这种现象?
下面贴上我的代码,请各位大佬指点出错误
#include "public.h"
#include "MS.h"
/*****************************************
* @description
* @param:void
* @retval:void
****************************************/
void MS_Config_init(void)
{
InitialUART0_Timer1(9600);
INT_Uart_Init();
}
/*****************************************
* @description
* @param:void
* @retval:void
****************************************/
void InitialUART0_Timer1(uint32_t u32Baudrate) //T1M = 1, SMOD = 1
{
P06_Quasi_Mode;
P07_Quasi_Mode;
SCON = 0x52; //UART0 Mode1,REN=1,TI=1
TMOD |= 0x20; //Timer1 Mode1
set_SMOD; //UART0 Double Rate Enable
set_T1M;
clr_BRCK; //Serial port 0 baud rate clock source = Timer1
#ifdef FOSC_160000
TH1 = 256 - (1000000/u32Baudrate+1); /*16 MHz */
#endif
#ifdef FOSC_221184
TH1 = 256 - (1382400/u32Baudrate); /*22.1184 MHz */
#endif
set_TR1;
set_TI; //For printf function must setting TI = 1
}
/*****************************************
* @description
* @param:void
* @retval:void
****************************************/
void INT_Uart_Init(void)
{
set_P06;
set_P07;
set_ES; //enable UART interrupt
set_EA;
}
/*****************************************
* @description
* @param:void
* @retval:void
****************************************/
//uint8_t Sum_I = 0;
void SerialPort0_ISR(void) interrupt 4
{
if(RI==1)
{
clr_RI;
MS_Data.RBuf0[MS_Data.RBuf0_index] = SBUF;
if(MS_Data.RBuf0_index < RBUF_SIZE_MAX)
{
MS_Data.RBuf0_index++;
}
else
{
MS_Data.RBuf0_index = 0x00;
}
}
if(TI==1)
{
if(MS_Data.Sindex < MS_Data.SindexLen)
{
SBUF=MS_Data.Sbuf0[MS_Data.Sindex];
MS_Data.Sindex++;
}
clr_TI;
}
}
|