找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1639|回复: 13
打印 上一主题 下一主题
收起左侧

单片机串口为什么是这样的?

[复制链接]
跳转到指定楼层
楼主
主函数
void uartdo()
{
        if(uart_index==0)
                return;
       
        if(uart_recv[uart_index-2]==0x0d && uart_recv[uart_index-1]==0x0a)
        {
                if(uart_index==4 && uart_recv[0]=='S' && uart_recv[1]=='T')
                        sprintf(sendstring,"$%02d,%5.2f\r\n",(uint)distance,temp);
                else if(uart_index==6 && uart_recv[0]=='P' && uart_recv[1]=='A' && uart_recv[2]=='R' && uart_recv[3]=='A')
                        sprintf(sendstring,"#%02d,%02d\r\n",(uint)para_buf[1],(uint)para_buf[0]);
                else
                        sprintf(sendstring,"ERROR\r\n");
                send(sendstring);
                uart_index=0;
        }
        else if(uart_index>=7)
        {
                sprintf(sendstring,"ERROR\r\n");
                send(sendstring);
                uart_index=0;
        }
        memset(uart_recv,0,uart_index);
       
}
uart.c
void UartInit(void)                //9600bps@12.000MHz
{
        SCON = 0x50;                //8???,?????
        AUXR |= 0x01;                //??1?????2???????
        AUXR |= 0x04;                //???2???Fosc,?1T
        T2L = 0x8F;                //??????
        T2H = 0xFD;
        AUXR |= 0x10;                //?????2
        ES = 1;
        EA = 1;
}

void sendbyte(unsigned char dat)
{
        SBUF=dat;
        while(TI==0);
        TI=0;
       
}

void send(unsigned char *dat)
{
        while(*dat!='\0')
        sendbyte(*dat++);
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1058641 发表于 2024-5-20 22:39 | 只看该作者
这是图片

屏幕截图 2024-05-20 223853.png (189.05 KB, 下载次数: 30)

屏幕截图 2024-05-20 223853.png
回复

使用道具 举报

板凳
ID:237471 发表于 2024-5-21 06:45 | 只看该作者
波特率好像不对,代码里的是9600,图片里的是4800
回复

使用道具 举报

地板
ID:1080935 发表于 2024-5-21 08:08 | 只看该作者
应该是波特率的问题,你看看你左侧硬件选项是不是选了内部时钟,看你下载后的时钟应该是11.0592(11.063MHz),程序中按照12MHz时钟设置的波特率。
回复

使用道具 举报

5#
ID:542270 发表于 2024-5-21 08:10 | 只看该作者
keil软件中更改格式吧 edit configuartation  encoding    是国标2312还是UTF8
回复

使用道具 举报

6#
ID:76027 发表于 2024-5-21 08:48 | 只看该作者
void UartInit(void)                //9600bps@12.000MHz
你下载的时候选的是11.0592
回复

使用道具 举报

7#
ID:76027 发表于 2024-5-21 08:50 | 只看该作者
还有你串口波特率选 的是4800
回复

使用道具 举报

8#
ID:1058641 发表于 2024-5-22 00:01 | 只看该作者
改成了12M,但是输出都是ERROR

屏幕截图 2024-05-22 000101.png (173.02 KB, 下载次数: 29)

屏幕截图 2024-05-22 000101.png
回复

使用道具 举报

9#
ID:237471 发表于 2024-5-22 05:44 | 只看该作者
uart_recv[0] 这个是在哪里赋值的?看一下赋值的是不是有问题,看了一下你的代码,应该是你的问题,不是串口的问题
回复

使用道具 举报

10#
ID:1080935 发表于 2024-5-22 08:08 | 只看该作者
把你收到的数据打印出来看看(最好16进制),看看又没有发送回车换行符,把ERROR编号,看看从哪出的错。也可不要文本发送,全改为16进制发送看看,确定发送回车和换行
回复

使用道具 举报

11#
ID:65956 发表于 2024-5-22 08:32 | 只看该作者
rtyweq 发表于 2024-5-22 00:01
改成了12M,但是输出都是ERROR

因为你发送时没有加换行回车,判断不到那两个就认为错误了
回复

使用道具 举报

12#
ID:1074206 发表于 2024-5-22 10:30 | 只看该作者
乱码出现一半可能是 波特率不对,或者接线没接好
回复

使用道具 举报

13#
ID:1058641 发表于 2024-5-23 20:21 | 只看该作者
改成这样可以了

屏幕截图 2024-05-23 202054.png (87.3 KB, 下载次数: 37)

屏幕截图 2024-05-23 202054.png
回复

使用道具 举报

14#
ID:1112477 发表于 2024-5-23 21:29 | 只看该作者

波特率的缘故吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表