This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

定时器与串口冲突吗?



我今天写了一个程序,就是模拟串口发送数据,同时我也开启了单片机自身的串口接收,开始我用了IAR自带的延迟函数来延迟发送的周期 ,但是在单片机串口连续接收数据的时候,这个自身带的延时函数不准确,为 明白是什么原因,所以我有改成TimeB作为延时函数,程序代码如我黄色标记的那样,这时候模拟串口发送数据的周期延迟很准确,但是这个时候如果你连续给串口发送数据的话,出现了串口数据丢失的现象,我不明白是什么问题,我还在TimeB定时中断中开启了全局中断嵌套中断_EINT()但是还是存在串口数据丢失的现象,代码如下: 求解答

#define CPU_F                               ((double)1000000)

#define delay_us(x)                       __delay_cycles((long)(CPU_F*(double)x/1000000.0))

 #define delay_ms(x)                 __delay_cycles((long)(CPU_F*(double)x/1000.0))

void Monobus_Tx(unsigned char SendValue)

 {     unsigned char i;    

      unsigned char Sendbit[9];

      P2IE  &= ~DRX;                                 //关闭单总线接受

       P2DIR |=  DTX;                                 //发送标志位  

      P2OUT |=  DTX;                                 //高电平标志位  

       delay_ms(MONOBUS_TRX_TIME);

      for(i = 0; i < 8; i++)

       {   Sendbit[i] = SendValue & 0x80;

            if(Sendbit[i] == 0x80)  

            {    P2OUT |=  DTX;    }    

        else if(Sendbit[i] == 0x00)  

          {    P2OUT &= ~DTX;   }   

          SendValue <<= 1;   

// Monobus_Tx_Timer_Flag=1;

// Turn_On_TA1();

 // while(Monobus_Tx_Timer_Flag);                 //定时器延时

          delay_ms(MONOBUS_TRX_TIME);    }    

          Sendbit[8]=((Sendbit[0]^Sendbit[1]^Sendbit[2]^Sendbit[3]^       Sendbit[4]^Sendbit[5]^Sendbit[6]^Sendbit[7]));    //校验位

           if(Sendbit[8] == 0x80)

          {   P2OUT |=  DTX;       }

            else  {   P2OUT &= ~DTX;  }  

          delay_ms(MONOBUS_TRX_TIME);

            P2OUT &= ~DTX;                                        //再次拉低DTX口,给双控供电

             P2IE  |=  DRX;                                        //打开中断单总线接受

}