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

📄 i2c总线c语言源程序.htm

📁 此为X102单片机 数码管显示电路及编程 键盘输入电路及编程 红外接收电路及编程 红外发送电路及编程 I2C总线电路及编程 计数器电路及编程 发光管电路及编 蜂鸣器电路及编程 扩展口电路及编程 RAM
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
<table cellspacing="0" cellpadding="0">
  <tr>
    <td><p align="center"><strong>I2C</strong><strong>总线</strong><strong>C</strong><strong>语言源程序</strong></p></td>
  </tr>
  <tr>
    <td></td>
  </tr>
  <tr>
    <td valign="top"><table cellspacing="0" cellpadding="0">
        <tr>
          <td width="22"></td>
          <td></td>
          <td width="10" rowspan="3"></td>
        </tr>
        <tr>
          <td width="22"></td>
          <td></td>
        </tr>
        <tr>
          <td></td>
          <td><table cellpadding="0">
              <tr>
                <td width="100%"><p>/*VIICC.H*/<br>
                    #pragma&nbsp;db&nbsp;cd&nbsp;small<br>
                    #include&nbsp;&lt;intrins.h&gt;<br>
                    #include&nbsp;&lt;reg52.h&gt;<br>
                    #define&nbsp;NOP&nbsp;nop&nbsp;(&nbsp;);&nbsp;nop&nbsp;(&nbsp;);&nbsp;nop&nbsp;(&nbsp;);&nbsp;nop&nbsp;(&nbsp;)<br>
                    #define&nbsp;SDA&nbsp;P1^7<br>
                    #define&nbsp;SCL&nbsp;P1^6<br>
                    <br>
                    void&nbsp;sta(&nbsp;);<br>
                    void&nbsp;cack(&nbsp;);<br>
                    void&nbsp;stop(&nbsp;);<br>
                    void&nbsp;mnack(&nbsp;);<br>
                    void&nbsp;mack(&nbsp;);<br>
                    void&nbsp;wrbyt(uchar&nbsp;shu);<br>
                    void&nbsp;wrnbyta(uchar&nbsp;slaw,uchar&nbsp;gg[],uchar&nbsp;n);<br>
                    void&nbsp;wrnbyt(uchar&nbsp;slaw,uchar&nbsp;ff[],uchar&nbsp;number);<br>
                    uchar&nbsp;rdbyt(&nbsp;);<br>
                    void&nbsp;rdnbyt(uchar&nbsp;slar,uchar&nbsp;qq[],uchar&nbsp;number);<br>
                    源程序由9个函数组成,程序清单如下:<br>
                    voidsta(&nbsp;)/*启动I2C总线*/<br>
                    {<br>
                    SDA=1;<br>
                    SCL=1;<br>
                    NOP;<br>
                    SDA=0;<br>
                    NOP;<br>
                    SCL=0;<br>
                    }<br>
                    <br>
                    void&nbsp;stop(&nbsp;)/*停止I2C总线<br>
                    */<br>
                    {<br>
                    SDA=0;<br>
                    SCL=1;<br>
                    NOP;<br>
                    SDA=1;<br>
                    NOP;<br>
                    SCL=0;<br>
                    }<br>
                    <br>
                    void&nbsp;mack(&nbsp;)/*发送应答位*/<br>
                    {<br>
                    SDA=0;<br>
                    SCL=1;<br>
                    NOP;<br>
                    SCL=0;<br>
                    SDA=1;<br>
                    }<br>
                    <br>
                    void&nbsp;mnack(&nbsp;)/*发送非应答位*/<br>
                    {<br>
                    SDA=1;<br>
                    SCL=1;<br>
                    NOP;<br>
                    SCL=0;<br>
                    SDA=0;<br>
                    }<br>
                    <br>
                    void&nbsp;cack(&nbsp;)/*应答位检查*/<br>
                    {<br>
                    SDA=1;<br>
                    SCL=1;<br>
                    F0=0;<br>
                    if(SDA==1)<br>
                    F0=1;<br>
                    SCL=0;<br>
                    nop(&nbsp;);<br>
                    }<br>
                    /*向虚拟I2C总线上发送1个数据字节*/<br>
                    void&nbsp;wrbyt(uchar&nbsp;shu)<br>
                    {<br>
                    uchar&nbsp;i;<br>
                    for(i=0;i&lt;8;i++){<br>
                    if((shu&amp;0x80)&gt;0){<br>
                    SDA=1;<br>
                    SCL=1;<br>
                    NOP;<br>
                    SCL=0;<br>
                    SDA=0;<br>
                    }<br>
                    else{<br>
                    SDA=0;<br>
                    SCL=1;<br>
                    NOP;<br>
                    SCL=0;<br>
                    }<br>
                    shu=shu&lt;&lt;1;<br>
                    }<br>
                    }<br>
                    /*从I2C总线上读取1个数据字节*/<br>
                    uchar&nbsp;rdbyt(&nbsp;)<br>
                    {<br>
                    uchar&nbsp;nn=0xff,mm=0x80,uu=0x7f;<br>
                    uchar&nbsp;j;<br>
                    for(j=0;j&lt;8;j++){<br>
                    SDA=1;<br>
                    SCL=1;<br>
                    if(SDA==0)<br>
                    nn=(nn&amp;uu);<br>
                    else<br>
                    nn=(nn|mm);。<br>
                    nn=crol(nn,1);<br>
                    SCL=0;<br>
                    }<br>
                    return(nn);<br>
                    }<br>
                    <br>
                    void&nbsp;wrnbyta(uchar&nbsp;slaw,uchar&nbsp;gg[],uchar&nbsp;n)<br>
                    {<br>
                    do{<br>
                    sta(&nbsp;);<br>
                    wrbyt(slaw);<br>
                    cack(&nbsp;);<br>
                    }while(F0==1);<br>
                    wrbyt(gg[n]);<br>
                    cack(&nbsp;);<br>
                    <br>
                    <br>
                    <br>
                    <br>
                    <br>
                    }<br>
                    /*向虚拟I2C总线上发送n个字节的数据*/<br>
                    void&nbsp;wrnbyt(uchar&nbsp;slaw,uchar&nbsp;ff[],uchar&nbsp;number)<br>
                    {<br>
                    uchar&nbsp;idata&nbsp;k;<br>
                    do{<br>
                    sta(&nbsp;);<br>
                    wrbyt(slaw);<br>
                    ?cack(&nbsp;);<br>
                    }while(F0==1);<br>
                    for(k=0;k&lt;number;k++){。<br>
                    wrbyt(ff[k]);<br>
                    cack(&nbsp;);<br>
                    while(F0==1)<br>
                    wrnbyta(slaw,ff,k);<br>
                    }<br>
                    stop(&nbsp;);<br>
                    }<br>
                    /*从虚拟I2C总线上读取n个字节的数据*/<br>
                    void&nbsp;rdnbyt(uchar&nbsp;slar,uchar&nbsp;qq[],uchar&nbsp;number)<br>
                    {<br>
                    uchar&nbsp;idata&nbsp;data0,l;<br>
                    do{<br>
                    sta(&nbsp;);<br>
                    wrbyt(slar);<br>
                    cack(&nbsp;);<br>
                    }while(F0==1);?<br>
                    for(l=0;l&lt;number-1;l++){<br>
                    data0=rdbyt(&nbsp;);<br>
                    qq[l]=data0;<br>
                    mack(&nbsp;);<br>
                    }<br>
                    data0=rdbyt(&nbsp;);<br>
                    qq[l]=data0;<br>
                    mnack(&nbsp;);<br>
                    stop(&nbsp;);<br>
                    }</p></td>
              </tr>
          </table></td>
        </tr>
    </table></td>
  </tr>
</table>
</body>
</html>

⌨️ 快捷键说明

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