77范文网 - 专业文章范例文档资料分享平台

用单片机实现光照度的PID调节(5)

来源:网络收集 时间:2020-06-08 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

天津职业技术师范大学2010届本科生毕业设计(论文)

SBUF = len; // 发送长度 while(!TI); TI = 0; /* 发送数据 */ for(i=0; i

void delay10ms(unsigned int count) { unsigned int i, k; unsigned char j; unsigned int tmp; tmp = (int)((100*_MHZ_)/12); for(i=0; i

#endif

(2)从机部分

#include #include

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

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

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

天津职业技术师范大学2010届本科生毕业设计(论文)

#define __ERR_ 0xf0 // 数据传送错误

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

unsigned char recv_data(unsigned char *buf); // 接收数据 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; if(tmp=0x00) {

recv data (*buf); // 如果是广播地址,则直接接收数据 } RI = 0; } /* 发送应答信号,并做好接收数据的准备 */ TI = 0; TB8 = 0; SBUF = addr; while(!TI); TI = 0; SM2 = 0; // 允许接收数据信息 /* 数据接收 */

天津职业技术师范大学2010届本科生毕业设计(论文)

tmp = 0xff; while(tmp == 0xff) // 如果数据校验失败则重新接收数据 { tmp = recv_data(buf); // 校验失败返回0xff,检测到地址帧则返回0xfe,接收成功则返回0 } if(tmp == 0xfe) // 在数据接收过程中,如果发现地址帧,则重新开始整个接收过程 continue; } }

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

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

天津职业技术师范大学2010届本科生毕业设计(论文)

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

B光照度调节程序

(1) 主机部分

#include #include #include “reg51.h”

#define uchar unsigned char #define uint unsigned int sbit P2_6=P2^6

天津职业技术师范大学2010届本科生毕业设计(论文)

void init_serialcomm(void) {

SCON=0x50; TMOD=0x20; PCON=0x80; TH1=250; TL1=250; TR1=1; }

Void send_addr( unsigned char *buf) { /* 发送从机地址 */ TI = 0; TB8 = 1; // 发送地址帧 SBUF = addr; while(!TI); TI = 0;

If(tmp=ox00) {

Send data(buf); // 如果是广播地址,直接发送数据 } /* 接收从机应答 */ RI = 0; while(!RI); tmp = SBUF; RI = 0; }

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

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库用单片机实现光照度的PID调节(5)在线全文阅读。

用单片机实现光照度的PID调节(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/1099769.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: