历史上的今天
返回首页

历史上的今天

今天是:2025年01月09日(星期四)

正在发生

2018年01月09日 | 单片机双机点对点通信的主机程序

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


推荐阅读

史海拾趣

Cal-Chip Electronics公司的发展小趣事

为了进一步提升竞争力,Cal-Chip Electronics公司在XXXX年开始实施产业链整合战略。公司通过与上游原材料供应商和下游终端制造商建立紧密的合作关系,实现了产业链的协同发展和资源共享。这一战略不仅降低了公司的运营成本,也提高了产品的质量和生产效率。同时,公司还积极参与行业标准的制定和推广,推动了整个行业的健康发展。

Goldstar Electron Co Ltd公司的发展小趣事

随着公司实力的不断增强,Cal-Chip Electronics公司开始将目光投向国际市场。在XXXX年,公司成功开拓了欧洲市场,并在当地设立了分支机构。随后,公司又陆续进入北美、亚洲等多个国家和地区,实现了业务的全球化布局。在国际市场的拓展过程中,公司不仅提升了品牌知名度,也积累了丰富的国际运营经验。

Amidon Associates Inc公司的发展小趣事

Cal-Chip Electronics公司的创始人[创始人姓名]在XXXX年怀揣着对电子技术的热爱和对市场需求的敏锐洞察,决定创立这家公司。初期,公司面临着资金短缺、人才匮乏和技术难题等多重挑战。然而,[创始人姓名]凭借坚定的信念和不懈的努力,成功吸引了第一批投资者,并组建了一支由行业精英组成的核心团队。通过不断的技术研发和市场调研,公司逐渐在半导体芯片领域站稳了脚跟。

Dantona Industries公司的发展小趣事

Dantona Industries公司的创始人,Daniel Tona,在电子工程领域拥有深厚的背景。他看到了电子行业的巨大潜力,决定创立自己的公司。起初,他只有一间小办公室和几个志同道合的伙伴。为了节省成本,他们经常需要亲自采购材料、组装产品,甚至进行市场推广。在这个过程中,他们遇到了资金短缺、技术难题以及市场竞争等多重挑战。然而,凭借对技术的执着和对市场的敏锐洞察力,Daniel Tona带领团队一步步克服困难,逐渐在电子行业站稳了脚跟。

Hewlett Packard Co公司的发展小趣事
合理布线以减少信号干扰和噪声影响,提高音质表现。
科通(COMTEK)公司的发展小趣事

在多年的努力下,科通技术逐渐成长为一家具有影响力的电子企业。为了进一步提升公司的竞争力和市场地位,科通技术积极筹备IPO上市。虽然公司在上市过程中遇到了一些波折和挑战,但最终成功实现了上市目标。未来,科通技术将继续坚持创新驱动、市场导向的发展战略,不断提升自身的核心竞争力,为客户提供更加优质的产品和服务。

请注意,由于篇幅限制,上述故事仅为简要概括,并未涵盖所有细节。同时,由于信息来源的不确定性,部分故事可能无法完全还原真实情况。

问答坊 | AI 解惑

matlab基本模块开始

matlab建立基本模块,然后simulink仿真!…

查看全部问答>

【Quartus告警信息】之违反了steup/hold时间

Found clock high time violation at 14.8 ns on register \"|counter|lpm_counter:count1_rtl_0|dffs[11]\"原因:违反了steup/hold时间,应该是后仿真,看看波形设置是否和时钟沿符合steup/hold时间措施:在中间加个寄存器可能可以解决问题…

查看全部问答>

T9输入法wince移植问题

大家好,最近想要把T9输入法移植到wince4.2平台上去,不知该怎么去做,输入法网上有很多源代码,但不知道是不是可用 好用适合wince4.2平台,不知大家有做过这方面工作的吗?请大侠给与指导和帮助。谢谢!!!…

查看全部问答>

请教关于MAX485的用法

最近又看了遍485芯片的原理 发现这款芯片是自环的 即发送的数据也到了收端 之前我使用时 发送时候是 TI=RI=1 即禁止了RI 接收的时候 TI=RI=0 即禁止了TI 因为我试过TI=1 RI=0 好像不行(年代比较久远了) 但是今天有人问我 TI=1 RI=0 可以自环的 ...…

查看全部问答>

有关在Smart Device环境下,在CView中放入CListCtrl控件的的问题

开发的环境:VS2005 Smart Device MFC 问题:目前我在我的一个CView里 放入了CEdit,CListCtrl等控件,我想在CEidt控件的Text不为空的时候的 (GetWindowText()),就在我的CEdit的下方出现ClistCtrl控件响应的会出现,比方CEdit的第一个字符为0,在 ...…

查看全部问答>

求助:WINCE6.0 导出SDK时,在SDK属性页中无法配置Emulation中的设置

Clone了Device Emulator,做了一个OS,导出SDK时,在SDK属性页中无法配置Emulation中的设置。这样在应用中就无法启动设备访真…

查看全部问答>

哪有keil c51序列号???

从网上下的keil c51安装时,提示要输入序列号,哪位老兄有序列号,或是不要序列号的安装版?????…

查看全部问答>

创新技术为声纹鉴定提供实用系统

“声纹鉴定与自动识别技术研究”项目是由公安部物证鉴定中心等单位完成,其主要研究成果是将声纹自动识别功能植入VS99语音工作站,该系统能对说话人特征进行自动分析、判断和语图显示及测量,并可结合专家鉴定以确定说话人身份,适合于法庭科学实际 ...…

查看全部问答>

STR7应用笔记目录,欢迎免费下载

《AN2441 - 在STR71x上使用低成本的振荡器》  发表于 2007年4月  新笔记        意法半导体的STR71x微控制器需要在CK脚上连接一个外部的振荡器。一个最直接的办 ...…

查看全部问答>

TI zigbee技术支持

本人有3年zigbee产品开发经验,精通ti的z-stack协议栈的应用,如低功耗,网络问题,如有需要联系QQ345364966,同时承接各种zigbee产品开发工程,有需要的也联系!…

查看全部问答>