📄 51单片机模拟i2c总线的c语言实现_老古开发网文章.htm
字号:
<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&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<<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&0xfe;/*否则temp的最低位清0*/</FONT></P>
<P><FONT lang=ZH-CN>if(BitCounter-1)</FONT></P>
<P><FONT lang=ZH-CN>{temp1=temp<<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<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<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>
<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 + -