strongxg 发表于 2024-11-29 12:45:43

AI8C 串口1奇怪问题

本帖最后由 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;
}


国学芯用 发表于 2024-11-29 13:19:25

页: [1]
查看完整版本: AI8C 串口1奇怪问题