将modbus协议加入程序

注:此为本人使用的ModBus协议,对其他使用者参考价值不大

1.相关文件(如modbus_slave.h,modbus_slave.c等)移入文件夹(一般是user),加入路径

2.轮询方式,将"MODS_Poll();"加入while(1)中,可能会因程序原因无法及时接收到数据,可隔几行加一个"MODS_Poll();"

3.tim中断中写入代码段,定时器可以用任意,但建议用tim3,因modbus_slave.c中用的是tim3

extern __IO uint8_t g_mods_timeout;
void TIM3_IRQHandler(void)//TIMER3中断服务函数
{
		u8 num;
	if( TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET )//检测到TIMER3中断标志位不为0
	{
		TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除中断标志位
		g_mods_timeout=1;
		if(ledShowtick)
			ledShowtick--;

		if(ledShowtick==1)
			SetLed(1,1);
		TIM_Cmd(TIM3,DISABLE); //使能定时器3 
	}
	
	
}

4.如遇接收错误,可能是"MODS_03H(void)"函数中reg_value缓存不够大,

5.如在读、写寄存器时异常跳出,可能是地址错误,虽然看起来数字没问题,但建议在keil中重新打一遍,也许有用(可能是不同编辑器中字符编码的问题?)

6.有些变量在modbus中用到,在include.h中声明后,还需定义

7.注意include中的变量前有EXT(extern),

#ifdef __GLOBALS__
#define EXT
#else
#define EXT extern
#endif

若宏定义"__GLOBALS__",则有EXT的变量将会被声明为全局变量;若宏定义"__GLOBALS__"在main()函数前,则EXT变量将会被声明为本工程内所有代码的全局变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值