amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 1106|回复: 9

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

[复制链接]
发表于 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后面的延时函数,就正常了。
这个是为啥?
 楼主| 发表于 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,是乱码,
这个怎么修改?
 楼主| 发表于 2015-10-3 07:54:02 | 显示全部楼层
jqfsjt 发表于 2015-10-3 07:52
2:
#include "STC15F2K60S2.H"         
void main()

是STC15W204S的原因还是KEIL4编译器的原因?请知道的说一下。
 楼主| 发表于 2015-10-3 15:43:29 | 显示全部楼层
最新进展,是STC15W204S的原因,我新焊了个板子,用STC15W408AS,程序正常。怀疑是第一个片子损坏,又焊接了采用STC15W204S的板子,又出现了故障的现象。
 楼主| 发表于 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;                      //开总中断
}                       
发表于 2015-10-4 09:51:05 | 显示全部楼层
串口接收乱码是不是设置成文本模式了?改成hex模式试试
串口刚上电发的都不准,我的解决办法是先随便发两个数据,然后丢掉,从第三个数据开始正常接收。
发表于 2015-10-4 18:56:18 | 显示全部楼层
这种问题,为什么不去STC官网下载用库函数写的例程?里面的“06-串口1中断收发”就是串口的。
发表于 2015-10-5 16:54:34 来自手机 | 显示全部楼层
类似型号的,遇到过这样的问题,是因为没有成功切换为外部晶振
 楼主| 发表于 2015-10-6 08:42:59 | 显示全部楼层
小李非刀 发表于 2015-10-4 18:56
这种问题,为什么不去STC官网下载用库函数写的例程?里面的“06-串口1中断收发”就是串口的。 ...


不是能否输出数据的问题,而是计算的结果不正确。
发表于 2015-10-6 09:19:22 | 显示全部楼层
没接地
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-6-17 09:56

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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