单片机双机点对点通信的主机程序

发布者:csydtc最新更新时间:2018-01-09 来源: eefocus关键字:单片机  双机  点对点通信  主机程序 手机看文章 扫描二维码
随时随地手机看文章

单片机 双机点对点通信的主机部分程序

#ifndef __P2P_M_C__ 
#define __P2P_M_C__ 

#include  
#include  

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

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

/* 以下为程序协议中使用的握手信号 */ 
#define __RDY_ 0x06    // 主机开始通信时发送的呼叫信号 
#define __BUSY_ 0x15    // 从机忙应答 
#define __OK_ 0x00    // 从机准备好 
#define __SUCC_ 0x0f    // 数据传送成功 
#define __ERR_ 0xf0    // 数据传送错误 

void init_serial();    // 串口初始化 
void send_data(unsigned char *buf);    // 发送数据 
void delay10ms(unsigned int count);    // 延时子程序(10ms) 

void main() 

    char buf[__MAX_LEN_]; 
    unsigned char i = 0; 
    unsigned char tmp = __BUSY_; 

    /* 为缓冲区赋初值 */ 
    P0 = 0xff; 
    while(P1 != 0)    // 每隔100ms从P0口读取,若读取到0则表明数据采集结束 
    { 
        *(buf+i) = P0; 
        delay10ms(10);    // 延时100ms 
        P0 = 0xff; 
        i++; 
    } 
    *(buf+i) = 0;    // 缓冲区最后一个字节为0表示数据结束 

    /* 串口初始化 */ 
    init_serial();    // 初始化串口 
    EA = 0;    // 关闭所有中断 

    /* 发送握手信号06H */ 
    TI = 0; 
    SBUF = __RDY_; 
    while(!TI); 
    TI = 0; 
    /* 接收应答信息,如果接收的信号为00H,表示从机允许接收 */ 
    while(tmp != __OK_) 
    { 
        RI = 0; 
        while(!RI); 
        tmp = SBUF; 
        RI = 0; 
    } 
    /* 发送数据并接收校验信息,如果接收的信号为0FH,表示从机接收成功,否则将重新发送该组数据 */ 
    tmp = __ERR_; 
    while(tmp != __SUCC_) 
    { 
        send_data(buf);    // 发送数据 
        RI = 0; 
        while(!RI); 
        tmp = SBUF; 
        RI = 0; 
    } 
    while(1);    // 程序结束,进入死循环 


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

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


/* 发送数据 */ 
void send_data(unsigned char *buf) 

    unsigned char len;    // 保存数据长度 
    unsigned char ecc;    // 保存校验字节 
     
    len = strlen(buf);    // 计算要发送数据的长度 
    ecc = len;    // 开始进行校验字节计算 
    /* 发送数据长度 */ 
    TI = 0;     
    SBUF = len;    // 发送长度 
    while(!TI); 
    TI = 0; 
    /* 发送数据 */ 
    for(i=0; i    { 
        ecc = ecc^(*buf);    // 计算校验字节 
        SBUF = *buf;    // 发送数据 
        buf++; 
        while(!TI); 
        TI = 0; 
    } 
    /* 发送校验字节 */ 
    SBUF = ecc;    // 发送校验字节 
    while(!TI); 
    TI = 0; 


/* 延时10ms,精度较低,参数count为延时时间 */ 
void delay10ms(unsigned int count) 

    unsigned int i, k; 
    unsigned char j; 
    unsigned int tmp; 
    tmp = (int)((100*_MHZ_)/12); 

    for(i=0; i        for(j=0; j<100; j++) 
            for(k=0; k

#endif


关键字:单片机  双机  点对点通信  主机程序 引用地址:单片机双机点对点通信的主机程序

上一篇:多机通信的主机部分程序
下一篇:CAN接口汇编程序

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

51单片机-温度控制器设计详解+电路+代码
这个51单片机电路里面,需要用到: AT89C51 x1 主要控制单片机 AT24C02 x1 EEPROM-2K储存器 DS180B2 x1 温度传感器 10uF x1 , 47uF x1 有极电容 104 x3 , 30pF x2 无极电容 12MHz x1 石英晶体振荡器 1K x2 电阻 7cmx9cm x1 万能洞洞电路板 继电器若干 总价好像12块左右吧,建议淘宝一下,不同的商家出售器件的价格不同.. Q1:EEPROM的作用 A1:因为EEPROM 可以让单片机进行IIC读写外部储存数据,也方便以后换一个控制电路温度值,单片机不可能每换一个控制
[单片机]
51<font color='red'>单片机</font>-温度控制器设计详解+电路+代码
单片机IO口模拟串口程序(发送+接收)
前一阵一直在做单片机的程序,由于串口不够,需要用IO口来模拟出一个串口。经过若干曲折并参考了一些现有的资料,基本上完成了。现在将完整的测试程序,以及其中一些需要总结的部分贴出来。 程序硬件平台:11.0592M晶振,STC单片机(兼容51) /*************************************************************** * 在单片机上模拟了一个串口,使用P2.1作为发送端 * 把单片机中存放的数据通过P2.1作为串口TXD发送出去 ***************************************************************/ #i nclude
[单片机]
盛群半导体推出大容量微控制器
盛群半导体推出HT48R068B、HT48R069B与HT46R068B、HT46R069B大容量MCU。HT4xR068B ROM为16kx16、RAM为512 Bytes、HT4xR069B ROM为32kx16、RAM为1kBytes;HT4xR068B与HT4xR069B内建有16个通道的12-bit A/D、4个通道的8-bit PWM、1个通道的12-bit D/A与串行传输接口SPI/I2C,可减少外围零件、缩小PCB Size及降低成本,非常适合家电类、工业类与小型微控制系统的应用。 HT4xR068B与HT4xR069B的特点在于全系列工规(-40~85℃)、工作电压2.2~5.5V、内建R-Type
[单片机]
AVR单片机入门:单片机嵌入式系统的结构与应用
单片机,全名单片机微控制器,单片微型计算机(Single-Chip Microcomputre),也有人称之为嵌入式微控制器(Embedded Microcontroller)。由单片机作为主要的控制核心所构成的嵌入式系统称为单片机嵌入式系统,国内一般简称为单片机系统。 一、单片嵌入式系统的结构 单片嵌入式系统一般包含硬件与软件两个部分,而硬件部分又分为单片为控制芯片(即单片机)和外围电路,外围电路又分为基本系统电路与接口电路,接口电路又分为前向通道接口电路、后向通道接口电路、交互通道接口电路与数据通信接口电路。 1、基本系统电路 基本系统电路是指满足单片机系统运行所需的基本电路。比如时钟电路、复位电路、系统供电电
[单片机]
如何快速掌握一款MCU,可以从这几方面入手
任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量、指令系统等。对于指令系统,虽然形式上看似千差万别,但实际上只是符号的不同,其所代表的含义、所要完成的功能和寻址方式基本上是类似的。因此,对于任何一款MCU,主要应从如下的几个方面来理解和掌握: MCU的特点:要了解一款MCU,首先需要知道就是其ROM空间、RAM空间、IO口数量、定时器数量和定时方式、所提供的外围功能模块、中断源、工作电压及功耗等等。 了解这些MCU Features后,接下来第一步就是将所选MCU的功能与实际项目开发的要求的功能进行对比,明确那些资源是目前所需要的,那些是本项目所用不到的。对于项目中需要用到的而
[单片机]
如何快速掌握一款<font color='red'>MCU</font>,可以从这几方面入手
基于MSP430F1 49单片机的网络控制系统温控系统设计
文中将嵌入式控制技术与网络控制技术相结合,实现了基于单片机通过因特网的控制实现温控系统的设计,文中所采用的是MSP430F1 49单片机作为控制核心,MSP430F149微控制器控制以太网控制器CS8900A实现本地局域网的功能,通过TCP协议提供与因特网进行连接,可以实现对温箱的温度进行实时有效地控制。系统体积小巧,具备温度采集和远程控制功能和良好的可扩展性。 网络控制系统(NCSs)已经成为学术和工业领域的主要研究中心之一,随着日益增加的研究趋势和研究需要,能够成功应用最新的知识和信息则显得格外的重要。随着社会发展的需求,人们对温箱的应用和需求越来越广泛,在工业生产和日常生活或科学实验中,我们随处都可以看到温箱的应用。本文
[单片机]
基于MSP430F1 49<font color='red'>单片机</font>的网络控制系统温控系统设计
51单片机实现数码管动态显示60~0
硬件电路原理图 元件清单 C语言程序 #include reg51.h unsigned char table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管字符码 void show(unsigned char n); void delay(unsigned int k); void main() { unsigned char i; int j; while(1) { for(i=60;j=60,i 0;i--) while(j--) show(i); } } void show(unsigned char n) { P0=table ; P1
[单片机]
51<font color='red'>单片机</font>实现数码管动态显示60~0
基于单片机的多点温度测量仪的设计
许多场合需要对多点温度进行监控。测量温度的传感器比较多,目前普遍采用的是热电偶和热电阻。热电偶测量温度范围宽、精度高、性能稳定,但价格高且输出热电动势低,不便于使用。金属热电阻测量温度范围在几百度以内,测量精度也较高,但是输出灵敏度较低。半导体热电阻即热敏电阻,具有高输出灵敏度的特点,且随着加工工艺的改善,测量精度和互换性都有了很大的提高,且价格低廉。 1 测量电路的设计 多点温度测量仪由热敏电阻、多路转换开关、电阻-脉宽转换电路、单片机、显示部分和RS232串行输出接口组成,如图1所示。每个热敏电阻由单片机控制,经多路转换开关与电阻-脉宽转换电路相连,并被转换成与其阻值成正比的脉宽信号,单片机对脉宽信号进行测量,从而得到热敏
[单片机]
基于<font color='red'>单片机</font>的多点温度测量仪的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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