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

📄 1_wire_d.c

📁 通过键盘输入电子密码锁密码
💻 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 + -