⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 com.h

📁 两颗51单片机通过串口通信的代码,独有的仲裁机制使得任一颗单片机都能成为主机.
💻 H
字号:
#include<AT89C51RC.H>
//定义数据标识
#define VComArbitrateReq	0x06	//仲裁请求标识
#define VComArbitrateAck	0x07	//仲裁请求返回数据
#define VComDataAck			0x08	//返回此标识表示此字节数据发送成功
#define VComDataNAck		0x09	//返回此标识表示此字节数据发送失败
//if(McuMasterOrSlaver==VMcuMaster)该模块使用于单片机UMA1
//if(McuMasterOrSlaver==VMcuSlaver)该模块使用于单片机USL1
#define VMcuMaster			0
#define VMcuSlaver			1
//IF(ComMasterOrSlaver==VComMaster)表示此时本机作为串口通信主机
//IF(ComMasterOrSlaver==VComSlaver)表示此时本机作为串口通信丛机
//IF(ComMasterOrSlaver==VComNull)表示此时本机没有进行串口通信
#define VComMaster			0
#define VComSlaver			1
#define VComNull			2

//以下为函数返回值
#define ComRe_OK              0        	// 通信成功
#define ComRe_IsSlaver        1			//本机是丛机,不能主动发数据
#define ComRe_CanNotArbitrate 81		//此刻不能进行仲裁
#define ComRe_ArbitrateError  82		//仲裁失败
#define ComRe_CommunicateError	83		//通信出错
//双核通信缓冲区,
extern pdata unsigned char ucComRecBuf[24];   //串口接收缓冲区
extern pdata unsigned char ucComSendBuf[24];	//串口发送缓冲区

extern void ComInitial(void);   //串口初始化
extern unsigned char ComSendStr(void) reentrant;//作为主机时,在前台主动发送数据。
extern unsigned char ComIntFunc(void);//作为丛机时,在中断中接收数据,该函数在串口中断中调用。



///////////////////////////////////////////////////////////////
/*
	使用该模块进行通信前,先调用void ComInitial(void)进行串口初始化,如果想更改设置,请修改该函数。
任何一方向对方发送数据之前,都要先取得该通信总线的主动权,使自己达到ComMasterOrSlaver=VComMaster的条件,
即成为通信主机,只有确认自己成为通信主机以后方能正常发送数据,否则数据不会被发送。发送数据前,先把数据
帧装入串口发送缓冲区ucComSendBuf[]. 再执行unsigned char ComSendStr(void)发送数据。数据帧描述如下:
	数据帧第一字节表示该次通信的应用类型码,对方通过分析该字节来决定执行什么操作及是否需要返回数据给主机。
该字节的低6位为应用类型,高2位表示从机是否需要返回数据给主机。此二位为01则无需返回,为10则要返回数据。
第二字节表示数据帧的数据长度,不包括在unsigned char ComSendStr(void)发送函数中自动生成的校验码字节。
	丛机在中断程序中调用unsigned char ComIntFunc(void)接收数据帧,数据被存放在串口接收缓冲区ucComRecBuf[]中,
在unsigned char ComIntFunc(void)中,当收完数据帧后,会分析第一个字节,根据第一个字节中的低6位值跳到相应的地
址去执行相应的操作。
*/
///////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -