标题: 单片机串口2发送字符不能赋值 keil c debug跟踪S2BUF的值,始终为0xFC [打印本页]

作者: cqtvyufenglin    时间: 2022-10-28 15:24
标题: 单片机串口2发送字符不能赋值 keil c debug跟踪S2BUF的值,始终为0xFC
我写了一个单片机程序,从STC12C5A60S2单片机串口2循环发送字符8,编译都正确,但发送怎么都不成功。
在keil c debug跟踪S2BUF的值,始终为0xFC。

#include<STC12C5A60S2.h>

void main()
{
        AUXR &= 0xF7;                //波特率不倍速
        S2CON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x04;                //定时器时钟1T模式
        BRT = 0xF7;                //设置定时重载值
        AUXR |= 0x10;                //启动独立波特率发射器

        while(1)
{
  S2BUF=0x38;
}
}


作者: Hephaestus    时间: 2022-10-28 16:48
SBUF是同名两个完全不同的寄存器,读是一个,写是另一个。你写进去能读出来才真的见鬼了,S2BUF同样道理。
作者: pcbboy    时间: 2022-10-28 17:25
不知你发送中断怎么写的,加个延时1mS 试一试 ,
作者: cqtvyufenglin    时间: 2022-10-28 20:38
pcbboy 发表于 2022-10-28 17:25
不知你发送中断怎么写的,加个延时1mS 试一试 ,

但是,如果从单片机STC12C5A60S2串口1循环发送字符8,发送就成功
在keil c debug跟踪SBUF的值,赋值是成功的。不知从串口2为什么就不行
求高手支招
#include<STC12C5A60S2.h>
void main()
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器时钟1T模式
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //设置定时器模式
        TMOD |= 0x20;                //设置定时器模式
        TL1 = 0xF7;                //设置定时初始值
        TH1 = 0xF7;                //设置定时重载值
        ET1 = 0;                //禁止定时器%d中断
        TR1 = 1;                //定时器1开始计时

        while(1)
{
  SBUF=0x38;
}
}
作者: coody_sz    时间: 2022-10-28 21:34
不断地给SBUF或S2BUF赋值,产口怎么发?再怎么的也得查询一下TI吧?
为什么不用STC官方例子试试?STC的例子都有完整工程、源码、编译好的HEX文件。
作者: yzwzfyz    时间: 2022-10-29 08:34
假设你写38,读到也是38。那么外来串入的数据是多少呢?再哪里取呢?一定也是38吗?
想想沙发说的是否正确。
遇到问题,记住:首先是读通手册。
作者: cqtvyufenglin    时间: 2022-11-26 13:02
感谢提醒,用STC官方例子,收发都成功了。但是,在keil C debug 的watch 窗口中,观察S2BUF,每次给S2BUF赋值后,观察到的还是0xFC,这个真没搞懂。
作者: cqtvyufenglin    时间: 2022-11-26 13:02
感谢提醒,用STC官方例子,收发都成功了。但是,在keil C debug 的watch 窗口中,观察S2BUF,每次给S2BUF赋值后,观察到的还是0xFC,这个真没搞懂。
作者: lkc8210    时间: 2022-11-27 00:04
Keil 的89C52仿真是没有串口2的







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1