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

📄 51单片机模拟i2c总线的c语言实现_老古开发网文章.htm

📁 学习C51的好才料 包库C51语言教程 Keilc中文用户手册 还有典型应用的例子 入门操作 还有常用C51IC的DataSheet
💻 HTM
📖 第 1 页 / 共 2 页
字号:
      <P><FONT lang=ZH-CN>Sda=1;</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>Scl=1;</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>Scl=0;</FONT></P>
      <P><FONT lang=ZH-CN>}</FONT></P>
      <P><FONT lang=ZH-CN>void Send(uchar 
      Data)/*发送数据子程序,Data为要求发送的数据*/</FONT></P>
      <P><FONT lang=ZH-CN>{</FONT></P>
      <P><FONT lang=ZH-CN>uchar BitCounter=8;/*位数控制*/</FONT></P>
      <P><FONT lang=ZH-CN>uchar temp;/*中间变量控制*/</FONT></P>
      <P><FONT lang=ZH-CN>do</FONT></P>
      <P><FONT lang=ZH-CN>{</FONT></P>
      <P><FONT lang=ZH-CN>temp=Data;</FONT></P>
      <P><FONT lang=ZH-CN>Scl=0;</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>if((temp&amp;0x80)==0x80)/*如果最高位是1*/</FONT></P>
      <P><FONT lang=ZH-CN>Sda=1;</FONT></P>
      <P><FONT lang=ZH-CN>else</FONT></P>
      <P><FONT lang=ZH-CN>Sda=0;</FONT></P>
      <P><FONT lang=ZH-CN>Scl=1;</FONT></P>
      <P><FONT lang=ZH-CN>temp=Data&lt;&lt;1;/*RLC*/</FONT></P>
      <P><FONT lang=ZH-CN>Data=temp;</FONT></P>
      <P><FONT lang=ZH-CN>BitCounter--;</FONT></P>
      <P><FONT lang=ZH-CN>}while(BitCounter);</FONT></P>
      <P><FONT lang=ZH-CN>Scl=0;</FONT></P>
      <P><FONT lang=ZH-CN>}</FONT></P><FONT lang=ZH-CN>
      <P> </P></FONT>
      <P><FONT lang=ZH-CN>uchar Read(void)/*读一个字节的数据,并返回该字节值*/</FONT></P>
      <P><FONT lang=ZH-CN>{</FONT></P>
      <P><FONT lang=ZH-CN>uchar temp=0;</FONT></P>
      <P><FONT lang=ZH-CN>uchar temp1=0;</FONT></P>
      <P><FONT lang=ZH-CN>uchar BitCounter=8;</FONT></P>
      <P><FONT lang=ZH-CN>Sda=1;</FONT></P>
      <P><FONT lang=ZH-CN>do{</FONT></P>
      <P><FONT lang=ZH-CN>Scl=0;</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>Scl=1;</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>_nop_();</FONT></P>
      <P><FONT lang=ZH-CN>if(Sda)/*如果Sda=1;*/</FONT></P>
      <P><FONT lang=ZH-CN>temp=temp 0x01;/*temp的最低位置1*/</FONT></P>
      <P><FONT lang=ZH-CN>else</FONT></P>
      <P><FONT lang=ZH-CN>temp=temp&amp;0xfe;/*否则temp的最低位清0*/</FONT></P>
      <P><FONT lang=ZH-CN>if(BitCounter-1)</FONT></P>
      <P><FONT lang=ZH-CN>{temp1=temp&lt;&lt;1;</FONT></P>
      <P><FONT lang=ZH-CN>temp=temp1;</FONT></P>
      <P><FONT lang=ZH-CN>}</FONT></P>
      <P><FONT lang=ZH-CN>BitCounter--;</FONT></P>
      <P><FONT lang=ZH-CN>}while(BitCounter);</FONT></P>
      <P><FONT lang=ZH-CN>return(temp);</FONT></P>
      <P><FONT lang=ZH-CN>}</FONT></P><FONT lang=ZH-CN>
      <P> </P></FONT>
      <P><FONT lang=ZH-CN>void WrToROM(uchar Data[],uchar Address,uchar 
      Num)</FONT></P>
      <P><FONT lang=ZH-CN>{</FONT></P>
      <P><FONT lang=ZH-CN>uchar i;</FONT></P>
      <P><FONT lang=ZH-CN>uchar *PData;</FONT></P>
      <P><FONT lang=ZH-CN>PData=Data;</FONT></P>
      <P><FONT lang=ZH-CN>for(i=0;i&lt;Num;i++)</FONT></P>
      <P><FONT lang=ZH-CN>{</FONT></P>
      <P><FONT lang=ZH-CN>Start();/*发送启动信号*/</FONT></P>
      <P><FONT lang=ZH-CN>Send(0xa0);/*发送SLA+W*/</FONT></P>
      <P><FONT lang=ZH-CN>Ack();</FONT></P>
      <P><FONT lang=ZH-CN>Send(Address+i);/*发送地址*/</FONT></P>
      <P><FONT lang=ZH-CN>Ack();</FONT></P>
      <P><FONT lang=ZH-CN>Send(*(PData+i));</FONT></P>
      <P><FONT lang=ZH-CN>Ack();</FONT></P>
      <P><FONT lang=ZH-CN>Stop();</FONT></P>
      <P><FONT lang=ZH-CN>mDelay(20);</FONT></P>
      <P><FONT lang=ZH-CN>}</FONT></P>
      <P><FONT lang=ZH-CN>}</FONT></P>
      <P><FONT lang=ZH-CN>void RdFromROM(uchar Data[],uchar Address,uchar 
      Num)</FONT></P>
      <P><FONT lang=ZH-CN>{</FONT></P>
      <P><FONT lang=ZH-CN>uchar i;</FONT></P>
      <P><FONT lang=ZH-CN>uchar *PData;</FONT></P>
      <P><FONT lang=ZH-CN>PData=Data;</FONT></P>
      <P><FONT lang=ZH-CN>for(i=0;i&lt;Num;i++)</FONT></P>
      <P><FONT lang=ZH-CN>{</FONT></P>
      <P><FONT lang=ZH-CN>Start();</FONT></P>
      <P><FONT lang=ZH-CN>Send(0xa0);</FONT></P>
      <P><FONT lang=ZH-CN>Ack();</FONT></P>
      <P><FONT lang=ZH-CN>Send(Address+i);</FONT></P>
      <P><FONT lang=ZH-CN>Ack();</FONT></P>
      <P><FONT lang=ZH-CN>Start();</FONT></P>
      <P><FONT lang=ZH-CN>Send(0xa1);</FONT></P>
      <P><FONT lang=ZH-CN>Ack();</FONT></P>
      <P><FONT lang=ZH-CN>*(PData+i)=Read();</FONT></P>
      <P><FONT lang=ZH-CN>Scl=0;</FONT></P>
      <P><FONT lang=ZH-CN>NoAck();</FONT></P>
      <P><FONT lang=ZH-CN>Stop();</FONT></P>
      <P><FONT lang=ZH-CN>}</FONT></P>
      <P><FONT lang=ZH-CN>}</FONT></P>
      <P><FONT lang=ZH-CN>void main()</FONT></P>
      <P><FONT lang=ZH-CN>{</FONT></P>
      <P><FONT lang=ZH-CN>uchar Number[4]={1,2,3,4};</FONT></P>
      <P><FONT lang=ZH-CN>WP=1;</FONT></P>
      <P><FONT lang=ZH-CN>WrToROM(Number,4,4);/*将初始化后的数值写入EEPROM*/</FONT></P>
      <P><FONT lang=ZH-CN>mDelay(20);</FONT></P>
      <P><FONT lang=ZH-CN>Number[0]=0;</FONT></P>
      <P><FONT lang=ZH-CN>Number[1]=0;</FONT></P>
      <P><FONT lang=ZH-CN>Number[2]=0;</FONT></P>
      <P><FONT lang=ZH-CN>Number[3]=0;/*将数组中的值清掉,以验证读出的数是否正确*/</FONT></P>
      <P><FONT lang=ZH-CN>RdFromROM(Number,4,4);</FONT></P>
      <P><FONT lang=ZH-CN>}</FONT></P></TD></TR>
  <TR>
    <TD class=table vAlign=top bgColor=#ffffff><FONT 
    color=#ff0000><BR></FONT></TD></TR></TBODY></TABLE>
<TABLE class=tableMain width=736 align=center border=0>
  <TBODY>
  <TR>
    <TD>
      <DIV align=center>
      <SCRIPT type=text/javascript><!--
google_ad_client = "pub-1420557601534669";
google_alternate_ad_url = "http://www.laogu.com/my/welcome.gif";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel = "8723702390";
google_color_url = "000000";
google_color_link = "ff6600";
google_color_border = "93c901";
//-->
</SCRIPT>

      <SCRIPT src="51单片机模拟I2C总线的C语言实现_老古开发网文章.files/show_ads.js" 
      type=text/javascript>
</SCRIPT>
      </DIV></TD></TR></TBODY></TABLE>
<TABLE class=tablehome cellSpacing=1 cellPadding=3>
  <TBODY>
  <TR>
    <TD width=530><FONT color=#ff0000>欢迎进入<A 
      href="http://www.laogu.com/laogubbs/" 
      _target="_blank">老古开发网论坛</A>进行讨论</FONT><BR><BR>[<A 
      href="http://www.laogu.com/ctg_6.htm">单片机</A>] 相关文章: <BR>
      <LI><A href="http://www.laogu.com/wz_1680.htm">PIC16C54单片机简单例程</A><BR>
      <DIV 
      style="PADDING-RIGHT: 10px; PADDING-LEFT: 40px"><B>简介:</B><BR>Microchip 
      公司推出的 PIC 系列 8 位单片机是业界率先采用精简指令集计算机 (RISC-Reduced Instruction Set Computer) 
      结构,具有高性价比的嵌入式控制器。 PIC 系列单片机具有高速度,低工作电压,较大的输入输出直接驱动能力(可直接驱动 LED 负载),低价一次性编程 
      (OTP-One Time Programmable) 技术,低功耗,小体积等优点。 PIC16C5X 系列是 PIC 
      系列......</DIV><BR>
      <LI><A href="http://www.laogu.com/wz_1677.htm">一种查表程序</A><BR>
      <LI><A href="http://www.laogu.com/wz_1676.htm">基于PICC 
      编译环境编写PIC单片机程序</A><BR>
      <LI><A href="http://www.laogu.com/wz_1675.htm">MSP430实现循环冗余算法</A><BR>
      <LI><A href="http://www.laogu.com/wz_1674.htm">MSP430单片机的框架程序</A> </LI></TD>
    <TD width=205>&nbsp;
      <SCRIPT type=text/javascript><!--
google_ad_client = "pub-1420557601534669";
google_ad_width = 160;
google_ad_height = 90;
google_ad_format = "160x90_0ads_al";
google_ad_channel = "6437294569";
google_color_border = "93c901";
google_color_bg = "FFFFFF";
google_color_link = "ff6600";
google_color_text = "000000";
google_color_url = "000000";
//-->
</SCRIPT>

      <SCRIPT src="51单片机模拟I2C总线的C语言实现_老古开发网文章.files/show_ads.js" 
      type=text/javascript>
</SCRIPT>
       </TD></TR></TBODY></TABLE>
<TABLE class=tableMain cellSpacing=1 cellPadding=3 border=0>
  <TBODY>
  <TR>
    <TD vAlign=top bgColor=#ffffff>
      <TABLE height="100%" cellSpacing=0 cellPadding=0 width="100%" align=center 
      border=0 valign="top">
        <TBODY>
        <TR>
          <TD>下一个:<A 
            href="http://www.laogu.com/wz_1681.htm">[单片机]基于PIC16C72单片机的空调控制系统的研制</A><BR>
            <DIV 
            style="PADDING-RIGHT: 10px; PADDING-LEFT: 40px"><B>简介:</B><BR>摘要: 
            提出一种基于单片机PIC16C72的热泵式分体壁挂空调控制系统的设计方案。设计出系统硬件结构的主要组成部分电路;简述其工作原理;给出软件设计思想和主控程序软件框图。 
            关键词: PIC单片机 空调 控制 
            热泵式分体壁挂空调以其优越的性能,已越来越被广大家庭所选用,其功能更是日新月异,而对其功能的提高起核心作用的其控制系统。本文介绍一种基于PIC16C72控制的空调控制系统设计方法。 
            该系统具有制冷、制热、除湿、自动4......</DIV></TD></TR>
        <TR>
          <TD><BR>上一个:<A 
            href="http://www.laogu.com/wz_1683.htm">[单片机]MCS-51单片机实用子程序库</A></TD></TR>
        <TR>
          <TD class=table vAlign=top bgColor=#ffffff><BR></TD></TR>
        <TR>
          <TD class=table vAlign=top bgColor=#ffffff></TD></TR>
        <TR>
          <TD></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>
<TABLE class=tableMain width=736 align=center border=0>
  <TBODY>
  <TR>
    <TD>
      <DIV align=center>
      <SCRIPT type=text/javascript><!--
google_ad_client = "pub-1420557601534669";
google_alternate_ad_url = "http://www.laogu.com/my/welcome.gif";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text_image";
google_ad_channel = "3625436549";
google_color_url = "000000";
google_color_link = "ff6600";
google_color_border = "93c901";
//-->
</SCRIPT>

      <SCRIPT src="51单片机模拟I2C总线的C语言实现_老古开发网文章.files/show_ads.js" 
      type=text/javascript>
</SCRIPT>
      </DIV></TD></TR></TBODY></TABLE>
<DIV align=center><A href="http://www.laogu.com/">老古开发网</A>版权所有 2006年9月 asp.Net 
V2.0 设计:<A href="http://www.laogu.com/">老古</A>,<BR>2007-7-18 23:28:41 页面缓存:30分钟 
执行时间:63毫秒 </DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -