首页 新闻 赞助 找找看

modbus的adc结果显示

-1
悬赏园豆:5 [待解决问题]

主函数如下
int main(void)
{
float temp;
int sum;

    delay_init(168);
	//初始化 RTU模式 参数二:不用管,参数3:从机地址为1 参数4:9600 参数5:无效验 	
	eMBInit(MB_RTU, 0x01, 0x01, 9600, MB_PAR_NONE);
	//启动

    LED_Init();					//初始化LED 
    LCD_Init();         //液晶初始化
    Adc_Init();         //内部温度传感器ADC初始化
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	eMBEnable();
	p=(unsigned char*)&a;

    while(1)
	{			
		if(TRUE) 
		{	
            temp=Get_Temprate();	//得到温度值
            sum=(int)temp;                
	        if(sum<0)
	        {
		        sum=-sum;

                usRegHoldingBuf[0]=sum;
		        printf("当前温度为:-%d",sum/100);	    //显示负号
	        }
            else
            {
                usRegHoldingBuf[0]=sum;
                printf("当前温度为:%d",sum/100);	//无符号
            }
	        printf("\r\n\r\n");  //插入换行                
            
            delay_ms(200); 
             (void)eMBPoll();
		     a++;
        }
            
            if(TRUE)
		    {			
		        eMBRegHoldingCB(p,1,8,MB_REG_WRITE );

		        (void)eMBPoll();
		         a++;
		     }
		}

}

现在用modbus poll读取温度数据出现了如下图的问题,每三秒会报错一次,其余两秒可以正常读取

后来怀疑是printf导致的冲突,于是把程序里所有的printf删除,结果poll里面直接timeout。程序里一共5个printf,注释掉两个,每三秒报一次checksum error;注释掉三个,每六秒报一次;注释掉四个,每我秒报两次。

求问这是什么原因导致的,以及如何修改。

风满楼观世界的主页 风满楼观世界 | 初学一级 | 园豆:195
提问于:2023-09-26 10:06
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册