?? 18b20._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 + -