跪求指点

2019-07-16 00:45发布

我将3485芯片与149单片机的相连,用modbus协议进行通讯,用异步通信串口0来接受数据,程序里头用定时器中断来定时收完8个字节,之后进行数据处理(CRC之类的)

max3485初始化程序为:
bool Init_Max3485(void)
{
  ME1 |= (UTXE0 + URXE0); // Enable USART0 TXD/RXD
UCTL0 = CHAR + SPB + SWRST; //  8位数据 两位停止位  无校验

  UTCTL0 |= SSEL0;// UCLK = ACLK
  URCTL0 |= 0x08; // sleep mode

  UBR00 = 0x41;   
  UBR10 = 0x03;   // 波特率设置为9600
//  UMCTL0 = 0x00;  // no modulation

  UCTL0 &= ~SWRST;   // Initialize USART state machine
IE1 |= URXIE0 + UTXIE0;  // 使能接受和发送中断

  IFG1&=~UTXIFG0;//使UTXIFG0复位

  return true;
}
然后处理的程序为:串口中断为:
#pragma vector = UART0RX_VECTOR               //串口0接收中断函数
__interrupt void Uart0Rx_Isr(void)
{
//    CCR1 =TARA+5000;        //CCR1中断允许
    TACTL|=TACLR;           //ACLK,清TAR  
    CCTL1 &=(~CCIFG);
    CCTL1|=CCIE;   
    receBuf[receCount]= RXBUF0;
    receCount++;          //接收地址偏移寄存器加1   

}   

定时器A1中断处理
#pragma vector = TIMERA1_VECTOR                         //定时器A1中断函数
__interrupt void Timer_A1_Isr(void)
{
      TACTL|=TACLR;
      CCR1 =TAR+1000;        //CCR1中断允许

         if(receCount==8)
         {
           receTimeOut++;
            if(receTimeOut>=1)
            {
            receTimeOut=1;
            MAX3485_TRNS_ENA();       //将485置为发射状态
            }
         }
            CCTL1 &=(~CCIE);
            CCTL1 &=(~CCIFG);      
//     UART_ENTER_SLEEPA();
}

其他的程序太多感觉跟我遇到的问题关系不大,现在的问题就是,我用串口调试器通讯的时候总通讯不成功,总提示超时,波特率之类的设置应该也没问题,我从串口调试器读数据的时候 发送的是01 03 00 01 00 01 D5 CA , 这是8个字节,按道理说,我的单片机串口应该会进入8次中断,但是就是只进去一次中断,并且进去的这一次中断收到的数跟发送的数也对不上,
都困扰死我了,还望高手给予指教,谢谢了!
电路连接图 电路连接图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。