snakevip 发表于 2011-1-26 17:25:00

STC的URAT在6T模式下工作的问题

STC的URAT在6T模式下工作的问题

测试程序使用小强开发板光盘中的《串口收发 测试程序[深圳伟嵌科技].C》修改,主要是定时器,使用了定时器2作为波特率发生器。
晶振:11.0592M
通过计算可得知
当 TL2=RCAP2L=250; 时
12T模式下波特率57600,6T模式下波特率115200。
当 TL2=RCAP2L=253; 时
12T模式下波特率115200。

使用STC-ISP中的串口调试助手分别测试三种模式
A:6T,TL2=250,波特率115200
B:12T,TL2=250,波特率57600
C:12T,TL2=253,波特率115200

void init()//串口初始化
{
    SCON=0x50;      //SCON:串行口工作方式1, 8-bit UART,允许串行接收位(REN=1)
TL2=RCAP2L=250;//或253
TH2=RCAP2H=255;
T2CON=0x34;//

        EA=1;                        //开总中断
        ES=1;                  //开串口中断

}

测试结果:
A:会丢失第n*3个字符(n为自然数)
B、C正常,自动发送一千多个字符,一个不落收到
从整个程序分析,流程是串口初始化并延时1ms,进入死循环等待中断。
接收中断发送后,清中断标志,把串口SBUF复制给P0口和中间变量a,把a放入receive数组,再把receive数组的内容逐个送到SBUF让串口发送,很简单很直接,应该没有问题。
又测试了6T,TL2=244,波特率57600的模式,丢第n*5个字符。
所以,应该是STC的串口在6T模式下不能可靠工作,或者不能与其它器件很好地配合。

alexliu0915 发表于 2011-2-16 13:48:39

回复【楼主位】snakevip
-----------------------------------------------------------------------

最好不要用6T模式,工作不稳定的.

madara 发表于 2011-2-16 16:17:31

我用手头的STC12C5608AD做个了个测试,使用的是11.0592M的晶振、6T串口,发送了90多K的数据,没有发现问题。
按理来说,串口电路6T跟12T就多用了一个二分频电路,不应该出现你所说的问题。12T的稳定的话,没理由6T的就不稳定。
你的有问题,可能是程序有问题没设置好MCU或者碰到了次片?
程序如下:
    AUXR    EQU 8EH
    ORG   0000H
    SJMP    START
    ORG   0023H
    SJMP    INT_UART
    ORG   0040H
START:
    ACALL   INIT_APP
    MOV   SBUF,A
LOOP:
    SJMP    $

INIT_APP:
    CLR   EA
    MOV   SCON,#50H
    MOV   TMOD,#21H
    MOV   TH1,#253
    MOV   TL1,#253
    MOV   TCON,#40H
    MOV   PCON,#00H//DOUBLE SERIAL BAUTE
    MOV   AUXR,#01100000B   ;T1x12=1,UART_M0x6=1
    SETB    TR1
    SETB    ES
    SETB    EA
    CLR   A
    RET

INT_UART:
    CLR   RI
    CLR   TI
    INC   A
    MOV   SBUF,ACC
    RETI
END.

http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_616440YQCGVA.png
11059200bps (原文件名:Image1.png)
页: [1]
查看完整版本: STC的URAT在6T模式下工作的问题