📄 1820.c
字号:
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
#define DQ RC0
char buffer1[2];//the resut of temperature read from 18b20
char buffer;
unsigned int i,n;
void ini_io();
void write_1();
void write_0();
uchar read_18b20();
void write_18b20(uchar);
void handle_temperature();
void read_temperature();
void reset_18b20();
void delay_us(uchar t);//delay (t*3+7)us
/***************************/
void ini_io()
{
TRISB=0;
TRISC=0x01;
}
/********************/
void write_0()
{
TRISC = 0x01;asm("nop");
TRISC=0;asm("nop");
DQ=0;
delay_us(18);
TRISC=0x01;
asm("nop");asm("nop");
}
/*************************/
void write_1()
{
TRISC = 0x01;asm("nop");
TRISC=0;asm("nop");
DQ=0;
delay_us(1);
TRISC = 0x01 ;
delay_us(20);
}
/**************************/
void reset_pulse()
{
TRISC=0;asm("nop");
DQ = 0;
delay_us(165); //精确延时大于480us
TRISC=0x01;
delay_us(10);
while(DQ==1);
delay_us(26); //延时70us
}
/***************************/
void write_18b20(uchar qq)
{
for(i=0;i<8;i++)
{
if((qq&0x1)==1)
write_1();
else
write_0();
qq=qq>>1;
}
}
/***************************/
uchar read_18b20()
{
uchar date,tt;
TRISC = 0x01;asm("nop");
for(tt=8;tt>0;tt--)
{
date>>=1;
TRISC=0;asm("nop");
DQ=0;
delay_us(1);
asm("nop");asm("nop");asm("nop");asm("nop");
TRISC = 0x01;asm("nop");
asm("nop");asm("nop"); asm("nop");asm("nop");
if (DQ==1) date|=0x80;
delay_us(20);
}
return date;
}
/***********************/
void read_temperature()
{
buffer=0xcc;
write_18b20(buffer);
buffer=0xbe;//read scratchpad
write_18b20(buffer);
buffer1[0]=read_18b20();//the TL
buffer1[1]=read_18b20();//the TH
buffer=((buffer1[0]&0xf0)>>4)|((buffer1[1]&0x0f)<<4);
}
/******************/
void delay_us( uchar j) //精确延时3j+7个时钟周期
{ //注意j的值不能大于255
unsigned char i;
i = j;
while(--i)
{
;
}
}
/*************************/
void main()
{
ini_io();
while(1)
{
reset_pulse();
buffer=0xcc;//skip rom
write_18b20(buffer);
buffer=0x44; //start convert
write_18b20(buffer);
reset_pulse();
read_temperature();
PORTB=buffer;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -