搜索
bottom↓
回复: 11

以解决STC115F2K32S2,新手 串口打印字符串“1234”,打印“12345” 乱码,不知什么原因

[复制链接]

出0入0汤圆

发表于 2020-11-11 15:32:16 | 显示全部楼层 |阅读模式
本帖最后由 我会想你的 于 2020-11-12 08:55 编辑

问题找到了,是我开了全局中断,注释了就可以,谢谢各位大佬帮忙

c语言小白,串口打印字符串“1234”,打印“12345” 乱码,不知什么原因?哪位大佬可以帮我看下?
我使用的单片机是STC115F2K32S2
烧写时我晶振使用的是22.1184MHz

代码如下:
#include<STC15F.h>
#include<string.h>


#define MAIN_Fosc                                                                22118400L                //主时钟,晶振频率不同的直接在这里修改频率
#define serial_one_baud_rate                115200L                        //波特率,只需在这里修改波特率就可以了
#define        Timer1_Reload                                                (65536UL -(MAIN_Fosc / 4 / serial_one_baud_rate))           //用定时器1做波特率发生器,计算定时器1的重装值       

unsigned char Table[]="12345";
unsigned char Buff[32];  //数据缓冲区
sbit KEY=P3^2;

//发送数据函数
void SEND_data(unsigned char *Buff)
{
unsigned char j;
        unsigned char lenth=0;
   lenth=strlen(Buff);//计算数据长度
        for(j=0;j<lenth;j++)  //发送数据
{
  SBUF=Buff[j];   
  while(TI==0);
  TI=0;
}
}      
//延时1ms函数
void delay_1ms(unsigned int t)
{
unsigned int x,y;
for(x=t;x>0;x--)
  for(y=110;y>0;y--);
}
//缓冲区初始化
void Buff_init()
{
unsigned char n;    //将Table里的数据放到缓冲区里
for(n=0;n<16;n++)  
{
  Buff[n]= Table[n];
  delay_1ms(100);
}
}
//串口初始化函数
void serial_init()
{
        SCON |= 0x40;                                //8位数据
        TR1 = 0;                                        //关闭定时器
        TMOD &= 0x0F;                //设定定时器1为16位自动重装方式
        AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TH1 = (u8)(Timer1_Reload >> 8);
        TL1 = (u8)Timer1_Reload;
        TR1  = 1;                                        //打开定时器
        PS = 1;        //高优先级中断
        REN = 1;        //允许接收
        ES  = 1;        //允许中断
        EA = 1;                //允许全局中断
}


void main()
{
        unsigned char i;
Buff_init();
serial_init();
while(1)
{
        if(KEY==0)
        {
                  while(!KEY);
      SEND_data(Buff);
                        delay_1ms(1000);
}
}
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入93汤圆

发表于 2020-11-12 08:08:36 来自手机 | 显示全部楼层
我会想你的 发表于 2020-11-12 07:52
中断开了还没有用

是哪本教材诉你没有用的?这不误人子弟嘛。发送一个字节后会进入中断,但你没有ISR程序不得跑飞。要么就别开中断,开了就要有配套的ISR,哪怕ISR什么也不操作。

出20入25汤圆

发表于 2020-11-11 16:43:46 | 显示全部楼层
看看是不是接收到的HEX 就错了,错了单片机到接收的问题

出0入93汤圆

发表于 2020-11-11 17:36:01 来自手机 | 显示全部楼层
串口中断你开启了,中断服务程序在哪呢?

出40入518汤圆

发表于 2020-11-11 18:05:48 来自手机 | 显示全部楼层
lenth打印看看

出0入0汤圆

发表于 2020-11-11 22:12:51 | 显示全部楼层
你的这种方式不需开启串口中断。查询法判断TI即可。

出0入0汤圆

发表于 2020-11-11 22:30:55 | 显示全部楼层
串口助手, 切换到 hex 模式看看

出0入0汤圆

 楼主| 发表于 2020-11-12 07:52:46 | 显示全部楼层
takashiki 发表于 2020-11-11 17:36
串口中断你开启了,中断服务程序在哪呢?

中断开了还没有用

出0入0汤圆

 楼主| 发表于 2020-11-12 07:54:43 | 显示全部楼层

lenth 打印出来会加 1 位 我昨天重新学了下 数组 因为有 “\0”

出1310入193汤圆

发表于 2020-11-12 08:01:46 | 显示全部楼层
hex   和文本的差别  

出0入0汤圆

 楼主| 发表于 2020-11-12 08:03:27 | 显示全部楼层

打印出来lenth后发现第一次数据是对的 ,后面就是错的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2020-11-12 08:52:45 | 显示全部楼层
takashiki 发表于 2020-11-12 08:08
是哪本教材诉你没有用的?这不误人子弟嘛。发送一个字节后会进入中断,但你没有ISR程序不得跑飞。要么就 ...

大佬,是我表达的不清楚,我的意思是我没有使用中断,现在我也找到问题了,是你说的,发送数据后进入中断了,总的来说是我开了全局中断,谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 21:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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