AVR单片机实现modbus通讯协议

0.内容简介

1. modbus通讯协议

(1)modbus通讯协议是由Modicon公司在1979年开发的,应用于工业现场控制的总线协议。

(2)modbus协议采用主从模式,由一个主机对多个从机进行通信,最多支持247个从机。

(3)modbus数据传输模式:ASCII和RTU两种模式。

        1)ASCII模式:

① 有开始标志和结束标志,数据帧以英文冒号(0x3A)开始,以回车和换号(0x0D and 0x0A )符号结束;一个数据帧的各字节的传输时间间隔可以大于1s。

② 允许的传输的字符集为十六进制的0~9和A~F;每个8位的字节被拆分成两个ASCII字符进行发送,比如十六进制数0xAF ,会被分解成ASCII字符“A”和“F”进行发送,发送的字符量比RTU增加一倍。

        2)RTU模式:

① 没有规定的开始和结束标记,规定每两个字节之间发送或者接收的时间间隔不能超过3.5倍字符传输时间。如果两个字符时间间隔超过了3.5倍的字符传输时间,就认为一帧数据已经接收,新的一帧数据传输开始。

② 每个字节可以传输两个十六进制字符,比如十六进制数0xAF,直接以十六进制0xAF进行发送

        3)modbus数据帧格式:ModBus协议帧格式(RTU、ASCII、TCP/IP)_匠在江湖的博客-CSDN博客_modbus协议帧格式

① modbus数据帧校验方式:CRC循环冗余校验(RTU模式)和LRC纵向冗余校验(ASCII模式)

② modbus从机地址:主机通过唯一的从机地址识别从机,主机与从机通信时通过不同的功能码实现不同的功能

③ modbus功能码:MODBUS协议整理——功能码简述 - Endv - 博客园

2. RS485

3. AVR单片机

3.1 ATmega32A单片机

ATmega32A数据表

3.2 串口通信

3.2.0 内容简介

  • 串口通信:波特率:9600    数据位:8   校验位:无 停止位:1
  • 串口调试:

3.2.1 USART初始化

void USART_Init(unsigned int baud) { // USART初始化
	UBRRH = (unsigned char) (baud>>8); // baud=51->f=8MHz
	UBRRL = (unsigned char) baud;
	UCSRB = (1<<RXCIE) | (1<<RXEN) | (1<<TXEN);   // 接收结束中断,接收使能,发送使能
	UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0); // 异步通信,无校验,8个数据位,1个停止位
}

3.2.2 USART 发送器

void USART_Transmit(unsigned char data) { // USART发送器
    while(!(UCSRA&(1<<UDRE))); // 等待发送缓冲器为空
	UDR = data;                // 将数据放入缓冲器,发送数据
}

3.2.3 USART接收器

unsigned char USART_Receive(void) { // USART接收器
	while(!(UCSRA&(1<<RXC))); // 等待接收数据
	return UDR;               // 从缓冲器中获取并返回数据
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云水僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值