打印
[51单片机]

关于51单片机移植freemodbus出现的情况

[复制链接]
2587|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
忧忧|  楼主 | 2014-12-3 09:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
  • 大家好,近期在51上移植freemodbus,先是从网上download个程序,发现是用STC12系列的单片机移植的,自己想用90c516RD+移植,折磨了一周,出来的结果是,只要发数据,就有应答,但是其他的参数设置无所谓,怎么变都是有数据的,特来向大家求助!
  • 先粘上串口与定时的配置部分
  • --------------------------------------------
  • void
  • vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )
  • {
  •     /* If xRXEnable enable serial receive interrupts. If xTxENable enable
  •      * transmitter empty interrupts.
  •      */
  •     if(xRxEnable && xTxEnable)
  •                         {
  •                         TxEnable = 1;
  •                         REN = 1;//½ÓÊÕʹÄÜ
  •                         ES = 1;//ÖжÏʹÄÜ
  •                         //EnCs=1;        //ʹÄÜ485·¢ËÍƬѡ
  •                         }
  •                 else if(!xRxEnable && xTxEnable)
  •                         {
  •                         TxEnable = 1;
  •                         REN = 0;//½ÓÊÕʹÄÜ
  •                         ES = 1;//ÖжÏʹÄÜ
  •                         //EnCs=1;
  •                   }
  •                 else if(xRxEnable && !xTxEnable)
  •                         {
  •                         TxEnable = 0;
  •                         REN = 1;//½ÓÊÕʹÄÜ
  •                         ES = 1;//ÖжÏʹÄÜ
  •                         //EnCs=1;//ʹÄÜ485½ÓÊÜƬѡ
  •                   }
  •          else
  •                         {
  •                         TxEnable = 0;
  •                         REN = 0;//½ÓÊÕʹÄÜ
  •                         ES = 0;//ÖжÏʹÄÜ
  •                         //EnCs=0;
  •                   }
  • }
  • BOOL
  • xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity )
  • {
  •         u16 bps;
  •         ucPORT = ucPORT;
  •         ucDataBits = ucDataBits;
  •         eParity = MB_PAR_NONE;
  •         bps = ulBaudRate;
  •        
  •         TMOD = 0x20;
  •         SCON = 0x50;
  •   //TH1  = 0xFE;
  •   //TL1  = TH1;
  •         PCON = 0x00;
  •         TMOD &= ~0x80;
  •         TMOD &= ~0x40;
  •         TMOD |= 0x20;
  •         TH1 = 0-(F_MCU/12/bps);       
  •         @kangzp @nb4555
  •         EA   = 1;//ÖжÏÔÊÐí
  •         ES   = 1;//´®ÐпÚÖжϠ  Ê¹ÄÜ
  •         TR1  = 1;//Æô¶¯T1¹¤×÷
  •         TxEnable = 1;
  •         return TRUE;
  • }
  • BOOL
  • xMBPortSerialPutByte( CHAR ucByte )
  • {
  •         /*·¢Ëͺ¯Êý*/
  •        
  •           SBUF = ucByte;
  •        
  •     return TRUE;
  • }
  • BOOL
  • xMBPortSerialGetByte( CHAR * pucByte )
  • {
  •         /*½ÓÊÕº¯Êý*/
  •        
  •           *pucByte = SBUF;
  •     return TRUE;
  • }
  • /*50us µÄ»ùʱʱÖÓ*/
  • BOOL
  • xMBPortTimersInit( USHORT usTim1Timerout50us )
  • {
  •        
  •         TMOD|= 0x01;
  •         TH0  = 0xFE;
  •         TL0  = 0x0C;  // timer sets at 50us
  •         IE   = 0X82;//T0ÖжÏÔÊÐí
  •         TR0  = 1;        //Æô¶¯T0
  •         TMOD &= ~0x08;       
  •         TMOD &= ~0x04;
  •   n = usTim1Timerout50us;
  •     return TRUE;
  • }
  • void
  • vMBPortTimersEnable(  )
  • {
  •     /* Enable the timer with the timeout passed to xMBPortTimersInit( ) */
  •         TH0 = U16_HI(0-(F_MCU/12/20000)*n);
  •         TL0 = U16_LO(0-(F_MCU/12/20000)*n);
  •         TF0 = 0;        //T0Òç³öÖжÏÇëÇó ÎÞ
  •         ET0 = 1;        //ÖжÏÔÊÐí
  •         TR0 = 1;  //Æô¶¯ T0¹¤×÷
  • }
  • void
  • vMBPortTimersDisable(  )
  • {
  • /* Disable any pending timers. */
  •         ET0 = 0;
  •         TR0 = 0;
  • }
  • /* Create an ISR which is called whenever the timer has expired. This function
  • * must then call pxMBPortCBTimerExpired( ) to notify the protocol stack that
  • * the timer has expired.
  • */
  • //µ÷Óô˺¯Êýºó Çå³þÖжϱê־λ
  • static void prvvTIMERExpiredISR( void )  interrupt 1
  • {
  •         // ( void )pxMBPortCBTimerExpired(  );²»ÄÜÖ±½Óµ÷ÓÃ
  •    if(eMBCurrentMode==MB_RTU)
  •     {
  •                 xMBRTUTimerT35Expired();
  •          }
  •         else if(eMBCurrentMode==MB_ASCII)
  •         {
  •                 xMBASCIITimerT1SExpired();
  •         }
  • }

相关帖子

沙发
忧忧|  楼主 | 2014-12-6 12:58 | 只看该作者
大家看看 有什么不对的地方吗?

使用特权

评论回复
板凳
hnkf118| | 2014-12-9 21:44 | 只看该作者
我的是自己写的。

使用特权

评论回复
地板
hnkf118| | 2014-12-9 21:49 | 只看该作者
指令处理

instr_proc.jpg (168.67 KB )

instr_proc.jpg

instr_tbl.jpg (173.77 KB )

instr_tbl.jpg

使用特权

评论回复
5
hnkf118| | 2014-12-9 21:56 | 只看该作者
支持多串口,同时处理MODBUS协议,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

69

帖子

1

粉丝