⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 18b20._c

📁 结合温度传感器的实现测温度的C程序 这个小项目用到了比较多的AVR单片机的资源 是个不错的学习例程
💻 _C
字号:
#include <io8515v.h>
#include <macros.h>
#include <162-1302.h>
//时间延迟
void delayb(uint x)                //1.5us左右 
{ 
     while(x) 
    { 
       x--; 
    } 
} 
//18b20初始化
uchar init_1820() 
{   uchar ack;
    B20_DATA_DDR|=B20_DATA_IO ;                   //输出   
    B20_DATA_PORT&=~B20_DATA_IO ; 
    delayb(600);                   //复位低电平480us~960us
    B20_DATA_PORT|=B20_DATA_IO ;                  //电平拉高
	B20_DATA_DDR&=~B20_DATA_IO ;                    //输入
	delayb(90);                    //延时60us~240us
	ack=B20_DATA_PIN;                     //读出ack的值
	ack&=B20_DATA_IO; 
	delayb(200);                   //等待480us以上
	B20_DATA_DDR|=B20_DATA_IO ;                   //输出   
	return(ack);
} 
//写一个字节
void write_1820(uchar x) 
{    
    uchar i,m;
	B20_DATA_DDR|=B20_DATA_IO;   //输出 
    for(i=0;i<8;i++) 
    {  
	   m=x&0x01;                       
	   if(m==0x01)
	   {
	    delayb(1);                        //延时>1us
       	B20_DATA_PORT&=~B20_DATA_IO;    //产生写起始信号
	   	delayb(3);                       //延时1us~15us  8us
	   	B20_DATA_PORT|=B20_DATA_IO;     //数据线电平拉高
	   	delayb(55);                     //延时60us~120us  85us
	   }
	   else
	   {
	    delayb(1);                        //延时>1us
       	B20_DATA_PORT&=~B20_DATA_IO;     //产生写起始信号
       	delayb(55);                      //B20采样要60us到120us  85us
       	B20_DATA_PORT|=B20_DATA_IO;      //数据线电平拉高
       }
	   x=x>>1;                          //右移一位
	} 
} 
//读一个字节
uchar read_1820() 
{     
    uchar temp,k,n; 
       temp=0; 
    for(n=0;n<8;n++) 
       { 
	  B20_DATA_DDR|=B20_DATA_IO;         //输出 
      B20_DATA_PORT&=~B20_DATA_IO;               //产生读起始信号
      asm("nop");
	  asm("nop");
	  asm("nop");
	  asm("nop");                        //延时1us~15us  2us
      B20_DATA_PORT|=B20_DATA_IO;        //电平拉高    
      B20_DATA_DDR&=~B20_DATA_IO;        //接收数据
	  asm("nop");                      //要在15us内完成读数
	  asm("nop");      
      k=B20_DATA_PIN;     //读数据,从低位开始 
	  k&=0x01;
      if(k) 
      temp|=(1<<n); 
      else 
      temp&=~(1<<n); 
      delay(40);                          //60~120us   
	  B20_DATA_DDR|=B20_DATA_IO;          //输出
      B20_DATA_PORT|=B20_DATA_IO; 
   } 
   return temp; 
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -