| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #include "DS1802.h"
- #include "ABIS_User.h"
- //us级别延时函数1~20精度高20us,偏差1us
- void DelayUs(unsigned int Tmr)
- {
- unsigned char i;
- for(i=0;i<2;i++){
- asm("nop");
- asm("nop");
- asm("nop");
- }
- if(Tmr > 1){
- Tmr -= 1;
- for(;Tmr>0;Tmr--){
- for(i=0;i<3;i++){
- asm("nop");
- asm("nop");
- asm("nop");
- }
- asm("nop");
- }
- }
- }
- void Ds18WriteChar(unsigned char data) //向Ds18b20写函数
- {
- unsigned char i,temp;
- DQ_HIGH();
- DelayUs(3);
- for(i=8;i>0;i--){
- temp = data&0x01;
- DQ_LOW();
- DelayUs(20);
- if(temp == 1)DQ_HIGH();
- DelayUs(45);
- DQ_HIGH();
- data=data>>1;
- }
- }
- unsigned char Ds18ReadChar()
- {
- unsigned char i,data=0;
- for(i=8;i>0;i--){
- data=data>>1;
- DQ_HIGH();
- DelayUs(3);
- DQ_LOW();
- DelayUs(6);
- DQ_HIGH();
- DelayUs(4);
- if(DQ)data=data|0x80;
- DelayUs(30);
- }
- return (data);
- }
- void Ds18Start()
- {
- unsigned char i=10;
- DQ_HIGH();
- DelayUs(3);
- while(i){
- DQ_LOW();
- DelayUs(750); //延时750us
- DQ_HIGH();
- DelayUs(70); //延时70us
- if (DQ == 1)i--;
- else i = 0;
- DelayUs(500); //延时500us
- }
- }
- void Ds18Init()
- {
- Ds18Start();
- Ds18WriteChar(0xcc);
- Ds18WriteChar(0x4e);
- Ds18WriteChar(0x64);
- Ds18WriteChar(0x8a);
- }
- float DS18GetTemp()
- {
- unsigned char tl,th;
- float temp;
-
- Ds18Start();
- Ds18WriteChar(0xcc);
- Ds18WriteChar(0x44);
- Delay_ms(750); //暂时屏蔽
- Ds18Start();
- Ds18WriteChar(0xcc);
- Ds18WriteChar(0xbe);
- tl=Ds18ReadChar();
- th=Ds18ReadChar();
- Ds18Start();
-
- temp = th;
- temp*= 256;
- temp+= tl;
- temp*= 0.0625;
- return(temp);
- }
|