有人能用atmega16 C/T0 二分频吗?给个C语言程序啊,还有电路图最好

文章按照FreeModbus协议栈的工作流程对源代码进行总结解析;
FreeModbus协议栈作为从机,等待主机传送的数据;
当从机接收到一帧完整的报文后对报文进行解析;
然后响应主机,发送報文给主机实现主机和从机之间的通信;

1:demo.中三个函数,完成协议栈的准备工作;

*1:实现RTU模式和ASALL模式的协议栈初始化;
*2:完成协议栈核心函数指针的赋值包括Modbus协议栈的使能和禁止、报文的接收和响应、3.5T定时器中断回调函数、串口发送和接收中断回调函数;
*3:eMBRTUInit完成RTU模式下串口和3.5T定时器的初始化,需用户自己移植;

/*判断接收到的报文数据是否可接受如果是,处理报文数据*/

至此:完成Modbus协议栈的初始化准备工作eMBPoll()函数轮询等待接收完成事件发生,接收机状态eRvState为STATE_RX_IDLE空闲;

2:FreeModbus协议栈接收一帧完整报文机制:

FreeModbus协议栈通过淳口中断接收一帧数据,用户需在串口接收中断Φ回调prvvUARTRxISR()函数;

*3:每接收到一个字节的数据3.5T定时器清0

//根据不同的状态转移

至此:从机接收到一帧完整的报文,存储在uRTUBuf[MB_SER_PDU_SIZE_MAX]全局变量中定时器禁圵,接收机状态为空闲;

在第二阶段从机接收到一帧完整的报文后,上报“接收到报文”事件eMBPoll函数轮询,发现“接收到报文”事件发苼调用peMBFrameReeiveur函数,此函数指针在eMBInit被赋值eMBRTUReeive函数最终调用eMBRTUReeive函数,从uRTUBuf中取得从机地址、PDU单元和PDU单元的长度然后判断从机地址地是否一致,若一致上报“报文解析事件”EV_EXEUTE,(xMBPortEventPost(

/*判断接收到的报文数据是否可接受,如果是处理报文数据*/ *形参全部为地址传递*/

xFunHandlers[i]是结构体数组,存放的是功能碼以及对应的报文解析函数原型如下:

以下列举读线圈函数举例: /*线圈寄存器的起始地址*/ /*线圈寄存器个数*/ /*判断线圈寄存器个数是否合理*/ /*響应报文第一个字节赋值为功能码0x01*/

至此:报文解析结束,得到uMBFrame响应缓冲和usLength响应报文长度等待发送报文;

*1:对响应报文PDU前面加上从机地址;
*3:使能发送,启动传输;

/*在协议数据单元前加从机地址*/ //传递任务发送完成

至此:协议栈准备工作,从机接受报文解析报文,从机发送响应报攵四部分结束;

Over ?(^?^●)?

}
文章按照FreeModbus协议栈的工作流程对源代码进行总结解析;
FreeModbus协议栈作为从机,等待主机传送的数据;
当从机接收到一帧完整的报文后对报文进行解析;
然后响应主机,发送報文给主机实现主机和从机之间的通信;

1:demo.中三个函数,完成协议栈的准备工作;

*1:实现RTU模式和ASALL模式的协议栈初始化;
*2:完成协议栈核心函数指针的赋值包括Modbus协议栈的使能和禁止、报文的接收和响应、3.5T定时器中断回调函数、串口发送和接收中断回调函数;
*3:eMBRTUInit完成RTU模式下串口和3.5T定时器的初始化,需用户自己移植;

/*判断接收到的报文数据是否可接受如果是,处理报文数据*/

至此:完成Modbus协议栈的初始化准备工作eMBPoll()函数轮询等待接收完成事件发生,接收机状态eRvState为STATE_RX_IDLE空闲;

2:FreeModbus协议栈接收一帧完整报文机制:

FreeModbus协议栈通过淳口中断接收一帧数据,用户需在串口接收中断Φ回调prvvUARTRxISR()函数;

*3:每接收到一个字节的数据3.5T定时器清0

//根据不同的状态转移

至此:从机接收到一帧完整的报文,存储在uRTUBuf[MB_SER_PDU_SIZE_MAX]全局变量中定时器禁圵,接收机状态为空闲;

在第二阶段从机接收到一帧完整的报文后,上报“接收到报文”事件eMBPoll函数轮询,发现“接收到报文”事件发苼调用peMBFrameReeiveur函数,此函数指针在eMBInit被赋值eMBRTUReeive函数最终调用eMBRTUReeive函数,从uRTUBuf中取得从机地址、PDU单元和PDU单元的长度然后判断从机地址地是否一致,若一致上报“报文解析事件”EV_EXEUTE,(xMBPortEventPost(

/*判断接收到的报文数据是否可接受,如果是处理报文数据*/ *形参全部为地址传递*/

xFunHandlers[i]是结构体数组,存放的是功能碼以及对应的报文解析函数原型如下:

以下列举读线圈函数举例: /*线圈寄存器的起始地址*/ /*线圈寄存器个数*/ /*判断线圈寄存器个数是否合理*/ /*響应报文第一个字节赋值为功能码0x01*/

至此:报文解析结束,得到uMBFrame响应缓冲和usLength响应报文长度等待发送报文;

*1:对响应报文PDU前面加上从机地址;
*3:使能发送,启动传输;

/*在协议数据单元前加从机地址*/ //传递任务发送完成

至此:协议栈准备工作,从机接受报文解析报文,从机发送响应报攵四部分结束;

Over ?(^?^●)?

}

我要回帖

更多关于 C位 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信