找回密码
 立即注册

QQ登录

只需一步,快速开始

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

萌新求助,为什么单片机串口接收的都是乱码?

[复制链接]
跳转到指定楼层
楼主
ID:885834 发表于 2021-3-17 20:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "STC15F2K60S2.H"

#define Lenth 64
sbit k1=P1^0;
typedef unsigned char u8;
u8 xdata RX1_Buffer[Lenth];
u8 xdata TX1_Buffer[Lenth];
u8 TX1_c;
u8 RX1_c;
u8 TX1_write;
u8 TX1_read;
bit TX1_Busy;

void TX1_write2buff(u8 dat)        //写入发送缓冲,指针+1
{
        TX1_Buffer[TX1_write] = dat;        //装发送缓冲
        if(++TX1_write >=Lenth)        TX1_write = 0;

        if(TX1_Busy == 0)                //空闲
        {  
                TX1_Busy = 1;                //标志忙
                TI = 1;                                        //触发中断
        }
}

void PrintString1(u8 *puts)
{
    for (; *puts != 0;        puts++)
             TX1_write2buff(*puts);         //遇到停止符0结束
}
void main()
{
        TX1_Busy=0;
        RX1_c=0;
        TX1_c=0;
        TX1_write=0;
  TX1_read=0;
        SCON = 0x50;                //
        AUXR |= 0x01;                /
        AUXR |= 0x04;                //
        T2L = 0xE0;                //
        T2H = 0xFE;                //
        AUXR |= 0x10;                //
        REN = 1;        //允许接收
        ES  = 1;        //允许中断
        EA = 1;                //允许全局中断
        
        while(1)
        {
               
        if(k1==0)
        {
           PrintString1("你好世界\n\r");
        }
}
}
void UART_1() interrupt 4
{
        if(RI)
        {
                RI=0;
        RX1_Buffer[RX1_c]=SBUF;
        if(++RX1_c>=Lenth) RX1_c=0;
        }
        
        if(TI)
        {
                TI=0;
                if(TX1_read!=TX1_write)
                {
                SBUF=TX1_Buffer[TX1_read];
                if(++TX1_read>=Lenth) TX1_read=0;
                }
                TX1_Busy=0;
        }
}



Ps:波特率没选错,9600,

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

使用道具 举报

沙发
ID:287575 发表于 2021-3-18 01:15 | 只看该作者
上述串口设置是在11.0592M的晶振设置,看看你的单片机是不是选的11.0592
回复

使用道具 举报

板凳
ID:752974 发表于 2021-3-18 08:37 | 只看该作者
如果通信正常只是显示乱码的话:1.检查通信两机的波特率;
                                             2.注意ASCII码和HEX码。  
回复

使用道具 举报

地板
ID:390416 发表于 2021-3-18 09:29 | 只看该作者
串口1打印程序 可以打印3个十六位的变量 波特率9600 http://www.51hei.com/bbs/dpj-201660-1.html

串口发送 不需要while死等 串口接收执行软件复位 http://www.51hei.com/bbs/dpj-200927-1.html
回复

使用道具 举报

5#
ID:280000 发表于 2021-3-19 23:49 | 只看该作者
串口波特率是否计算正确
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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