搜索
bottom↓
回复: 21

N76E003 串口中断接受程序问题

[复制链接]

出0入0汤圆

发表于 2017-6-28 20:10:05 | 显示全部楼层 |阅读模式
本帖最后由 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   

}

阿莫论坛20周年了!感谢大家的支持与爱护!!

该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981

出0入0汤圆

 楼主| 发表于 2017-6-30 09:34:31 | 显示全部楼层
都不用这个N76E003芯片呀

出0入0汤圆

发表于 2017-6-30 11:25:43 | 显示全部楼层
zsp06312222 发表于 2017-6-30 09:34
都不用这个N76E003芯片呀

同行,也是作灯饰上的DMX512,现在用的就是新唐003,二个月不到用了15K,很好用的,没有问题,商业行业人家是不会多指点的。

出0入0汤圆

发表于 2017-6-30 11:28:09 | 显示全部楼层
多看N76E003 PDF,他与标准51一些寄存器还是有一些不一样的。

出0入0汤圆

 楼主| 发表于 2017-7-3 15:08:58 | 显示全部楼层
freshuman 发表于 2017-6-30 11:28
多看N76E003 PDF,他与标准51一些寄存器还是有一些不一样的。

都想放弃这个单片机了,看到你的回答又去看了下PDF,遇到2个问题:
1:用内部的高速时钟16MHZ,配置的250000波特率达不到,控制没放应,不知大侠怎么配置的;那个SM2位要置1处理还是0;
2:配置后,控制的灯一直亮,仿真接受到错误的数据。

出0入0汤圆

 楼主| 发表于 2017-7-3 15:35:47 | 显示全部楼层
freshuman 发表于 2017-6-30 11:28
多看N76E003 PDF,他与标准51一些寄存器还是有一些不一样的。

不知道我的配置有问题没:串口0模式3    定时器1模式2
void InitialUART0_Timer1(UINT32 u32Baudrate)    //SMOD = 1  
{
          P05_PushPull_Mode; //P05   ÍÆÍìÊä³ö  TR
                P06_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
                P07_Quasi_Mode;                //Setting UART pin as Quasi mode for transmit
       
    clr_UART0PX;   //clr_UART0PX AUXR1   &= ~SET_BIT2
          P06=1;P07=1;   //
          TIMER1_MODE2_ENABLE;     //

                clr_SMOD0;        //
    SCON = 0xF0;             //UART0 Mode1,REN=1,TI=1  //SCON = 0xD0; //0x50
    TMOD|= 0x20;            //Timer1 Mode2   //
   
//    set_SMOD;                //UART0 Double Rate Enable  //
          clr_SMOD;

    set_T1M;          //
    clr_BRCK;                //Serial port 0 baud rate clock source = Timer1  //´®¿Ú0²¨ÌØÂÊʱÖÓԴΪ¶¨Ê±Æ÷1
   
    TH1 = 256 - (1000000/u32Baudrate+1);               /*16 MHz */  

          clr_ET1;          //¹Ø±ÕTimer1ÖжÏ
          set_TR1;          //ʹÄܶ¨Ê±Æ÷1  TCON
       
          set_RB8;                                        //This bit is for setting the stop bit 2 high/low status, //ÉèÖýÓÊܵĵھÅλÊý¾Ý =1; //SCON               
    set_ES;           //enable UART interrupt     //
    set_EA;           //enable global interrupt   //

}

出0入0汤圆

发表于 2017-7-4 01:04:10 | 显示全部楼层
zsp06312222 发表于 2017-7-3 15:08
都想放弃这个单片机了,看到你的回答又去看了下PDF,遇到2个问题:
1:用内部的高速时钟16MHZ,配置的2500 ...


内部16M时钟,串口250K错错有余。

出0入0汤圆

发表于 2017-7-4 01:07:18 | 显示全部楼层
zsp06312222 发表于 2017-7-3 15:35
不知道我的配置有问题没:串口0模式3    定时器1模式2
void InitialUART0_Timer1(UINT32 u32Baudrate)   ...

你有没有用别的51,如STC单片机作过同样的DMX512接收,如果成功了,配置都是一样的。

出0入0汤圆

 楼主| 发表于 2017-7-4 09:34:44 | 显示全部楼层
本帖最后由 zsp06312222 于 2017-7-4 10:39 编辑
freshuman 发表于 2017-7-4 01:04
内部16M时钟,串口250K错错有余。


我用示波器测试时波特率达到250000时发送,实测数据是4.96us;没用过51单片机的,用过STM32。

出0入0汤圆

 楼主| 发表于 2017-7-4 19:46:48 | 显示全部楼层
freshuman 发表于 2017-7-4 01:07
你有没有用别的51,如STC单片机作过同样的DMX512接收,如果成功了,配置都是一样的。 ...

单片机的串口能接收到波形,就是控制灯不亮,不知道是不是我的接受函数出错了。通过判断RB8位的。如上程序

出0入0汤圆

发表于 2017-7-4 19:57:57 | 显示全部楼层
zsp06312222 发表于 2017-7-4 19:46
单片机的串口能接收到波形,就是控制灯不亮,不知道是不是我的接受函数出错了。通过判断RB8位的。如上程 ...

sTM32上都能通过DMX512,51按理更简单才是哦!说句实话,你上面的DMX512接收程写得太低级了哦。

出0入0汤圆

发表于 2017-7-4 19:59:13 | 显示全部楼层
zsp06312222 发表于 2017-7-4 19:46
单片机的串口能接收到波形,就是控制灯不亮,不知道是不是我的接受函数出错了。通过判断RB8位的。如上程 ...

串口波特率设置有问题。

出0入0汤圆

发表于 2017-7-4 20:04:24 | 显示全部楼层
zsp06312222 发表于 2017-7-4 09:34
我用示波器测试时波特率达到250000时发送,实测数据是4.96us;没用过51单片机的,用过STM32。 ...

N76E003接收DMX512串口250K 绝对没有问题的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-7-4 20:08:04 | 显示全部楼层
zsp06312222 发表于 2017-6-30 09:34
都不用这个N76E003芯片呀

你野是抚丢的?

出0入0汤圆

 楼主| 发表于 2017-7-5 08:27:21 | 显示全部楼层

是呀,抚丢的

出0入0汤圆

 楼主| 发表于 2017-7-5 09:43:01 | 显示全部楼层
本帖最后由 zsp06312222 于 2017-7-5 17:46 编辑


公司的大神指导下我了,搞定了,能通讯了

出0入0汤圆

发表于 2017-7-5 13:43:50 | 显示全部楼层
串口正常收发没?仿真信不过的。

出0入0汤圆

 楼主| 发表于 2017-7-5 17:53:25 | 显示全部楼层
90999 发表于 2017-7-5 13:43
串口正常收发没?仿真信不过的。

仿真还是能发现自己的错误的

出0入0汤圆

 楼主| 发表于 2017-7-6 11:55:30 | 显示全部楼层

今天尝试了测试串口中断和定时器中断,却只能识别其中一个中断,关闭其中一个中断另一个就能正常工作,配置了中断优先级的,不知道什么原因。

出0入0汤圆

发表于 2017-9-4 16:15:15 | 显示全部楼层
楼主,怎么解决的?能贴部分代码看看吗?

出0入13汤圆

发表于 2018-1-22 16:20:04 | 显示全部楼层
freshuman 发表于 2017-7-4 20:04
N76E003接收DMX512串口250K 绝对没有问题的。

内部16M晶振误差如何?DMX512 250K的波特率,会不会因为时钟精度不够导致丢数据?

出0入0汤圆

发表于 2018-1-26 10:36:48 | 显示全部楼层
zhbc 发表于 2018-1-22 16:20
内部16M晶振误差如何?DMX512 250K的波特率,会不会因为时钟精度不够导致丢数据? ...

误差较同期同行其它品牌的还是有一点大,串口接收允许有3%误差,所以没有什么问题。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-1 08:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表