初学串口通信,遇到问题向各位大侠求解

2020-01-25 15:36发布

单片机用的是STC89C52晶振11.0592M,照着郭老大的代码敲的程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,a,i;
uchar code table[]="I get";
void init()
{
        TMOD=0X20;//设置定时计数器T1工作方式为方式2,8位初值自动重装
        TH1=0xfd;//TH1装0xfd设置波特率为9600
        TL1=0xfd;
        TR1=1;//定时器1运行控制位
        REN=1;//允许串口接收数据
        SM0=0;//设置串口工作方式为方式1(10位异步收发(8位数据),波特率可变(由定时器1的溢出率控制))
        SM1=1;
        EA=1;//总中断开关
        ES=1;//串口中断开关
}
void main()
{
        init();
        while(1)
        {
                if(flag==1)
                {
                        ES=0;
                        for(i=0;i<6;i++)
                        {
                                SBUF=table[i];//SBUF为串口特殊功能寄存器
                                while(!TI)//TI为发送中断标志位
                                TI=0;
                        }
                        SBUF=a;
                        while(!TI);
                        TI=0;
                        ES=1;
                        flag=0;
                }

        }
}
void ser() interrupt 4
{
        RI=0;//接收中断标志位
        a=SBUF;
        flag=1;
}
程序下载完一打开串口调试助手就出现单片机向串口不停地发送乱码,我在发送区发送X没有任何反应,不懂问题在哪里,求解!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
zztbb868
1楼-- · 2020-01-25 18:42
你把REN=1放到SM=1后面试试,,,另外你的“I get”后面少个空格,应该是“I get ”       因为你for循环是循环了6次,所以6个字符
zztbb868
2楼-- · 2020-01-25 23:16
我找到了原因并且重现了你的错误。。。你的for循环下while()后面没加分号
ruan18278816371
3楼-- · 2020-01-26 01:47
zztbb868 发表于 2013-11-23 13:52
我找到了原因并且重现了你的错误。。。你的for循环下while()后面没加分号 ...

嗯!多谢了,这问题我解决了。但又有个问题不解,请多多指教!在STC下载软件自带的串口助手我向单片机发送X串口助手只返回I get,于是我用另一个串口助手软件发送X,它能返回I get X
是什么原因使我用STC的串口助手接收的时候丢失了我发送的X啊?
zztbb868
4楼-- · 2020-01-26 04:55
我在2楼指出的错误你改过来了吗? get后面少个空格就会接收不到x
ruan18278816371
5楼-- · 2020-01-26 07:18
 精彩回答 2  元偷偷看……
zztbb868
6楼-- · 2020-01-26 09:33
ruan18278816371 发表于 2013-11-24 14:49
照你说的我改了,效果确实也对了。但是我疑问一维字符数组最后一个不是存放结束符“/0”的吗?所以“I ge ...

结束符是不输出的啊,你要输出的话是要有6个有效的字符的

一周热门 更多>