📄 1_wire_d.c
字号:
/********************************************************************************
* 描述: *
* 1-wire程序模块 *
* *
*******************************************************************************/
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#include<DEFINE.h>
/********************************************************************
函 数 名:delay()
功 能:延时25us
说 明:
调 用:
入口参数:
出口参数:
***********************************************************************/
void delay()
{
uchar i;
for(i=0;i<25;i++)
{;}
}
/********************************************************************
函 数 名:Delay_DS1990R (uint us)
功 能:延时
说 明:
调 用:
入口参数:uint us
出口参数:
***********************************************************************/
void Delay_DS1990R (uint us)
{
while (us--);
}
/********************************************************************
函 数 名:ow_reset()
功 能:复位DS1990A-F5
说 明:
调 用:
入口参数:
出口参数:bit presence
***********************************************************************/
bit ow_reset(void)
{
bit presence = 0;
DQ = 1;
DQ = 0;
Delay_DS1990R(80); /* 保持低电平480μs以上 */
DQ = 1;
Delay_DS1990R(14); /* 等待DS1990R响应 */
presence = DQ;
return presence;
}
/********************************************************************
函 数 名:read_bit()
功 能:从DS1990A-F5读取一位数据
说 明:
调 用:
入口参数:
出口参数:
***********************************************************************/
bit read_bit(void)
{
DQ = 0;
Delay_DS1990R(0); /* 保持低电平1us以上 */
DQ = 1;
if(DQ)
{
return 1;
}
else
{
return 0;
}
}
/********************************************************************
函 数 名:write_bit()
功 能:向DS1990A-F5写入一位数据
说 明:
调 用:
入口参数:uchar bitval
出口参数:
***********************************************************************/
void write_bit(uchar bitval)
{
DQ = 0;
Delay_DS1990R(0); /* 主机在大于1us小于15us之内写数据 */
if(bitval)
{
DQ = 1;
}
Delay_DS1990R(10); /* DS1990R在15us到60us内采样数据 */
DQ = 1;
}
/********************************************************************
函 数 名:read_byte
功 能:从DS1990A-F5读取一字节数据
说 明:
调 用:
入口参数:
出口参数:uchar value
***********************************************************************/
uchar read_byte(void)
{
uchar i;
uchar value = 0;
for (i = 0; i < 8; i++)
{
if(read_bit())
{
value |= (0x01<<i);
}
Delay_DS1990R(10); /* 读时序至少60us */
}
return(value);
}
/********************************************************************
函 数 名:write_byte()
功 能:向DS1990A-F5写入一字节数据
说 明:
调 用:
入口参数:uchar val
出口参数:
***********************************************************************/
void write_byte(uchar val)
{
uchar i;
uchar temp;
for (i = 0; i < 8; i++) /* 从LSB开始写入,每次写1位 */
{
temp = val>>i;
temp &= 0x01;
write_bit(temp);
}
}
char data ROM_Code[8]; /*存放从DS1990A-F5读取的8字节ROM码*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -