基于AVRmega128的modbus程序.doc

上传人:h**** 文档编号:157640 上传时间:2018-07-12 格式:DOC 页数:20 大小:45.50KB
下载 相关 举报
基于AVRmega128的modbus程序.doc_第1页
第1页 / 共20页
基于AVRmega128的modbus程序.doc_第2页
第2页 / 共20页
基于AVRmega128的modbus程序.doc_第3页
第3页 / 共20页
基于AVRmega128的modbus程序.doc_第4页
第4页 / 共20页
基于AVRmega128的modbus程序.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、可读性非常好的 MODBUS源代码 ( 1)为了加快发送采用了:数据空中断 ( 2)为了保证最后一个字节能够发送到上位机采用了:发送完成中断 #include #include #define _USART1_H #include “DMS2000.h“ const UCHAR auchCRCHi = 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00

2、, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81

3、, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01

4、, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81

5、, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01

6、, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 ; const UCHAR auchCRCLo = 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC

7、4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF

8、0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x2

9、5, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xB

10、B, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9

11、E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 ; BOOL volatile USART1_send_mark = FALSE; UCHAR vola

12、tile USART1_sendPosi = 0; SHORT volatile USART1_receCount = 0; UCHAR volatile USART1_receTimeOut = 0; UCHAR volatile USART1_checkoutError = 0; UCHAR volatile USART1_sendCount = 0; UCHAR USART1_ch_type = 0; UCHAR USART1_set_number = 0; UCHAR USART1_send_bufferMSCOMM_BUFFER_LENGTH; UCHAR USART1_mscomm

13、_bufferMSCOMM_BUFFER_LENGTH; USHORT CRC16(UCHAR *puchMsg, USHORT usDataLen) UCHAR uchCRCHi = 0xFF; UCHAR uchCRCLo = 0xFF; ULONG uIndex; while (usDataLen-) uIndex = uchCRCHi *puchMsg+; uchCRCHi = uchCRCLo auchCRCHiuIndex; uchCRCLo = auchCRCLouIndex; return (uchCRCHi 0x01; UCHAR me_Baud = (UCHAR)(MSCO

14、MM_baud UCSR1B = 0x00; UCSR1A = 0x00; UCSR1C = (1 = 1 if (USART1_receTimeOut = 0 USART1_checkoutError = 0; if (!USART1_send_mark) RS485_RECIVE(); void USART1_Begin_Send(void) RS485_SEND(); NOP(); / -| NOP(); / | NOP(); / |-等待总线释放 NOP(); / | NOP(); / -| NOP(); / -| NOP(); / | NOP(); / |-等待总线释放 NOP();

15、 / | NOP(); / -| USART1_send_mark = TRUE; USART1_sendPosi = 0; UCSR1B |= BIT(5); void USART1_MODBUS_Error(UCHAR error_code) USHORT crcData; USART1_send_buffer0 = USART1_mscomm_buffer0; USART1_send_buffer1 = USART1_mscomm_buffer1 | 0x80; USART1_send_buffer2 = error_code; crcData = CRC16(USART1_send_b

16、uffer,3); USART1_send_buffer3 = crcData 8; USART1_send_buffer4 = crcData USART1_sendCount = 5; USART1_Begin_Send(); void USART1_ReadCoilRegisters(void) UCHAR i,k; UCHAR byteCount; SHORT registerAmount; SHORT startAddr; SHORT tempAddr; SHORT tempData; USHORT crcData; startAddr = (SHORT)(USART1_mscomm

17、_buffer2 0x03; if (registerAmount for (k = 0 ; k = startAddr + registerAmount) break; USART1_send_buffer0 = USART1_mscomm_buffer0; USART1_send_buffer1 = USART1_mscomm_buffer1; USART1_send_buffer2 = byteCount; byteCount += 3; crcData = CRC16(USART1_send_buffer,byteCount); USART1_send_bufferbyteCount

18、= crcData 8; byteCount+; USART1_send_bufferbyteCount = crcData USART1_sendCount = byteCount + 1; USART1_Begin_Send(); else USART1_MODBUS_Error(2); void USART1_ReadDiscreteRegisters(void) UCHAR i,k; UCHAR byteCount; SHORT registerAmount; SHORT startAddr; SHORT tempAddr; SHORT tempData; USHORT crcData

19、; startAddr = (SHORT)(USART1_mscomm_buffer2 0x03; if (registerAmount for (k = 0 ; k = startAddr + registerAmount) break; USART1_send_buffer0 = USART1_mscomm_buffer0; USART1_send_buffer1 = USART1_mscomm_buffer1; USART1_send_buffer2 = byteCount; byteCount += 3; crcData = CRC16(USART1_send_buffer,byteC

20、ount); USART1_send_bufferbyteCount = crcData 8; byteCount+; USART1_send_bufferbyteCount = crcData USART1_sendCount = byteCount + 1; USART1_Begin_Send(); else USART1_MODBUS_Error(2); void USART1_ReadHoldingRegisters(void) UCHAR i; SHORT startAddr; SHORT registerAmount; SHORT byteCount; SHORT tempData; USHORT crcData; startAddr = (SHORT)(USART1_mscomm_buffer2 8; USART1_send_buffer2*i+4 = tempData USART1_send_buffer0 = USART1_mscomm_buffer0; USART1_send_buffer1 = USART1_mscomm_buffer1; USART1_send_buffer2 = byteCount; byteCount += 3; crcData = CRC16(USART1_send_buffer,byteCount);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。