📄 1-wire.c
字号:
//-----------------------函数声明,变量定义--------------------------------------------------------
#include <reg51.h>
sbit DQ=P1^0; // 将p1.0口模拟时钟输出
//--------------------------------------------------------------------------------------------------
// 函数名称: delay
// 入口参数: N
// 函数功能:延时子程序,实现(16*N+24)us的延时
// 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动
//--------------------------------------------------------------------------------------------------
void delay(unsigned int N)
{
int i;
for(i=0;i<N;i++);
}
//--------------------------------------------------------------------------------------------------
// 函数名称: Reset
// 入口参数: 无
// 返回deceive_ready
// 函数功能:复位
//--------------------------------------------------------------------------------------------------
unsigned char Reset(void)
{
unsigned char deceive_ready;
DQ=0; //拉低DQ线
delay(29); //延时至少480us~960us
DQ=1; //将DQ线设置位逻辑高
delay(3); //延时等待deceive_ready响应
deceive_ready=DQ; //采样deceive_ready信号
delay(25); //等待时序结束
return(deceive_ready); //有deceive_ready信号时返回0,否则返回1
}
//--------------------------------------------------------------------------------------------------
// 函数名称:read_bit
// 入口参数: 无
// 返回接收的数据
// 函数功能:读一个bit子程序
//--------------------------------------------------------------------------------------------------
unsigned char read_bit(void)
{
unsigned char i;
DQ=0; //拉低DQ线开始时序
DQ=1; //升高DQ线 //延时至时序开始15us
for(i=0;i<3;i++); //延时15us
return(DQ); //返回DQ值
}
//--------------------------------------------------------------------------------------------------
// 函数名称: write_bit
// 入口参数: bitval
// 函数功能:写一个bit子程序
//--------------------------------------------------------------------------------------------------
void write_bit(unsigned char bitval)
{
DQ=0; //拉低DQ线开始时序
if(bitval==1)
DQ=1; //如果写逻辑为高
delay(5); //延时
DQ=1; //升高DQ线
}
//--------------------------------------------------------------------------------------------------
// 函数名称: write_byte
// 入口参数: val
// 函数功能:写一个byte子程序
//--------------------------------------------------------------------------------------------------
void write_byte(unsigned char val)
{
unsigned char i,temp;
for(i=0;i<8;i++)
{
temp=val>>i; //将val位右移i位赋值给比temp
temp=temp&0x01; //取temp最低位
write_bit(temp);
delay(5); //延时至时序结束
}
}
//--------------------------------------------------------------------------------------------------
// 函数名称: read_byte
// 返回接收的数据 value
// 函数功能:读一个byte子程序
//--------------------------------------------------------------------------------------------------
unsigned char read_byte(void)
{unsigned char i,m,receive_data;
m=1;receive_data=0; //初始化
for(i=0;i<8;i++)
{
if(read_bit())
{
receive_data=receive_data+(m<<i);
} //每读一位数据据,左移一位
delay(6); //延时至时序结束
}
return(receive_data); //返回value
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -