stc12c5a60s2单片机第二串口通讯问题(可以发送不能接接收)

2024-11-18 13:51:19
推荐回答(5个)
回答(1):

AUXR |= 0x18;//启动独立波特率发生器,这一条S2MOD置1波特率加倍了。这样得到的波特率应该就不是4800了。不知是不是这个原因啊。我也遇到同样的问题,就是出在了串口初始化上。你再好好看看单片机手册,希望对你有帮助

回答(2):

请问您解决这个问题了吗?我现在也为这个纠结了好几天了,能给我说一下为什么吗?

回答(3):

没那么难吧。你要程序不?

回答(4):

肯书去吧00000000000000000000000000000000啊,知道啥意思?入门级错误

回答(5):

/*********************************************************************************************
程序名:    UART双串口同时工作
编写人:     
编写时间:  2009年9月25日
硬件支持:  STC12C5A60S2 外部11.0592MHZ晶振

/*********************************************************************************************/

#include //STC12C5AxxS2系列单片机头文件
/*********************************************************************************************
函数名:UART串口初始化函数
调 用:UART_init();
备 注:振荡晶体为12MHz,PC串口端设置 [ 9600,8,无,1,无 ]
/**********************************************************************************************/
void UART_init (void){
EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
ES = 1; //允许UART串口的中断
IE2=0x01;//串口2开中断

TMOD = 0x20; //定时器T/C1工作方式2
SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
TH1 = 0xFD; //定时器初值高8位设置
TL1 = 0xFD; //定时器初值低8位设置
// PCON = 0x80; //波特率倍频(不屏蔽本句波特率为19200)
TR1 = 1; //定时器启动

AUXR &= 0xF7; //波特率不倍速
S2CON = 0x50; //8位数据,可变波特率
AUXR &= 0xFB; //独立波特率发生器时钟为Fosc/12,即12T
BRT = 0xFD; //设定独立波特率发生器重装值
AUXR |= 0x10; //启动独立波特率发生器
}
/**********************************************************************************************/

/*********************************************************************************************
函数名:UART串口接收中断处理函数
调 用:[SBUF收到数据后中断处理]
结 果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)
备 注:过长的处理程序会影响后面数据的接收
/**********************************************************************************************/
void UART_R (void) interrupt 4 using 1{ //切换寄存器组到1
unsigned char UART_data; //定义串口接收数据变量
RI = 0; //令接收中断标志位为0(软件清零)
UART_data = SBUF; //将接收到的数据送入变量 UART_data

SBUF = UART_data; //将接收的数据发送回去(删除//即生效)
while(TI == 0); //检查发送中断标志位
TI = 0; //令发送中断标志位为0(软件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:UART2串口接收中断处理函数
调 用:[SBUF收到数据后中断处理]
参 数:无
返回值:无
结 果:UART2串口接收到数据时产生中断,用户对数据进行处理(并发送回去)
备 注:过长的处理程序会影响后面数据的接收
/**********************************************************************************************/
void U2ART_R (void) interrupt 8
{
unsigned char U2ART_data,temp; //定义串口接收数据变量
S2CON = S2CON & 0xfe; //令接收中断标志位为0(软件清零)
U2ART_data = S2BUF; //将接收到的数据送入变量 UART_data

S2BUF = U2ART_data; //将接收的数据发送回去(删除//即生效)
do{
temp = S2CON;
temp = temp & 0x02;
}while(temp == 0); //检查发送中断标志位
S2CON = S2CON & 0xfd; //令发送中断标志位为0(软件清零)
}

/**********************************************************************************************/

/*********************************************************************************************
函数名:主函数
调 用:无
参 数:无
返回值:无
结 果:程序开始处,无限循环
备 注:
/**********************************************************************************************/
void main (void){
UART_init();
while(1){

}
}
/**********************************************************************************************/