集成电路 逻辑门 控制器 晶体管 指令集 内存
主页 正文

51单片机编程通讯

51单片机C语言怎么写Modbus通信程序?

我不小心做了crc验证。
给你一段代码。
我也是从网上复制的。
已验证。
unsignedshortcrc16;staticucharcodeauchCRCHI[256]={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,0x4 0.0x01.0xC0.0x80.0x41.0x01.0xC0.0x80.0x41.0x00.0xC1.0x81.0x40.0x00.0xC1.0x81.0x40.0x01.0xC0.0x 80.0x41.0x00.0xC1.0x81.0x40.0x01.0xC0.0x80.0x41.0x01.0xC0.0x80.0x41.0x00.0xC1.0x81.0x40.0x01.0 xC0,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,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC 1.0x81.0x40.0x01.0xC0.0x80.0x41.0x01.0xC0.0x80.0x41.0x00.0xC1.0x81.0x40.0x00.0xC1.0x81.0x40.0x0 1.0xC0.0x80.0x41.0x00.0xC1.0x81.0x40.0x01.0xC0.0x80.0x41.0x01.0xC0.0x80.0x41.0x00.0xC1.0x81.0x 40.0x00.0xC1.0x81.0x40.0x01.0xC0.0x80.0x41.0x01.0xC0.0x80.0x41.0x00.0xC1.0x81.0x40.0x01.0xC0.0 x80,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,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,0xC 1,0x81,0x40};//CRC低字节值表 staticucharcodeauchCRCLo[256]={0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2 ,0xC6,0x06,0x07,0xC7,0x05,0xC5,0xC4,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,0x1 D,0x1C,0xDC,0x14,0xD4,0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,0x11,0xD1,0xD0,0x10,0x F0,0x30,0x31,0xF1,0x33,0xF3,0​​xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,0x3C,0xFC,0xFD,0 x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,0xEB,0x2B,0 x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,0xEC,0x2C,0xE4,0x24,0x25,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,0xA 8,0x68,0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x7 4.0x75.0xB5.0x77.0xB7.0xB6.0x76.0x72.0xB2.0xB3.0x73.0xB1.0x71.0x70.0xB0.0x50.0x90.0x91.0x51.0x 93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,0x5D,0x9D,0x5F,0x9F,0x9E,0 x5E,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};//CRC校验函数 unsignedshortCRC16(unsignedchar*puchMsg,unsignedshortusDataLen){unsignedcharuchCRCHi=0xFF;/*CRC高字节初始化*/unsignedcharuchCRCLo=0xCFF;/te*初始化*LunCFF; 循环中索引*/while(usDataLen--)/*发送报文缓冲区*/{uInde​​x=uchCRCHi^*puchMsg++;/*计算CRC*/uchCRCHi=uchCRCLo^auchCRCHi[uInde​​x];uchCRCLo=auchCRCLo[uInde​​x]; return(uchCRCHi

PC通过485与51单片机通讯去控制继电器,如何编单片机C语言程序?

51. 对于继电器控制,仅使用高电平和低电平。
关键是你的程序中必须有一个判断子程序来判断单片机从PC(通过RS485)传过来的数据,以便对单片机的特定部分进行设置或复位。
例如:可以使用if语句,如果接收到的数据是11111,则将其设置。
如果接收到的数据为00000,则复位,相应的继电器动作。

单片机通讯问题C51通过串口全双工通讯能够实现接受与转送数据同时

全双工通信,即接收和发送可以同时完成,是现代通信技术的共同特征。
在单片机51自带的串口模块中,也可以很容易地实现该功能。
在微控制器51中,经常使用中断来接收数据。
该方法可以有效避免数据丢失,保证数据完整性。
发送数据比较简单,只需将数据写入串口寄存器即可。
虽然读写操作都涉及同一个寄存器,但实际的读写操作并不是针对同一个内存单元,因此不会互相影响。
这种设计允许微控制器51在串行通信期间有效地接收和发送数据。
无论是通过中断还是轮询,都可以保证数据传输的准确。
同时,这样的设计也提高了系统的响应速度,让系统能够更及时地处理接收到的数据。
值得一提的是,虽然读写操作共享同一个寄存器,但系统通过内部控制逻辑确保任何时候只能执行一个操作。
这种设计不仅简化了硬件实现,而且提高了系统的稳定性和可靠性。
总体而言,微控制器串口模块51在全双工通信方面表现良好,能够满足大多数应用场景的需要。
无论是简单的数据传输还是实现复杂的通信协议,通过正确的配置和使用中断都可以实现高效可靠的通信。

热门资讯
Cache与寄存器关键差异详解
解析中断类型号与中断类型码系统核心知识详解
深度解析应答码01的内涵与意义
深入解析基础逻辑门电路原理与应用
cache寄存器
系统总线三大功能解析及接口部件详解
基于Redis的缓存策略应用解析
Redis缓存清理方法解析