|
本帖最后由 DebugLab 于 2024-11-29 12:50 编辑
AI8C 串口1,P3.0,P3.1端口,定时器1,波特率115200,8位数据,中断模式。
发送正常,可进入中断,串口软件接收数据也正确。
接收却不能正常接收,表现为不能正常进中断。多次发有时能进,但数据不对。
类似的操作,串口2一切正常。不知问题出在哪?
相关代码如下:
P_SW1 &= ~0xc0; //RxD(P3.0), TxD(P3.1)
P_SW2 &= ~0x01; //RxD2(P1.0), TxD2(P1.1)
P_SW1 |= 0x0c; //SS(P3.5), MOSI(P3.4), MISO(P3.3), SCLK(P3.2)
P_SW2 &= ~0x30; //I2CSCL(P1.5), I2CSDA(P1.4)
bitset(P_SW2,7);
P3PU = 0x7f; //上拉电阻使能
bitclr(P_SW2,7);
P3M0 = 0x80; P3M1 = 0x00; //准双向口,DCK推挽输出
P3 = 0x7f;
void
uart1_Init(unsigned long baud,char parity)
{
unsigned int idata T1CNT;
T1CNT = 65536 - (BAUDCLK/baud);
switch(parity)
{
case 'O': /* odd */
SCON = 0xC0;
break;
case 'E': /* even */
SCON = 0xC0;
break;
case 'M': /* mark = 1 */
SCON = 0xC0;
TB8 = 1;
break;
case 'S': /* space = 0 */
SCON = 0xC0;
TB8 = 0;
break;
/* None */
default:
SCON = 0x40;
break;
}
TR1 = 0;
AUXR &= ~0x01; //S1 BRT Use Timer1;
AUXR |= (1<<6); //Timer1 set as 1T mode
TMOD &= ~(1<<6); //Timer1 set As Timer
TMOD &= ~0x30; //Timer1_16bitAutoReload;
TL1 = 0xe8;
TH1 = 0xff;
//TL1 = (unsigned char)T1CNT; //设置定时初始值
//TH1 = (unsigned char)(T1CNT>>8); //设置定时初始值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
uart1_rxd_lps = 0;
uart1_rxd_len = 0;
uart1_txd_lps = 0;
uart1_txd_len = 0;
REN = 1;
ES = 1;
}
|
|