串口 配置求助
bit busy;char wptr;
char rptr;
char buffer;
void UART_Init()//9600bps@11.0592MHz
{
// SCON = 0x50;
// TMOD = 0x00;
// TL1 = BRT;
// TH1 = BRT >> 8;
// TR1 = 1;
// AUXR = 0x40;
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x20; //设置定时器模式
TL1 = 0xFD; //设置定时初始值
TH1 = 0xFD; //设置定时重载值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
wptr = 0x00;
rptr = 0x00;
busy = 0;
}
void UART_SendByte(u16 Data)
{
while (busy);
busy = 1;
SBUF = Data;
}
void UartIsr() interrupt 4
{
if (TI)
{
TI = 0;
busy = 0;
}
// if (RI)
// {
// RI = 0;
// buffer = SBUF;
// wptr &= 0x0f;
// }
}
void main(void)
{
Io_Init();
UART_Init();
ES = 1;
EA = 1;
while (1)
{
// if (rptr != wptr)
// {
// UART_SendByte(buffer);
// rptr &= 0x0f;
// }
UART_SendByte(2);
}
}
这是根据例程更改代码,原例程可以实现收发通信但是我只需要发送数据,但是得到的是乱码 不知道是不是哪里配置有问题。我也尝试过更改初始化的配置降低 波特率但是一样是乱码。请各位大佬指点迷津
应该是串口求助,而不是ADC求助.
void UART_SendByte(u8 Data)
{
SBUF = Data;
busy = 1;
while (busy);
}
社区闲人 发表于 2024-1-11 15:53
应该是串口求助,而不是ADC求助.
void UART_SendByte(u8 Data)
是的写错标题了不过ADC也确实有问题,现在搞串口是想借用串口查看ADC的采样数据 如果要串口发送U16数据,可以这样:
void UART_SendByte(u16 Data)
{
SBUF = Data >> 8;
busy = 1;
while (busy);
SBUF = (u8)Data;
busy = 1;
while (busy);
} ADC配置 可以参考手册上的程序
你这从那淘来的程序,,,定时器的初值有问题 本帖最后由 _奶咖君_ 于 2024-1-11 17:51 编辑
还有一件事,你这里发送的2是数值2不是字符2
你在串口接收的时候也要注意以什么显示
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6178&page=1#pid52274
我刚经历了串口通讯乱码,用的是STC11F02E,外接晶振24MHz,官方例程发送是乱码。
乱码的原因就是MCU的波特率和上位机软件的波特率不一致导致的,昨天出现了MCU发一个字符'a',
上位机收到三个00的情况,
1)使用外接晶振的话,烧写程序的时候要取消勾选“使用内部IRC……”,外接晶振多少,就在程序里面修改晶振定义的数值;
烧写后给单片机断电,给电容放电,彻底再冷启动一次;
2)MCU和上位机的波特率设置要一致;
3)官方例程运行不正确的话,就是串口的初始化有问题,尝试用STC-ISP的串口波特率计算器重新生成串口初始化代码,那几种组合都试试,
wangxiangtan 发表于 2024-1-11 18:40
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6178&page=1#pid52274
我刚经历了串口通讯乱码, ...
感谢指导 明天我试一试 wangxiangtan 发表于 2024-1-11 18:40
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6178&page=1#pid52274
我刚经历了串口通讯乱码, ...
有一个疑问是不是串口发送的0x66 或66 这种数据类型都会转化ASCII码所对应的字符
页:
[1]
2