教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

单片机控制的恒温箱的设计(9)

来源:网络收集 时间:2026-08-26
导读: T_SCLK = 0; ACC = ACC >> 1; } } /**************从DS1302读取一字节数据,返回读到的数据****************************/ uchar DS1302_Output_Byte(void) { uchar i; for(i=8; i>0; i--) { ACC>>=1; T_DIO= 1; AC

T_SCLK = 0; ACC = ACC >> 1; } }

/**************从DS1302读取一字节数据,返回读到的数据****************************/

uchar DS1302_Output_Byte(void) {

uchar i; for(i=8; i>0; i--) {

ACC>>=1; T_DIO= 1; ACC_7 = T_DIO;

T_SCLK = 1; T_SCLK = 0; }

return(ACC); }

/**************

DS1302

*******************************/

void DS1302_Write_one( uchar addr,dat ) {

T_CE=0; 送中止

T_SCLK=0; T_CE = 1; 有效

DS1302_Input_Byte(addr); 定的地

址写

入数据

// 写入地址、数据子程序 //T_CE引脚为低,数据传 //清零时钟总线

//T_CE引脚为高,逻辑控制 // 地址,命令

DS1302_Input_Byte(dat); // 写1Byte数据 T_SCLK = 1; T_CE = 0; }

//************从DS1302指定的地址读取数据,返回读到的数据*******************************/

uchar DS1302_Read ( uchar addr ) //数据读取子程序 {

uchar date;

T_CE=0; T_SCLK=0; T_CE = 1;

DS1302_Input_Byte(addr); // 地址,命令 date = DS1302_Output_Byte(); // 读1Byte数据 T_SCLK = 1; T_CE = 0; return(date); }

//************

DS1302

****************************************************/

void DS1302_Write( uchar sec_w,min_w,hour_w) { DS1302_Write_one(0x8e,0x00);//使能数据写入 DS1302_Write_one(0x80,sec_w);//写入秒 DS1302_Write_one(0x82,min_w);//写入分 DS1302_Write_one(0x84,hour_w);//写入时 DS1302_Write_one(0x8e,0x80);//禁止写入数据

}

/************从DS1302读取时间数据

**********************************************************/

void DS1302_readtime() {

miao=DS1302_Read(0x81); //读秒 fen=DS1302_Read(0x83); //读分 shi=DS1302_Read(0x85); //读时 }

6.6. 温度传感器程序

#include \#include \#define uchar unsigned char #define uint unsigned int

#include #include sbit DQ=P3^0;

/******************************************************************

当主机总线t0时刻从高拉至低电平时就产生写时间隙 从to 时刻开始的1us之后,15us之前将所需写的位送到总线上

DSl820 在t0后的15-60us 对总线采样若低电平写入的位是0 ,若高电平写入的位是1

连续写2 个位之间的间隙应大于1us

写1,总时间大于60us,在t0开始延时1us就可以写1,15us之后ic来采样,采样时间最大45us

写0,总时间是60~120us,15~60us是ic在采样,120以外就没必要了,mcu总得

释放总线吧

不管写1还是写0,大于60us的话,ic肯定已经采样完成了,那mcu就可以释放了

*******************************************************************/

void ds18b20_writeByte(uchar dat) //mcu向ic写一个字节 {

uchar i; uchar tmep=dat; for(i=0;i<8;i++) {

DQ=0; //产生读写时序的起始信号 _nop_(); //要求至少1us的延时 DQ=dat & 0x01; //对总线赋值,从最低位开始写起

delayXus(10);//延时74us,写0在60~120us之间释放,写1的话大于60us均可释放

DQ=1; //释放总线,为下一次mcu送数据做准备, dat>>=1; //有效数据移动到最低位,2次写数据间隙至少需1us } }

/**************************************************************************

下降沿产生读时序

整个读时序必须至少有60us的持续时间,相邻两个读时序必须要有至少1us的恢复时间

DS18B20在读时序产生1us后输出数据到总线上,也有可能需要2~3个微秒,但不会更多

而要求主机释放总线和采样总线等动作要在15μs内完成,那么让mcu采样的最佳时机

是读时序产生后的5~13us之间,在15~60us这段时间是18b20的私有时间,它会在这段

时间内的任意时刻释放总线,是不稳定期,我们不要让mcu在这段时间里对总线操作

*******************************************************/ uchar ds18b20_readByte() //mcu读一个字节 {

uchar i,value=0; for(i=0;i<8;i++) {

DQ=0; //起始信号

value>>=1; //顺便延时3~4个机器周期 DQ=1; //mcu释放总线 _nop_();_nop_();_nop_(); //再延时3.3us if(DQ) {

value|=0x80;//保存高电平数据,低电平的话不用保存,移位后默认是0

}

delayXus(8); //延时60.76us }

return value; }

uint ds18b20_readTemperaData() //读取温度值 {

uint temp=0; if(ds18b20_init()) {

…… 此处隐藏:1037字,全部文档内容请下载后查看。喜欢就下载吧 ……
单片机控制的恒温箱的设计(9).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/444099.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)