STC15W408AS SOP-16的串口2没法用
用了贵公司的STC15W408AS-35I-SOP16,测试了串口1数据收发和IO口(接了个小灯)都没问题,定时器1和2也都没问题(小灯翻转),可是到串口2程序就会卡在sendstring里面,while(busy)的busy位一直得不到清零,给SBUF写数据后进不去串口2终端服务函数,我用的是ISP里的例程P_SW2 &= ~S2_S0; //S2_S0=0 (P1.0/RxD2, P1.1/TxD2)
//P_SW2 |= S2_S0; //S2_S0=1 (P4.6/RxD2_2, P4.7/TxD2_2)
#if (PARITYBIT == NONE_PARITY)
S2CON = 0x50; //8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
S2CON = 0xda; //9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
S2CON = 0xd2; //9位可变波特率,校验位初始为0
#endif
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14; //T2为1T模式, 并启动定时器2
IE2 = 0x01; //使能串口2中断
EA = 1;
while (1)
{
SendString("STC15F2K60S2\r\nUart Test !\r\n");
delayms(1000);P11=!P11;
if(sendback){
sendback=0;
SendString("sendback3333333333");
}
}
/*----------------------------
UART2 中断服务程序
-----------------------------*/
void Uart2() interrupt 8 using 1
{
if (S2CON & S2RI)
{
S2CON &= ~S2RI; //清除S2RI位
//P0 = S2BUF; //P0显示串口数据
//P2 = (S2CON & S2RB8); //P2.2显示校验位
sendback=1;
}
if (S2CON & S2TI)
{
S2CON &= ~S2TI; //清除S2TI位
busy = 0; //清忙标志
}
}
请问各位大哥有没有遇到类似情况?
还有一个问题就是引脚图里的txd2,rxd2都是在P37和P36引脚上的,可是手册里的切换却说的是在P10和P11,以及P46和P47之间切换?很迷惑,感谢各位大哥帮助解答 我又回去看了一下手册里的总体描述,原来是只有一组串口然后分三路用啊,本来想加快速度照着isp的例程走,结果把自己坑了 注意,STC15W408AS只有一个串口,可以切换到3组IO而已(P3.0/P3.1、P3.6/P3.7、P1.6/P1.7)。
STC15W408AS只有两个定时器Timer0和Timer2,没有Timer1.
页:
[1]