N76E003 串口中断接受程序问题

2020-01-14 18:56发布

本帖最后由 zsp06312222 于 2017-6-28 20:14 编辑

新塘最新的单片机N76E003,配置好时钟串口定时器,就是接受不了DMX512通讯协议的数据。仿真能进中断。
程序如下:(欢迎大侠指点赐教)
void SerialPort0_ISR(void) interrupt 4   //4
{
   UINT8 rece_data;
    if(RI)      
    {                                       /* if reception occur */
         clr_RI;                             /* clear reception flag for next reception */                        
                          if(RB8==0)  //RB8
                                {
                                        rec_ok = 1;
                                        dmx_channel = 0;
                                        Adr = Address - 1;  //Address    = dmx;
                                        Point = 100;   //3ms*250
                                }
                                else
                                {
                                        if(rec_ok)  //bit rec_ok;
                                        {
                                                if(Adr == 0) //uint Adr,Address;
                                                {
                                                        recbuf[dmx_channel] = SBUF;  //½ÓÊÜ
                                                        dmx_channel ++;
                                                        if(dmx_channel > RECCHANNEL) //RECCHANNEL = 2;
                                                        {
                                                                rec_ok = 0;
                                                                dmx_recok = 1;  //
                                                        }
                                                }
                                                else  Adr--;
                                        }
                                }

        
    }       
}


void InitialUART0_Timer1(UINT32 u32Baudrate)    //T1M = 1, SMOD = 1  
{
          P05_PushPull_Mode; //P05  
                P06_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
                P07_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
          
          TIMER1_MODE2_ENABLE;     //
/*0x70*/       
    SCON = 0x70;             //UART0 Mode1,REN=1,TI=1  
    TMOD |= 0x20;            //Timer1 Mode2   
   
    set_SMOD;                //UART0 Double Rate Enable  
    set_T1M;          //
    clr_BRCK;                //Serial port 0 baud rate clock source = Timer1
   
    TH1 = 256 - (1000000/u32Baudrate+1);               /*16 MHz */
   
          clr_ET1;         
          set_TR1;                 
          set_RB8;                                        //This bit is for setting the stop bit 2 high/low status
               
    set_ES;           //enable UART interrupt     
    set_EA;           //enable global interrupt   

}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
21条回答
one_for_good
1楼-- · 2020-01-17 03:08
楼主,怎么解决的?能贴部分代码看看吗?
zhbc
2楼-- · 2020-01-17 06:09
freshuman 发表于 2017-7-4 20:04
N76E003接收DMX512串口250K 绝对没有问题的。

内部16M晶振误差如何?DMX512 250K的波特率,会不会因为时钟精度不够导致丢数据?
freshuman
3楼-- · 2020-01-17 12:00
 精彩回答 2  元偷偷看……

一周热门 更多>