软件开发C8051F410驱动DS18B20源码
| 软件开发//DS18B20驱动程序 软件开发//温度范围:-55-125摄氏度 软件开发//C8051F410,外部晶振(22.1184MHz),DS18B20上拉4.7K,1脚GND,2脚DQ,3脚VCC。 //功能:调用ds18b20_get_tem()程序,读取温度整数,小数值及符号位 //格式:温度整数为10进制1至125,温度小数为十进制0至9,符号为位状态0或1。 //变量:温度整数dswendu,温度小数dsxiao,符号DSWDFH。 #include "intrins.h" //_nop_();延时函数用 #define uchar unsigned char #define uint unsigned int sbit DQ=P1^5; //#define DQHIN (P1MDOUT&=~0x20;P0 |= 0x01;) //#define DQ RC1 //#define DQH TRISC1=1;//DS18B20定义为高电平并设置为输入端 //#define DQL TRISC1=0;//DS18B20定义为低电平并设置为输出端 uchar dswendu,dsxiao; bit DSWDFH; void delay_18b20(uint x) //18B20延时程序 {while(x--);} void ds18b20_reset()//18B20复位程序 {//C8051F410,22.1184外部晶振 uchar st=1;//状态位置1 DQ=1;//总线高 while(st) { DQ=0; delay_18b20(600); //需要延时480us-960us DQ=1; delay_18b20(50); //需要延时15us-60us if(DQ==1)//等待时间约为240us-420us st=1; else st=0; } DQ=1; delay_18b20(300);//100需要延时60us-240us } void ds18b20_write_byte(uchar dat)//18B20写一个字节 { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; delay_18b20(100); DQ = 1; dat>>=1; } } uchar ds18b20_read_byte()//18B20读一个字节 { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay_18b20(80); } |

芯片解密