搜索
bottom↓
回复: 7

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

[复制链接]

出0入0汤圆

发表于 2013-11-23 10:37:41 | 显示全部楼层 |阅读模式
单片机用的是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没有任何反应,不懂问题在哪里,求解!

本帖子中包含更多资源

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

x

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-11-23 12:30:19 | 显示全部楼层
你把REN=1放到SM=1后面试试,,,另外你的“I get”后面少个空格,应该是“I get ”       因为你for循环是循环了6次,所以6个字符

出0入0汤圆

发表于 2013-11-23 13:52:10 | 显示全部楼层
我找到了原因并且重现了你的错误。。。你的for循环下while()后面没加分号

出0入0汤圆

 楼主| 发表于 2013-11-23 23:09:18 | 显示全部楼层
zztbb868 发表于 2013-11-23 13:52
我找到了原因并且重现了你的错误。。。你的for循环下while()后面没加分号 ...

嗯!多谢了,这问题我解决了。但又有个问题不解,请多多指教!在STC下载软件自带的串口助手我向单片机发送X串口助手只返回I get,于是我用另一个串口助手软件发送X,它能返回I get X
是什么原因使我用STC的串口助手接收的时候丢失了我发送的X啊?

出0入0汤圆

发表于 2013-11-24 13:26:50 | 显示全部楼层
我在2楼指出的错误你改过来了吗? get后面少个空格就会接收不到x

出0入0汤圆

 楼主| 发表于 2013-11-24 14:49:47 | 显示全部楼层
zztbb868 发表于 2013-11-24 13:26
我在2楼指出的错误你改过来了吗? get后面少个空格就会接收不到x

照你说的我改了,效果确实也对了。但是我疑问一维字符数组最后一个不是存放结束符“/0”的吗?所以“I get”算上结束符刚好循环六次就可以了,若在get后面再加一个空格应该循环7次才对呢?

出0入0汤圆

发表于 2013-11-24 16:21:48 | 显示全部楼层
ruan18278816371 发表于 2013-11-24 14:49
照你说的我改了,效果确实也对了。但是我疑问一维字符数组最后一个不是存放结束符“/0”的吗?所以“I ge ...

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

出0入0汤圆

 楼主| 发表于 2013-11-24 16:57:32 | 显示全部楼层
zztbb868 发表于 2013-11-24 16:21
结束符是不输出的啊,你要输出的话是要有6个有效的字符的

那为何我不加空格在另一个串口助手软件都可以返回“I get X”,就是在SCT上自带的串口助手不行只返回“I get”呢?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-23 16:27

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

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