大家好,在调试 STC32G12K128 35I-LQFP48时用的手册中串口2使用定时器2波特率发生器 例程,使用的P4.6,P4.7口,所以增加了一个 P_SW2|=0X01; 进行串口选择,但是在运行程序时 接收的字符串不是 程序中的 Uart Test ! 而是一串乱码, 乱码见下图,但是发送 “123”可以正常接收到单片机回复的“123”,请问这是什么问题啊? 怎么解决啊??感觉发送字符串有问题,但是不知道问题在哪,程序如下:
#include "STC32G.H"
#include "intrins.h"
#define FOSC 11059200UL
#define BRT (65536-(FOSC/115200+2)/4)
bit busy;
char wptr;
char rptr;
char buffer[16];
void Uart2Isr() interrupt 8
{
if (S2TI)
{
S2TI=0;
busy = 0;
}
if (S2RI)
{
S2RI=0;
buffer[wptr++] = S2BUF;
wptr &= 0x0f;
}
}
void Uart2Init()
{
P_SW2=0X80;
P_SW2|=0X01;
S2CFG=0X01;
S2CON = 0x50;
T2L = BRT;
T2H = BRT >> 8;
T2x12=1;
T2R=1;
wptr = 0x00;
rptr = 0x00;
busy = 0;
}
void Uart2Send(char dat)
{
while (busy);
busy = 1;
S2BUF = dat;
}
void Uart2SendStr(char *p)
{
while (*p)
{
Uart2Send(*p++);
}
}
void main()
{
EAXFR=1;
CKCON=0X00;
WTST=0X00;
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
Uart2Init();
IE2 = 0x01;
EA = 1;
Uart2SendStr("Uart Test !\r\n");
while (1)
{
if (rptr != wptr)
{
Uart2Send(buffer[rptr++]);
rptr &= 0x0f;
}
}
}
