为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

51C语言程序集合串口

2017-11-08 10页 doc 23KB 12阅读

用户头像

is_852287

暂无简介

举报
51C语言程序集合串口51C语言程序集合串口 无情未必真豪杰,怜子如何不丈夫。关关雎鸠,在河之洲。窈窕淑女,君子好逑。 人有悲欢离合,月有阴晴圆缺。不去庆父,鲁难未已。青青子衿,悠悠我心。#include #include #include #define uchar unsigned char #define uint unsigned int /*通信发送成功标志*/ #define __ERR_ 0xF0 #define __SUCC_ 0x0F /*全局变量*/ uchar buf[2]; //接收和发送数据缓冲...
51C语言程序集合串口
51C语言程序集合串口 无情未必真豪杰,怜子如何不丈夫。关关雎鸠,在河之洲。窈窕淑女,君子好逑。 人有悲欢离合,月有阴晴圆缺。不去庆父,鲁难未已。青青子衿,悠悠我心。#include #include #include #define uchar unsigned char #define uint unsigned int /*通信发送成功标志*/ #define __ERR_ 0xF0 #define __SUCC_ 0x0F /*全局变量*/ uchar buf[2]; //接收和发送数据缓冲区 uchar time_over; uchar over_times; void init_serial(); //串口初始化 uchar make_datapac(uchar detect,uchar command); void host_to_slave(uchar slave_addr,uchar data_len); void send_data(uchar data_len); uchar recv_data(); /* 初始化串口 */ void init_serial() { TMOD = 0x21; //定时器T1使用工作方式2,定时器T0使用工作方式1 TH0=0x3C; TL0=0xB0; TH1 = 0XE8; // 设置初值 TL1 = 0XE8; TR1 = 1; // 开始计时 PCON = 0x80; // SMOD = 1 SCON = 0xd0; //工作方式3,9位数据位,波特率4800bps,允许接收 ET0=1; EA=1; } /*********************************************************************** ***************************/ /********************通信相关函 数****************************************************************/ /*********************************************************************** ****************************/ /*生成数据包,参数1为检测种类,参数2为命令种类*/ uchar make_datapac(uchar detect,uchar command) { *buf=(((0x00|detect)<<2)|command); //数据的第一个字节,第四位和第三位为检测种类,最低两位为命令种类 if((command==ASK)||(command==CANCEL_ALARM)) //如果是询问指令,数据长度为1 { return 1; } else if(command==INSTALL) //如果是设置指令,数据长度为2,第二个字节是点滴速度 { buf[1]=host_bit_rate; return 2; } } /*主机与从机通信函数,参数有从机地址,数据长度,数据内容保存于全局变量buf中*/ void host_to_slave(uchar slave_addr,uchar data_len) { uchar tmp; uchar command=(*buf)&0x03; CLEARSCREEN; writerow(2,"呼叫中... "); if(detect_type!=QUICK_SCAN) { play(52,3); //呼叫slave_addr号从站 playnum(slave_addr); play(56,2); play(59,3); } /* 发送地址帧并接收应答信息,如果接收的信号与发送的地址信息不同,则重新发送地址帧 */ tmp = slave_addr-1; over_times=0; while(tmp != slave_addr) { /* 发送从机地址 */ TI = 0; TB8 = 1; // 发送地址帧 SBUF = slave_addr; while(!TI); TI = 0; 接收从机应答 */ /* RI = 0; time_over=0; TR0=1; while((!RI)&&(!time_over)); TR0=0; TH0=0x3C; TL0=0xB0; if(over_times>=50) { return; } if(time_over==1) //如果超时,没有检测到从机信号,重新 发 { continue; } tmp = SBUF; RI = 0; } /* 发送数据并接收校验信息,如果接收的信号为0FH,表示从机接 收成功,否则将‎‎重新发送该组数据 */ tmp = __ERR_; while(tmp != __SUCC_) { delay1ms(5); send_data(data_len); // 发送数据 RI = 0; //等待从机发送校验信号 while(!RI); tmp = SBUF; RI = 0; } if(command==ASK) { /* 数据接收 */ tmp = 0xff; while(tmp == 0xff) // 如果数据校验失败则重新接收数据 { tmp = recv_data(); // 校验失败返回0xff,接收成功则 返回0 } } CLEARSCREEN; writerow(1,"通信完毕 "); delay1ms(100); } /* 发送数据 */ void send_data(uchar data_len) { uchar ecc; // 保存校验字节 uint i; ecc = data_len; // 开始进行校验字节计算 /* 发送数据长度 */ s(5); delay1m TI = 0; TB8 = 0; // 发送数据帧 SBUF = data_len; // 发送长度 while(!TI); TI = 0; /* 发送数据 */ for(i=0; i
/
本文档为【51C语言程序集合串口】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索