多机通信的从机程序

发布者:dong125612最新更新时间:2018-01-08 来源: eefocus关键字:多机通信  从机程序 手机看文章 扫描二维码
随时随地手机看文章

/* multi_s.c */ 
/* 多机通信的从机部分 */ 
#ifndef __MULTI_S_C__ 
#define __MULTI_S_C__ 

#include  
#include  

#define __MAX_LEN_ 64    // 数据最大长度 

#define _MHz_ 11    // 设置 单片机 使用的晶振频率(11.0592MHz) 

/* 以下为程序协议中使用的握手信号 */ 
#define __SUCC_ 0x0f    // 数据传送成功 
#define __ERR_ 0xf0    // 数据传送错误 

void init_serial();    // 串口初始化 
unsigned char recv_data(unsigned char *buf);    // 接收数据 
void Beep_ok();    // 蜂鸣表示数据接收ok,该函数代码未给出 

void main() 

    char buf[__MAX_LEN_]; 
    unsigned char i = 0; 
    unsigned char tmp = 0xff; 
    unsigned char addr;    // 保存本机地址 

    /* 从P1口读取本机地址 */ 
    P1 = 0xff; 
    addr = P1; 
     
    /* 串口初始化 */ 
    init_serial();    // 初始化串口 
    EA = 0;    // 关闭所有中断 

    /* 进入设备应答阶段 */ 
    while(1) 
    { 
        SM2 = 1;    // 只接收地址帧 
        /* 如果接收到的地址帧不是本机地址,则继续等待 */ 
        tmp = addr-1; 
        while(tmp != addr) 
        { 
            RI = 0; 
            while(!RI); 
            tmp = SBUF; 
            RI = 0; 
        } 
        /* 发送应答信号,并做好接收数据的准备 */ 
        TI = 0; 
        TB8 = 0;    // 主机不检测该位 
        SBUF = addr; 
        while(!TI); 
        TI = 0; 
        SM2 = 0;    // 允许接收数据信息 
        /* 数据接收 */ 
        tmp = 0xff; 
        while(tmp == 0xff)    // 如果数据校验失败则重新接收数据 
        { 
            tmp = recv_data(buf);    // 校验失败返回0xff,检测到地址帧则返回0xfe,接收成功则返回0 
        } 
        if(tmp == 0xfe)    // 在数据接收过程中,如果发现地址帧,则重新开始整个接收过程 
            continue; 
        Beep_ok();    // 蜂鸣表示数据接收成功     
    } 


/* 初始化串口 */ 
void init_serial() 

    TMOD = 0x20;    //定时器T1使用工作方式2 
    TH1 = 250;    // 设置初值 
    TL1 = 250; 
    TR1 = 1;    // 开始计时 
    PCON = 0x80;    // SMOD = 1 
    SCON = 0xd0;    //工作方式3,9位数据位,波特率9600bps,允许接收 


/* 接收数据,注意该函数使用buf指向的缓冲区保存数据,在数据末尾使用’\0’表示数据结束 
 * 返回值为0,数据校验成功,返回值为0xfe,接受过程中接收到地址帧,返回值为0xff,数据校验失败   
 */ 
unsigned char recv_data(unsigned char *buf) 

    unsigned char len;    // 该字节用于保存数据长度 
    unsigned char ecc;    // 该字节用于保存校验字节 
    unsigned char i,tmp; 
    /* 接收数据长度 */ 
    RI = 0; 
    while(!RI); 
    if(RB8 == 1)    // 若当前接收为地址帧则返回0xfe 
        return 0xfe; 
    len = SBUF; 
    RI = 0; 
    /* 使用len的值为校验字节ecc赋初值 */ 
    ecc = len; 
    /* 接收数据 */ 
    for(i=0; i    { 
        while(!RI); 
        if(RB8 == 1)    // 若当前接收为地址帧则返回0xfe 
            return 0xfe;         
        *buf = SBUF;    // 接收数据 
        ecc = ecc^(*buf);    // 进行字节校验 
        RI = 0; 
        buf++; 
    } 
    *buf = 0;    // 表示数据结束 
    /* 接收校验字节 */ 
    while(!RI); 
    if(RB8 == 1)    // 若当前接收为地址帧则返回0xfe 
        return 0xfe; 
    tmp = SBUF; 
    RI = 0; 
    /* 进行数据校验 */ 
    ecc = tmp^ecc; 
    if(ecc != 0)    // 校验失败 
    { 
        *(buf-len) = 0;    // 清空数据缓冲区 
        TI = 0;    // 发送校验失败信号 
        TB8 = 0; 
        SBUF = __ERR_; 
        while(!TI); 
        TI = 0; 
        return 0xff;    // 返回0xff表示校验错误 
    } 
    TI = 0;    // 校验成功 
    TB8 = 0; 
    SBUF = __SUCC_; 
    while(!TI); 
    TI = 0; 
    return 0;    // 校验成功,返回0 


#endif


关键字:多机通信  从机程序 引用地址:多机通信的从机程序

上一篇:单片机双机点对点通信的从机程序
下一篇:多机通信的主机部分程序

推荐阅读最新更新时间:2024-03-16 15:52

单片串行通信方式
  单片机双机通信完成的只是点对点之间的数据传输,但是,在实际应用中,经常会出现由多个单片机构成的多机通信系统。      单片机多机通信是指由两台以上单片机组成的网络结构,可以通过串行通信方式共同实现对某一过程的最终控制。多机通信的网络拓扑形式较多,可分为星型、环型和主从式多机型等多种,其中以主从式多机型应用较多。主从式多机通信系统中,一般有一台主机和多台从机。主机发送的信息可以传送到各个从机或指定从机,从机发送的信息只能被主机所接收,各从机之间不能直接通信,其结构形式如下图所示。   由图可知,主机的RXD、TXD与所有从机的TXD、RXD端相连接,主机发送的信号可被各从机接收,而各从机发送的信息则只能由主机接收。   
[单片机]
单片<font color='red'>机</font>间<font color='red'>多</font><font color='red'>机</font>串行<font color='red'>通信</font>方式
远距离分时双工通信芯片SR331
    摘要: SR331是新乡三瑞电子技术有限公司精心研制的分时双工通信模块。它利用20mA电流环和光电隔离原理来实现上位机与多个下位机间的多机分时双工通信。因而具有极高的可靠性下位机无数量限制的优点,从而解决了远距离多机通信时RS485芯片容易损坏的问题。     关键词: 多机通信 电流环 SR331 1 前言 在许多巡检系统工程应用中,往往需要计算机与多个单片机实现远距离多机双向通信。在计算机为上位机,单片机是下位机的情况下,目前通用的方法是采用RS-485协议,要求芯片通常都具有抗静电干扰、节点多、通信速率高等优点。然而,在笔者设计的几个系统中所使用的多种类型的RS-485、RS-422协议的芯片
[网络通信]
探讨PCMCS-51单片间的串行通信设计
简介:本文主要探讨PC机与多MCS-51单片机间的串行通信设计,本系统软硬件在IBM PC/XT机和DICE系列的MCS-51单片机上进行过调试,运行良好,验证了其在 仿真平台的控制,现已用于实际系统,且特别适用于从机实时性要求较高的中小型工控系统。 引言 在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。它们大多由IBM-PC微机和MCS-51单片机组成。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立
[单片机]
探讨PC<font color='red'>机</font>与<font color='red'>多</font>MCS-51单片<font color='red'>机</font>间的串行<font color='red'>通信</font>设计
基于CAN控制器的对等式单片系统的通信
    摘要: 针对单片机多机系统主从式通信的缺点,提也了利用CAN控制器实现单片机多机系统对等式通信,并对其硬件组成原理、通信程序的设计做了详细的分析。     关键词: 单片机多机系统 “对等式”通信 控制器局域网(CAN) 关于单片机的多机通信,许多文章及相关书籍都有介绍,但就其多机通信的方式而言大多为“主从式”,这一通信方式限制了单片机功能的发挥及广泛的应用。虽然文献 利用巧秒的硬件手段实现了单片机多机之间的“对等式”通信,但其通信方式实质上仍是“主从式”。本文介绍了一种基于CAN控制器的单片机多机系统,从本质上实现了任意两机之间直接相互通信,从而克服了“主从式”多机通信的缺点。 1 CAN技术简
[应用]
基于CAN控制器的对等式单片系统的通信
    摘要: 针对单片机多机系统主从式通信的缺点,提也了利用CAN控制器实现单片机多机系统对等式通信,并对其硬件组成原理、通信程序的设计做了详细的分析。     关键词: 单片机多机系统 “对等式”通信 控制器局域网(CAN) 关于单片机的多机通信,许多文章及相关书籍都有介绍,但就其多机通信的方式而言大多为“主从式”,这一通信方式限制了单片机功能的发挥及广泛的应用。虽然文献 利用巧秒的硬件手段实现了单片机多机之间的“对等式”通信,但其通信方式实质上仍是“主从式”。本文介绍了一种基于CAN控制器的单片机多机系统,从本质上实现了任意两机之间直接相互通信,从而克服了“主从式”多机通信的缺点。 1 CAN技术简
[工业控制]
用MC145026/27实现并口线通信
    摘要: 介绍了一种用三态编解码芯片MC145026/27实现的基于并口的多机线通信系统的组成原理和实现方法,给出了多台微型机之间的无线通信问题的解决方案等,阐述了系统的总体组成及通信方法。     关键词: 并行接口 无线通信 编码器 解码器 MC145026/27 1 引言 在遥测、遥控等领域中,往往使用微机与单片机组成多机通信系统来完成测控任务。其中,常用的方法是使用微机的RS-232C串行接口进行串行数据通信。由于受环境的影响以及RS-232C串行接口电气性能的限制,加上连接线长、接线麻烦等缺点,其通信的空间范围总是受到限制,并使人们感到不便。因此,人们想到了无线传输。常用的无线传输方式有无
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved