timberg 发表于 2012-1-29 22:36:32

stc12c5a60s2 的串口2的问题,1正常,2罢工,有代码,有寄存器的值

mcu = stc12c5a60s2
fosc=22.1184MHz
两个波特率都设置为9600
通过串口1得到的寄存器值如下
PCON        =        00        =        0000        0000
SCON        =        50        =        0101        0000
S2CON        =        50        =        0101        0000
AUXR        =        14        =        0001        0100
TMOD        =        21        =        0010        0001
IE        =        94        =        1001        0100
IE2        =        01        =        0000        0001
BRT        =        B8
分别是十六进制和二进制
对着数据手册看了半天,一个一个寄存器检查,没有错误.
void init_uart2(void){
        //缺省:UART2 在 P1,不修改
        //P1.2=RxD2, P1.3=TxD2
        //1起始位,8数据为,1停止位
        //不允许多机通信
        //允许接收数据
        //使用独立的波特率发生器
        S2CON = 0x50; //0B01010000,方式1,8位,没有奇偶校验
        BRT = -(FOSC/32/BAUD);
        AUXR = 0x14;
        //不可位寻址
        //0x14 = 0b 0001 0100
        //T0x12 = 0
        //T1x12 = 0 定时器0,1为传统51速度,也就是12分频
        //UART_M0x6 = 0 串口1的速度为传统的51速度
        //BRTR = 1 允许独立的波特率发生器运行
        //S2SMOD = 0 串口2的波特率不加倍
        //BRTx12 = 1 独立的波特率发生器每1个时钟周期计数一次
        //EXTRAM= 0 允许使用扩展的1024字节片外RAM
        //S1BRS= 0 串口1使用T1,而不是BRT做为波特率发生器
        //波特率=BRT的溢出率/32
        //(因为BRTx12=1所以)BRT溢出率=FOSC/(256-BRT加载值)
        IE2 |= 0x01; // ES2设置为1,允许串口2中断
        uart2_busy = 0;
       
}

void uart2() interrupt 8{
        if(S2CON & S2RI){
                //P0 = S2BUF; // 显示数据
                led = ~led;
                S2CON &= ~S2RI;
        }
        if(S2CON & S2TI){
                uart2_busy = 0;
                S2CON &= ~S2TI;
        }
}


void uart2_send_data(unsigned char c){
        while(uart2_busy);
        uart2_busy = 1;
        S2BUF = c;
}

timberg 发表于 2012-1-29 22:36:58

请帮帮忙分析,谢谢各位!

timberg 发表于 2012-1-29 23:34:50

发现可以发送数据
但是接受不了数据
用查询S2BUF的方法发现只能接收到1帧数据
以后就没有了
而且程序不进中断
真是诡异

along 发表于 2012-5-18 01:05:38

顶一下,我现在好象有同样的问题,楼主是如何解决的

xiakang 发表于 2012-5-18 10:25:52

along 发表于 2012-5-18 01:05 static/image/common/back.gif
顶一下,我现在好象有同样的问题,楼主是如何解决的

是不是接收到数据了没有及时读出来的原因

along 发表于 2012-9-20 01:03:54

我当时用的是STC提供的头文件,后来实在没办法了,我查看了头文件,在头文件定义中,我记得是串口2的中断允话标志下义错了,修改一下就OK了

charls 发表于 2012-9-20 16:31:06

不错啊!感谢!

614229816 发表于 2013-5-27 00:38:28

相同的问题,你们怎么解决的呀?

jsntzxh 发表于 2013-7-17 23:05:41

正准备搞这东东
页: [1]
查看完整版本: stc12c5a60s2 的串口2的问题,1正常,2罢工,有代码,有寄存器的值