I-wire总线(单总线)读写51程序

发布者:zhuanshi最新更新时间:2015-10-08 来源: eefocus关键字:I-wire总线  单总线  51程序 手机看文章 扫描二维码
随时随地手机看文章
//-----------------------函数声明,变量定义--------------------------------------------------------

#include
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
  }
//--------------------------------------------------------------------------------------------------
// 函数名称: 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<    }                                            //每读一位数据据,左移一位 
  delay(6);                                    //延时至时序结束

return(receive_data);                           //返回value
}

关键字:I-wire总线  单总线  51程序 引用地址:I-wire总线(单总线)读写51程序

上一篇:SPI总线读写程序-51
下一篇:C51单片机模拟I2C总线驱动程序设计(1)

推荐阅读最新更新时间:2024-03-16 14:34

SLE4442卡_IC的51单片机驱动程序
整理了最初的实验草稿版,将端口宏定义,函数声明以及常用的函数声明建立头文件,感觉清楚多了,在不断地修改中凝练,在不停的实践中提高,满眼的思绪,在小小的Readme中划过一笔~~~~~~~~ char data_RST , ErrorCount ; void IC_RST(void) { uchar value,i,count; DATA_IN; //IC输入 RST_LOW; //复位时序 CLK_LOW; DATA_HIGH; DelayUs(5); RST_HIGH; DelayUs(5); CLK_HIGH; DelayUs(5); CLK_LOW; DelayUs(5); RST_LOW; DelayUs(2); for(
[单片机]
HX1838红外无线遥控模块51单片机程序
红外无线模块: 1.硬件:红外接收器+遥控器 2.连接方式:接收器的+、-分别连接在单片机的VCC、GND上面,S为信号输出端连接在单片机的IO口上面(例程里面连接在了P3^2引脚) 3.遥控器上面每一个按键对应的键码值已经在程序中给出,程序的内容是用遥控器控制单片机上面的流水灯 单片机源程序如下: #include reg52.h //包含单片机寄存器的头文件 #include intrins.h //包含_nop_()函数定义的头文件 #define uchar unsigned char #define uint unsigned int sbit IRIN=P3^2; //红外接收器数据线 sb
[单片机]
HX1838红外无线遥控模块<font color='red'>51</font>单片机<font color='red'>程序</font>
51单片机复习程序例举004--HD44780控制的1602LCD
1、在HD44780控制的1602LCD的显示屏上显示两条字符串 和 两个用户自定义的字符 /****************************************************************************** * 说明:AT89S52芯片,12M晶振 * 外设:HD44780控制的1602LCD:两行显示,每行最多显示40个预显示字符中的16个字符 * 11条控制指令 * 本程序:在HD44780控制的1602LCD上显示2行字符串,按键K1,显示一个用户自定义字符 * 循环按键,循环显示 ***************************
[单片机]
51单片机双机通信硬件电路图及C程序
双机通信的硬件电路 需要注意的是,两单片机要保证正确通信,主机的RXD连接从机的TXD,从机的RXD连接主机的TXD。 双机通信C语言程序 (1)主机程序 #include #include #define _READY_ 0x06//主机握手信号 #define _BUSY_ 0x15//从机忙应答 #define_OK_ 0x00//从机准备好 #define _SUCC_ 0x0f//数据传送成功 #define _ERR_ 0xf0//数据传送失败 unsigned charTable ={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; unsigned char Bu
[单片机]
<font color='red'>51</font>单片机双机通信硬件电路图及C<font color='red'>程序</font>
初学51单片机——简单的流水灯程序
#include reg52.h #include intrins.h //调用库函数 #define uint unsigned int #define uchar unsigned char void delay(uint);//延时函数 uchar a,b; void main() { a=0xfe; while(1) { P1=a; delay(500); a=_crol_(a,1);//利用库函数实现流水灯的左移 } } void delay(uint z) { uint i,j; for(i=z;i 0;i--) for(j=110;j 0;j--); }
[单片机]
51单片机-最终按键程序
1.代码及解析 我们先贴出代码,下面再进行解析原理 u8 KEY_Scan(u8 mode,u16 TIMES) { static u8 key_up=1; //按键松开标志 static u16 times; if(mode)key_up=1; //如果mode等于1,支持连按 if(key_up&&(KEY4==0||KEY8==0||KEY12==0||KEY16==0))//只要在key_up等于1时,其中一个按键被按下就可以进入执行代码 { times++; //记录进入低电平的时间 if(times =TIMES)//抖动的时间已经过去 {
[单片机]
DS18B20单总线数据传输
  纯单片机干不了大事,必须得配上各种外设,那么了解单片机与传感器之间的数据通信就显得必不可少了。常见的单片机数据通信方式有SPI,IIC,RS232,单总线等等。每种通信方式都有相应的时序图,分析时序图并完成代码的编写是单片机学习者的必修课。本文以DS18B20为例分析一下单总线数据传输。   DS18B20是单总线数据传输,因此对于时序的要求就非常的高,学会分析其时序图是非常有必要的。   1.初始化时序图分析:   首先是由总线控制器拉低总线,维持480us。在480us后释放总线,由上拉电阻讲总线拉高。等待5-60us后,DS18B20开始响应,会将数据总线拉低60-240us.之后便释放总线,由上拉电阻拉高总线
[单片机]
DS18B20<font color='red'>单总线</font>数据传输
基于Small RTOS51的PS/2键盘驱动程序开发
引言   随着嵌入式系统的发展,嵌入式软件设计向软件平台靠近,单片机软件设计不再是单一线程结构方式,而是逐步采用多任务的设计思想。实时操作系统使得实时应用程序的设计、扩展和维护变得更容易,无需大的改动就可以增加新的功能。然而随着任务的增加,要求输入的数据也会增加,类型也呈多样化。如果仍然用矩阵式扫描键盘,势必浪费单片机巨大的资源,且增加了成本。若用PC机标准PS/2键盘取而代之,将可解决以上矛盾。本文介绍基于实时操作系统Small RTOS51的PS/2键盘驱动程序的设计,具有响应快,移植性强,占用资源少等优点。 1 驱动的设计   驱动的实现一般可用以下几种方法:① 使用任务编写;② 使用消息编写;③ 使用信号量编写。PS/
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved