打印
[STC单片机]

关于stc12c5a60s2串口二通信时出现乱码问题,大神们帮忙看看

[复制链接]
1772|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
枫暖寒冬|  楼主 | 2015-10-29 13:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <stc12c5a60s2.h>

#define uint unsigned int
#define uchar unsigned char

#define      S2RI             0x01    //S2CON.1
#define      S2TI             0x02    //S2CON.2
#define      S2RB8            0x04    //S2CON.3
#define      S2TB8            0x08    //S2CON.4


uchar num[]="ATD110;\r\n";

/*========发送字符串================*/
void Com2_send_string(uchar *p)
{
        while (*p != '\0')
        {               
                S2BUF=*p;
                while(!(S2CON&S2TI));
                S2CON &= ~S2TI;
                p++;
        }
}
/*==========串口配置===============*/
void Uart2Init()                //
{
        AUXR &= 0xf7;                //波特率不倍速           auxr=0x08
        S2CON = 0x50;                //8位数据,可变波特率 方式一
        BRT = 0xfd;                        //设定独立波特率发生器重装值
        AUXR |= 0x04;                //独立波特率发生器时钟为Fosc/12,即12T   BRTX12=1
        AUXR |= 0x10;                //启动独立波特率发生器 BRTR=1
        IE2=0x01;                 //中断允许
        EA=1;
}
/*==============串口中断===============*/
void Uart2() interrupt 8 using 1
{

    if (S2CON & S2RI)                          //如果有数据到来
    {
        S2CON &= ~S2RI;                        //接收完毕标志清零
    }
        if(S2CON & S2TI);                   //如果发送完毕
            {
        S2CON &= ~S2TI;                   //发送完毕标志清零
         }

}
//延时函数
void delay(uchar z)
{
        uchar x, y;
        for(x = 0; x<110; x++)
        for(y = 0; y<z; y++);
}

void main()
{
        Uart2Init();
        while(1)
        {
        Com2_send_string(num);
        delay(5);
        }
}

相关帖子

沙发
枫暖寒冬|  楼主 | 2015-10-29 14:31 | 只看该作者
晶振用的是11.0592Mhz,16进制显示也不是对应的ascii码,代码显示的正确率只有10%左右,预设的波特率是9600,路过的大神们能否帮小弟看看

使用特权

评论回复
板凳
cainiao_123| | 2015-10-29 16:40 | 只看该作者
先用资料里的例程试试

使用特权

评论回复
地板
ayb_ice| | 2015-10-29 16:52 | 只看该作者
乱七八糟的,又是中断方式,又是查询方式

使用特权

评论回复
5
枫暖寒冬|  楼主 | 2015-10-29 22:08 | 只看该作者
ayb_ice 发表于 2015-10-29 16:52
乱七八糟的,又是中断方式,又是查询方式

请问得怎么修改呢 ?我参考他们的程序也是这么写的格式,能否给点意见指导下小弟?

使用特权

评论回复
6
ayb_ice| | 2015-10-30 08:01 | 只看该作者
枫暖寒冬 发表于 2015-10-29 22:08
请问得怎么修改呢 ?我参考他们的程序也是这么写的格式,能否给点意见指导下小弟? ...

你这个中断里其实没有 什么意义,就是清除了标志而已

查询发送,既然是查询就不要开中断了,否则可能死机,因为一旦发送完毕,进入中断,中断中清除了标志,查询时标志始终为0,导致死机

使用特权

评论回复
7
枫暖寒冬|  楼主 | 2015-10-30 16:21 | 只看该作者
ayb_ice 发表于 2015-10-30 08:01
你这个中断里其实没有 什么意义,就是清除了标志而已

查询发送,既然是查询就不要开中断了,否则可能死 ...

嗯嗯,我昨晚也测试了下把中断去掉函数去掉也出问题了 更改过波特率不过还是出问题了。我感觉我是哪个特别细节的地方出问题了,就是自己找不出来

使用特权

评论回复
8
ayb_ice| | 2015-10-30 16:39 | 只看该作者
枫暖寒冬 发表于 2015-10-30 16:21
嗯嗯,我昨晚也测试了下把中断去掉函数去掉也出问题了 更改过波特率不过还是出问题了。我感觉我是哪个特 ...

应该还是波特率不对

用示波器看看就知道了

使用特权

评论回复
9
枫暖寒冬|  楼主 | 2015-10-30 17:15 | 只看该作者
ayb_ice 发表于 2015-10-30 16:39
应该还是波特率不对

用示波器看看就知道了

好的  我回去再试试

使用特权

评论回复
10
枫暖寒冬|  楼主 | 2015-10-31 10:26 | 只看该作者
ayb_ice 发表于 2015-10-30 16:39
应该还是波特率不对

用示波器看看就知道了

哈哈,莫名奇妙的好了,虽然最后我不太明白是什么原因。可能是你说的那个查询和中断冲突,不过我串口1那样写竟然是有用的。谢谢你的帮忙 ,:lol

使用特权

评论回复
11
枫暖寒冬|  楼主 | 2015-10-31 10:27 | 只看该作者
cainiao_123 发表于 2015-10-29 16:40
先用资料里的例程试试

谢谢,程序现在好了:lol

使用特权

评论回复
12
梦在那| | 2015-10-31 15:56 | 只看该作者
枫暖寒冬 发表于 2015-10-31 10:27
谢谢,程序现在好了

楼主怎么改的呢?

使用特权

评论回复
13
枫暖寒冬|  楼主 | 2015-11-5 21:44 | 只看该作者
梦在那 发表于 2015-10-31 15:56
楼主怎么改的呢?

我把中断那段代码删了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

9

帖子

0

粉丝