51单片机多机通信协议
//主机向从机发送命令
//因为主机为控制端,为便于控制从机,所以选择用查询法而不选用中断
void M_S_Protocol(uchar add,uchar *m)//三个参量分别为从机地址,命令的字节数,命令的位置 { state=1; ES=1; Position=m; Search(add); } //主机接收从机状态,同样也为查询法不用中断 void S_M_Protocol(uchar add,uchar *m)//三个参量分别为从机地址,命令的字节数,命令的位置 { state=4; ES=1; Position=m; Search(add); } void M_S_Send(uchar add,uchar *m)//主机到从机整个过程 { M_S_Protocol(add,m); while(state); ES=0; } void S_M_Send(uchar add,uchar *m)//从机到主机的整个过程 {
http://www.51hei.com/mcu/2318.html 2/15
2015年1月4日
51单片机多机通信协议
AUXR |= 0x40; //定时器1时钟为Fosc,即1T AUXR &= 0xFE; //串口1选择定时器1为波特率发生器 TMOD &= 0x0F; //清除定时器1模式位 TMOD |= 0x20; //设定定时器1为8位自动重装方式 TL1 = 0xDC; //设定定时初值 TH1 = 0xDC; //设定定时器重装值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 EA=1; //总中断启动 SM2=0; ES=1; }
//-----------------------------------------//查询法发送一个数据,TB8=0; void SendByte (uchar date) {
//EN_DATASEND;//TB8=0; TB8=1; SBUF=date; while(!TI); TI=0; }
51Hei精品推荐
1. 单片机视频教程 2. 51单片机教程(非常通俗易通) 3. 1课:单片机简叙
做自己以前没做过的东西,总会有各种踌躇,害怕做不出来,其实要是真的开始去做了,问题就解决大半了 。 在家没网,就开始写了, 熬了两夜,加一个半天,总算是完成了通信协议,经调试,可以正常工作。
4. 2课:单片机引脚介绍 5. 3课:存储器结构 6. 4课:第一个单片机小程序 7. 单片机C语言教程 8. 编程软件Keil C51下载 9. 单片机相关软件下载
http://www.51hei.com/mcu/2318.html 7/15
2015年1月4日
51单片机多机通信协议
/*else //无回应,停止通信 { state=0; SendByte(STOP); break; }*/ else break; } case 6: { if(Position-CMD<20) //数组溢出判断 { *Position=temp;//接收数据 Position++; SendByte(CONTINUE); //要求从机继续发送数据 break; } else//超出数组,停止通信 { state=0; SendByte(STOP); break; } } default: break; } } } //发送停止命令
单片机时钟设计 八路抢答器论文含原理图电路图
推荐文章
详细介绍用51单片机解密任何红外遥控器
#define EN_ADDSEND
TB8=1;//发送寻址,搜寻从机
肺腑之言-写给喜欢单片机的初学者 单片机USB-ISP下载线制作 自制单片机实验板 单片机一键多功能按键识别设计
#define EN_DATASEND TB8=0;//发送数据
//----------------------------------//寻址从机 void Search(uchar ADD) { //EN_ADDSEND;
http://www.51hei.com/mcu/2318.html 3/15
2015年1月4日
51单片机多机通信协议
TB8=1; SBUF=ADD; while(!TI); TI=0; }
2015年1月4日
中国领先的单片机及嵌入式资讯、教程、开发工具提供者!
51单片机多机通信协议
本站产品 联系我们
51Hei论坛导航
首页
基础教程
MCU设计实例
常用Βιβλιοθήκη Baidu片
电子基础
STM32
Arduino
本站论坛
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章
51单片机多机通信协议
作者:胡力拼 来源:本站原创 点击数: 319 更新时间:2013年11月17日 【字体:大 中 小】
0Xf0//握手后的命令字,主机到从机 0Xf1//握手后的命令字,从机到主机 0Xf2//主到从准备完成,从机发送的反馈信息
#define S_MOK 0xf3//从到主准备完成,主机发送的反馈信息 #define STOP 0xf4//主机到从机发送结束
#define ERROR 0xf5//错误 #define Response 0xf6//应答信号 #define CONTINUE 0xf7//接受数据之后给对方发送的反馈,请求继续 #define OK 0xf8
阅读排行
keil教程 单片机DS18B20水温控制系统设计
#include "basic.h"
单片机电子时钟设计 单片机USB-ISP下载线制作 单片机交通灯设计 单片机串口通讯 单片机课程设计 自制单片机实验板
//--------------------------------------------------//宏定义
2015年1月4日
51单片机多机通信协议
SendByte(STOP); break; } } break; } //----------------------------------------------------------------------//----------------接收部分--------------------------------------------case 4: { if(temp==Response)//呼叫从机得到回应 { state=5;//转换状态 SendByte(S_M);//发送从机到主机命令 break; } /*else//无回应,停止此次传输 { state=0; SendByte(STOP); break; } */ else break; } case 5: { if(temp==OK)//发送S_M得到回应 { state=6;//转换状态 SendByte(S_MOK);//准备完成 break; }
//--------------------------------------------//串口1初始化,用于和从机通讯 void Uart1_Init(void) //9600bps@11.0592MHz { PCON &= 0x7F; //波特率不倍速 SCON = 0xD0; //9位数据,可变波特率
//----------------------------------------------http://www.51hei.com/mcu/2318.html 8/15
2015年1月4日
51单片机多机通信协议
//从机程序,从机接收信息,所以用中断法会更便于反馈和执行命令 //------------------------------#include "basic.h"
如果有孩子也要做这个,可以参考一下哈! 别的不多说,贴代码。
//------------------------------------------------//主机程序,主机座控制,用中断法 //-----------------------------------------------
10.51单片机论坛(热!)
http://www.51hei.com/mcu/2318.html 4/15
2015年1月4日
51单片机多机通信协议
S_M_Protocol(add,m); while(state); ES=0; } //----------------------------//主函数,主机主函数主要用于与GPRS和从机之间做桥接 void main() { Uart1_Init(); while(1) { S_M_Send(0x01,CMD); } } void UART1() interrupt 4 { RI=0;//清除中断标志 temp=SBUF; if(state)//处于传输状态 { switch(state) { //----------------------------------------------------------------//---------------------M_S部分-------------------------------case 1: { if(temp==Response)//寻址成功 { SendByte(M_S); //发送M_S命令 state=2; //转换状态 break; } /*else//寻址不成功,通信结束,转换为非通信状态
#define S_MOK 0xf3//从到主准备完成,主机发送的反馈信息 #define STOP 0xf4//主机到从机发送结束
#define ERROR 0xf5//错误 #define Response 0xf6//应答信号 #define CONTINUE 0xf7//接受数据之后给对方发送的反馈,请求继续 #define OK 0xf8
case 3: { if(temp==CONTINUE) //从机继续要求数据 { if(Position-CMD<19)//数组长度判断 { Position++; SendByte(*Position);//发送数据 break;
} else//数组溢出,停止通信 { state=0;
http://www.51hei.com/mcu/2318.html 6/15
//--------------------------------------------------//宏定义
#define EN_ADDSEND
TB8=1;//发送寻址,搜寻从机
#define EN_DATASEND TB8=0;//发送数据
#define M_S #define S_M #define M_SOK
http://www.51hei.com/mcu/2318.html 5/15
2015年1月4日
51单片机多机通信协议
{ state=0; SendByte(STOP);//发送通信停止命令 break; }*/ break; } case 2: { if(temp==M_SOK)//M_S得到回应 { state=3; SendByte(*Position);//发送第一字节 break; } break; }
//-------------------------------------------------//数据定义 uchar DATA[20]={0};//从机返回的状态值
uchar CMD[20]= {0x44,0x44,0x44,0x55,0x55,0x55,0x47,0x45,0x65,0x35,0x55,0x55,0x55,0x55,0x55,0x55, 0x55,0x55,0x55,0x55,};// 主机给从机发送的命令 uchar state=0;//状态值,进行中断判断 uchar Address;//呼叫从机地址 uchar temp=0;//SBUF缓存 uchar *Position=0;//数据指针,指定数据更新的位置
http://www.51hei.com/mcu/2318.html
1/15
2015年1月4日
51单片机多机通信协议
#define M_S #define S_M #define M_SOK
0Xf0//握手后的命令字,主机到从机 0Xf1//握手后的命令字,从机到主机 0Xf2//主到从准备完成,从机发送的反馈信息