stc12c5a60s2 的串口2的问题,1正常,2罢工,有代码,有寄存器的值
mcu = stc12c5a60s2fosc=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;
} 请帮帮忙分析,谢谢各位! 发现可以发送数据
但是接受不了数据
用查询S2BUF的方法发现只能接收到1帧数据
以后就没有了
而且程序不进中断
真是诡异 顶一下,我现在好象有同样的问题,楼主是如何解决的 along 发表于 2012-5-18 01:05 static/image/common/back.gif
顶一下,我现在好象有同样的问题,楼主是如何解决的
是不是接收到数据了没有及时读出来的原因 我当时用的是STC提供的头文件,后来实在没办法了,我查看了头文件,在头文件定义中,我记得是串口2的中断允话标志下义错了,修改一下就OK了 不错啊!感谢! 相同的问题,你们怎么解决的呀? 正准备搞这东东
页:
[1]