amobbs.com 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
回复: 9

关于STC15W204S串口输出的2个问题

[复制链接]
(150250319)

打赏出0元收入0元

发表于 2015-10-3 07:49:52 | 显示全部楼层 |阅读模式
1:用下面程序,不能正确输出0XBB,输出的是0X99
#include "STC15F2K60S2.H"         
#include "delay.h"
#include "init.h"
void main()
{
        unsigned char y ;
        ////9600bps@5.5296MHz
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x01;                //串口1选择定时器2为波特率发生器
        AUXR &= 0xFB;                //定时器2时钟为Fosc/12,即12T
        T2L = 0xF4;                //设定定时初值
        T2H = 0xFF;                //设定定时初值
        AUXR |= 0x10;                //启动定时器2
//        ES=1;                           //开串口1中断
//    EA=1;                      //开总中断
           while(1)
           {
                 y = 0xbb;
                delayms(10);
            SBUF=y;         
                while(!TI);TI=0;        
                delayms(100);
           }
}

去掉y=0xbb后面的延时函数,就正常了。
这个是为啥?
(150250191)

打赏出0元收入0元

 楼主| 发表于 2015-10-3 07:52:00 | 显示全部楼层
2:
#include "STC15F2K60S2.H"         
void main()
{
        unsigned long x;
        unsigned char y;
        ////9600bps@5.5296MHz
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x01;                //串口1选择定时器2为波特率发生器
        AUXR &= 0xFB;                //定时器2时钟为Fosc/12,即12T
        T2L = 0xF4;                //设定定时初值
        T2H = 0xFF;                //设定定时初值
        AUXR |= 0x10;                //启动定时器2
//        ES=1;                           //开串口1中断
//    EA=1;                      //开总中断
           while(1)
           {
        x = 12345678;
        y = x%100000000/10000000 + 0x30; SBUF = y;         while(!TI);TI=0;
        y = x%10000000/1000000 + 0x30; SBUF = y;         while(!TI);TI=0;
        y = x%1000000/100000 + 0x30; SBUF = y;         while(!TI);TI=0;
        y = x%100000/10000 + 0x30;        SBUF = y; while(!TI);TI=0;
        y = x%10000/1000 + 0x30; SBUF = y;         while(!TI);TI=0;
        y = x%1000/100 + 0x30; SBUF = y;         while(!TI);TI=0;
        y = x%100/10 + 0x30; SBUF = y;         while(!TI);TI=0;
        y = x%10 + 0x30; SBUF = y;         while(!TI);TI=0;
           }
}

串口输出的不是12345678,是乱码,
这个怎么修改?
(150250069)

打赏出0元收入0元

 楼主| 发表于 2015-10-3 07:54:02 | 显示全部楼层
jqfsjt 发表于 2015-10-3 07:52
2:
#include "STC15F2K60S2.H"         
void main()

是STC15W204S的原因还是KEIL4编译器的原因?请知道的说一下。
(150221902)

打赏出0元收入0元

 楼主| 发表于 2015-10-3 15:43:29 | 显示全部楼层
最新进展,是STC15W204S的原因,我新焊了个板子,用STC15W408AS,程序正常。怀疑是第一个片子损坏,又焊接了采用STC15W204S的板子,又出现了故障的现象。
(150221727)

打赏出0元收入0元

 楼主| 发表于 2015-10-3 15:46:24 | 显示全部楼层
测试程序
#include "STC15F2K60S2.H"         
#include "delay.h"
#include "init.h"

void main()
{
        unsigned long x;
        unsigned char y,h;
        Init_Mcu();       
       
           while(1)
           {
                x = 12345678;
                y = x%100000000/10000000 + 0x30;SBUF = y; while(!TI);TI=0;
                y = x%10000000/1000000 + 0x30;SBUF = y; while(!TI);TI=0;
                 y = x%1000000/100000 + 0x30;SBUF = y; while(!TI);TI=0;
                y = x%100000/10000 + 0x30;SBUF = y; while(!TI);TI=0;
                y = x%10000/1000 + 0x30; SBUF = y; while(!TI);TI=0;
                y = x%1000/100 + 0x30; SBUF = y; while(!TI);TI=0;
                y = x%100/10 + 0x30; SBUF = y; while(!TI);TI=0;
                y = x%10 + 0x30;         SBUF = y; while(!TI);TI=0;
    }
}


//单片机在线状态初始化
void Init_Mcu()
{                                                         
        //串口1采用定时器2
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x01;                //串口1选择定时器2为波特率发生器
        AUXR &= 0xFB;                //定时器2时钟为Fosc/12,即12T
        T2L = 0xF4;                //设定定时初值
        T2H = 0xFF;                //设定定时初值
        AUXR |= 0x10;                //启动定时器2


//        ES=1;                           //开串口1中断
//    EA=1;                      //开总中断
}                       
(150156646)

打赏出0元收入0元

发表于 2015-10-4 09:51:05 | 显示全部楼层
串口接收乱码是不是设置成文本模式了?改成hex模式试试
串口刚上电发的都不准,我的解决办法是先随便发两个数据,然后丢掉,从第三个数据开始正常接收。
(150123933)

打赏出0元收入0元

发表于 2015-10-4 18:56:18 | 显示全部楼层
这种问题,为什么不去STC官网下载用库函数写的例程?里面的“06-串口1中断收发”就是串口的。
(150044837)

打赏出0元收入0元

发表于 2015-10-5 16:54:34 来自手机 | 显示全部楼层
类似型号的,遇到过这样的问题,是因为没有成功切换为外部晶振
(149987932)

打赏出0元收入0元

 楼主| 发表于 2015-10-6 08:42:59 | 显示全部楼层
小李非刀 发表于 2015-10-4 18:56
这种问题,为什么不去STC官网下载用库函数写的例程?里面的“06-串口1中断收发”就是串口的。 ...


不是能否输出数据的问题,而是计算的结果不正确。
(149985749)

打赏出0元收入0元

发表于 2015-10-6 09:19:22 | 显示全部楼层
没接地
回帖提示: 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号-1 )

GMT+8, 2020-7-7 08:01

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

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