求教LPC934串口收发问题,问题有点奇怪!

2020-02-04 09:23发布

用LPC934做了个收转发的程序,上位机下发数据给934,934在接收中断里收数据,保存到缓冲区,在主程序里将收到的数据再转发给上位机,现在碰到的问题是,明明上位机下发了180个字节,但实际收到的转发数据却只有143个。934的程序已经精简到最小,只开了一接收中断,发送是放在主程序里,用的查询方式,缓冲区用来平衡收发速度,缓冲区调整大小也没有效果。

整了两天了,实在是找不到原因。求解,求指点!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
abuffalo
2020-02-04 12:34
本帖最后由 abuffalo 于 2012-3-29 19:43 编辑



void UartInit(void)
{
    P1M1 &= 0xFE;               // For TxD = P1.0   Push-Pull   (M1=0, M2=1)
    P1M2 |= 0x01;
       
        SCON = 0x50;                                // select BRG as UART Baud Rate Gen
        SSTAT = 0x60;                                // separate Rx / Tx interrupts
        BRGR0 = 0xB0;                                // setup BRG for 38400 baud @ 7.373MHz internal RC oscillator
        BRGR1 = 0x00;
        BRGCON = 0x03;                         // enable BRG
        ESR = 1;                                    // enable UART interrupt
    //EST = 1;
}



uint8 RcvBuffer[30];
uint8 WritePtr = 0;
uint8 ReadPtr = 0;

void UART_RX_ISR(void) interrupt 4  // 接收中断
{  

    RI = 0;                    // 清接收标志位为0

    RcvBuffer[WritePtr++] = SBUF;
    if (WritePtr == 30) WritePtr = 0;
}


extern uint8 RcvBuffer[];
extern uint8 WritePtr;
extern uint8 ReadPtr;

void main(void)
{
    // IO初始化
   IOInit();

    // Uart初始化
   UartInit();

    // 开中断
   EA = 1;

    while(1)
    {         
        if (ReadPtr != WritePtr)
        {
            TI = 0;
            SBUF = RcvBuffer[ReadPtr++];
            while (!TI);
            if (ReadPtr == 30) ReadPtr = 0;
        }
     }
}

一周热门 更多>