51单片机以定时中断的方法实现DS18B20时序.pdf

51单片机以定时中断的方法实现DS18B20时序.pdf

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
51单片机以定时中断的方法实现DS18B20时序

51 单片机以定时中断的方法实现 DS18B20 时序 原载于: /tyshtang/article/details/9872701 由于DS18B20 是单线操作,所以必须严格遵守它的时序要求才能正常与之建立联系并实现 读写操作。 网上见到的程序多是在主程序中以延时的方式实现,而且要求关中断,以实现18B20 对 时序的要求。但是实际应用中,测温操作一般是作为辅助功能,主要任务是通信及数据处理 等其他操作,这样一来,如果将DS18B20 的程序代码放在主程序中,势必影响其他需要实 时处理的中断。 前些天用到DS18B20,就尝试以51 定时中断的方法实现DS18B20 时序,在面包板上 成功跑了起来。 用的单片机是STC11F16XE,使用外部晶振24MHz 。下面的程序中不仅有DS18B20 的操 作,还包含了数码管显示、按键检测、EEPROM 的操作。定时器T1 专门用于DS18B20 时序产生,定时器T0 用于按键检测、数码管显示,主函数中做EEPROM 及其他的操作。 程序中有些注释是调试过程中加的,并且有些代码部分在调试中修改过,先前的注释并没有 同时删去,所以看下面的代码的时候,不要被注释误导了。 代码如下: #include REG51.H #include INTRINS.H typedef unsigned char BYTE; typedef unsigned int WORD; sfr P1M0 = 0x92; // sfr P1M1 = 0x91; // sfr P3M0 = 0xB2; sfr P3M1 = 0xB1; sfr P2M0 = 0x96; sfr P2M1 = 0x95; /*sfr associated with the IAP*/ sfr IAP_DATA = 0xc2; sfr IAP_ADDRH = 0xc3; sfr IAP_ADDRL = 0xc4; sfr IAP_CMD = 0xc5; sfr IAP_TRIG = 0xc6; sfr IAP_CONTR = 0xc7; /*ISP/IAP/EEPROM command*/ #define CMD_IDLE 0 #define CMD_READ 1 #define CMD_PROGRAM 2 #define CMD_ERASE 3 #define ENABLE_IAP 0x80 //if SYSCLK30MHz //#define ENABLE_IAP 0x81//if SYSCLK24MHz //start address for STC11/10xx series EEPROM #define IAP_ADDRESS0x0000 void Delay(BYTE N); void IapIdle(); BYTE IapReadByte(WORD addr); void IapProgramByte(WORD addr, BYTE val); void IapEraseSector(WORD addr); #define MINUTE 8400 //60*140=8400 interrupts per minute #define DAY3S 4320 //there are 72*60*8400=4320*8400 interrupts in 72 hours // sbit shi = P3^7; sbit ge = P3^2; //sbit led = P1^5; sbit key1 = P3^3; sbit key2 = P3^4; sbit key3 = P3^5; sbit heat = P2^7; sbit water = P2^5; sbit beep = P2^0; unsigned char code digit[11] ={ 0xbf,//0 0x83,//1 0xed,//2 0xeb,//3 0xd3,//4 0xfa,//5 0xfe,//6 0xa3,//7 0xff,//8 0xfb,//9 0xc0//nfinished }; unsigned char code cmd[4] = {0xcc,0x44,0xcc,0xbe}; unsigned int cmd_n; bit nodevice,cunz; unsigned char saom; unsigned int num,t1_num; unsigned char temp,led; unsigned int jiaoshui,jiaoshui_t,jiaos

文档评论(0)

ranfand + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档