单片机控制的恒温箱的设计(9)
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
/******************************************************************
当主机总线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字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




