📄 ds1820.c
字号:
/****************************************************************************
【文 件 名 称】main.c
【功 能 描 述】MCS3C2410A板DS1820温度测试
【程 序 版 本】0.0
【创建人及创建日期】孙俊军//2007年10月5日
****************************************************************************/
#include "def.h"
#include "2410addr.h"
#include "config.h"
#include "board.h"
#include "utils.h"
//位操作函数
unsigned char a,b;
#define rPDATC rGPCDAT
#define bitset(a,b) (a|=(1<<b)) //置位:
#define bitclr(a,b) (a&=~(1<<b)) //清零:
#define bitcpl(a,b) (a^=(1<<b)) //取反:
#define bittest(a,b) ((a>>b&0x01)==1)?1:0 //测试指定位1:
//*********************** **空跑时间一微秒**************************//
void sysUtilsUSecDelay(U32 t)
{
int ls=32;
U32 k=0;
for(;k<t;k++)
{
while(ls--);
ls=32;
}
}
//*****************************初始化程序 *********************************//
void Init_DS18B20(void)
{
int x=0;
bitset(rPDATC,0); //DQ先置高
sysUtilsUSecDelay(70); //稍延时
bitclr(rPDATC,0); //发送复位脉冲
sysUtilsUSecDelay(880); //延时(>480us)
bitset(rPDATC,0); //拉高数据线
rGPCCON = 0x00000000;
sysUtilsUSecDelay(50); //等待(15~60us)
x=bittest(rPDATC,0); //用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1
//printf("初始化是否成功:%d\n",x);
sysUtilsUSecDelay(200);
rGPCCON = 0x55555555;
}
//**********读一个字节************//
unsigned char ReadOneChar(void) //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
{
int i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
unsigned char dat=0;
for (i=8;i>0;i--) //一个字节有8位
{
bitset(rPDATC,0);
sysUtilsUSecDelay(24);
bitclr(rPDATC,0);
sysUtilsUSecDelay(8); //>1us
bitset(rPDATC,0);
sysUtilsUSecDelay(10);
dat>>=1;
rGPCCON = 0x00000000;
if(bittest(rPDATC,0))dat|=0x80;
sysUtilsUSecDelay(70);
rGPCCON = 0x55555555;
}
return(dat);
}
//*********************** **写一个字节**************************//
void WriteOneChar(unsigned char dat)
{
unsigned char i=0; //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,
rGPCCON = 0x55555555;
for(i=8;i>0;i--) //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。
{
bitclr(rPDATC,0); //在开始另一个写周期前必须有1us以上的高电平恢复期。
sysUtilsUSecDelay(10); //>1us
if(bittest(dat,0))
bitset(rPDATC,0);
else
bitclr(rPDATC,0);
sysUtilsUSecDelay(100);
bitset(rPDATC,0);
sysUtilsUSecDelay(10); //>1us
dat>>=1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -