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模式下不能可靠工作,或者不能与其它器件很好地配合。 回复【楼主位】snakevip
-----------------------------------------------------------------------
最好不要用6T模式,工作不稳定的. 我用手头的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]