?? 單片機啟點-i2c程序c語言.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0055)http://www.mcu99.com/bbs/printpage.asp?BoardID=32&ID=65 -->
<!--HTTP頭--><HTML><HEAD><TITLE>單片機啟點-I2C程序C語言</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2800.1515" name=GENERATOR>
<META content=單片機,單片機教程,單片機學習交流,單片機啟點網,asp,論壇,插件 name=keywords>
<META content=動網論壇是使用量最多、覆蓋面最廣的免費中文論壇,也是國內知名的技術討論站點,希望我們辛苦的努力可以為您帶來很多方便
name=description><!--默認風格-->
<STYLE type=text/css>A:link {
COLOR: #000000; TEXT-DECORATION: none
}
A:active {
COLOR: #000000; TEXT-DECORATION: none
}
A:visited {
COLOR: #000000; TEXT-DECORATION: none
}
A:hover {
COLOR: #4455aa; TEXT-DECORATION: underline
}
BODY {
SCROLLBAR-FACE-COLOR: #dee3e7; FONT-SIZE: 12px; SCROLLBAR-HIGHLIGHT-COLOR: #ffffff; SCROLLBAR-SHADOW-COLOR: #dee3e7; COLOR: #000000; SCROLLBAR-3DLIGHT-COLOR: #d1d7dc; SCROLLBAR-ARROW-COLOR: #006699; SCROLLBAR-TRACK-COLOR: #efefef; FONT-FAMILY: 宋體; SCROLLBAR-DARKSHADOW-COLOR: #98aab1
}
FONT {
LINE-HEIGHT: normal
}
TD {
FONT-SIZE: 12px; LINE-HEIGHT: 15px; FONT-FAMILY: 宋體
}
TH {
FONT-WEIGHT: bold; FONT-SIZE: 12px; BACKGROUND-IMAGE: url(Skins/Default/css/default/bg1.gif); COLOR: white; BACKGROUND-COLOR: #4455aa
}
TD.TableTitle2 {
BACKGROUND-COLOR: #e4e8ef
}
TD.TableBody1 {
LINE-HEIGHT: normal; BACKGROUND-COLOR: #ffffff
}
TD.TableBody2 {
LINE-HEIGHT: normal; BACKGROUND-COLOR: #e4e8ef
}
TD.TopDarkNav {
BACKGROUND-IMAGE: url(Skins/Default/css/default/topbg.gif)
}
TD.TopLighNav {
BACKGROUND-IMAGE: url(Skins/Default/css/default/bottombg.gif)
}
TD.TopLighNav1 {
BACKGROUND-IMAGE: url(Skins/Default/css/default/tabs_m_tile.gif)
}
TD.TopLighNav2 {
BACKGROUND-COLOR: #ffffff
}
.tableBorder1 {
BORDER-RIGHT: 1px; BORDER-TOP: 1px; BORDER-LEFT: 1px; WIDTH: 98%; BORDER-BOTTOM: 1px; BACKGROUND-COLOR: #6595d6
}
.tableBorder2 {
BORDER-RIGHT: #dedede 1px solid; BORDER-TOP: #dedede 1px solid; BORDER-LEFT: #dedede 1px solid; WIDTH: 98%; BORDER-BOTTOM: #dedede 1px solid; BACKGROUND-COLOR: #efefef
}
#TableTitleLink A:link {
COLOR: #ffffff; TEXT-DECORATION: none
}
#TableTitleLink A:visited {
COLOR: #ffffff; TEXT-DECORATION: none
}
#TableTitleLink A:active {
COLOR: #ffffff; TEXT-DECORATION: none
}
#TableTitleLink A:hover {
COLOR: #ffffff; TEXT-DECORATION: underline
}
INPUT {
FONT-SIZE: 12px; COLOR: #000000; LINE-HEIGHT: 15px; FONT-FAMILY: Tahoma,Verdana,"宋體"
}
SELECT {
FONT-SIZE: 12px; COLOR: #000000; LINE-HEIGHT: 15px; FONT-FAMILY: Tahoma,Verdana,"宋體"
}
TEXTAREA {
FONT-SIZE: 12px; COLOR: #000000; LINE-HEIGHT: 15px; FONT-FAMILY: Tahoma,Verdana,"宋體"
}
OPTION {
FONT-SIZE: 12px; COLOR: #000000; LINE-HEIGHT: 15px; FONT-FAMILY: Tahoma,Verdana,"宋體"
}
.normalTextSmall {
FONT-SIZE: 11px; COLOR: #000000; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
.menuskin {
BORDER-RIGHT: #666666 1px solid; BORDER-TOP: #666666 1px solid; BACKGROUND-IMAGE: url(Skins/Default/dvmenubg3.gif); VISIBILITY: hidden; FONT: 12px Verdana; BORDER-LEFT: #666666 1px solid; BORDER-BOTTOM: #666666 1px solid; BACKGROUND-REPEAT: repeat-y; POSITION: absolute; BACKGROUND-COLOR: #efefef
}
.menuskin A {
PADDING-RIGHT: 10px; PADDING-LEFT: 25px; BEHAVIOR: url(inc/noline.htc); COLOR: black; TEXT-DECORATION: none
}
#mouseoverstyle {
BORDER-RIGHT: #597db5 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #597db5 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 2px; BORDER-LEFT: #597db5 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #597db5 1px solid; BACKGROUND-COLOR: #c9d5e7
}
#mouseoverstyle A {
COLOR: black
}
.menuitems {
PADDING-RIGHT: 1px; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; MARGIN: 2px; WORD-BREAK: keep-all; PADDING-TOP: 1px
}
A.navlink:link {
COLOR: #000000; TEXT-DECORATION: none
}
A.navlink:visited {
COLOR: #000000; TEXT-DECORATION: none
}
A.navlink:hover {
COLOR: #003399; TEXT-DECORATION: none
}
.BrightClass {
BACKGROUND-COLOR: #d7d7d7
}
DIV.quote {
BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 5px; BACKGROUND: #f3f3f3; PADDING-BOTTOM: 5px; MARGIN: 5px 20px; BORDER-LEFT: #cccccc 1px solid; LINE-HEIGHT: normal; PADDING-TOP: 5px; BORDER-BOTTOM: #cccccc 1px solid
}
DIV.HtmlCode {
BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 14px; BACKGROUND: #fdfddf; PADDING-BOTTOM: 5px; MARGIN: 5px 20px; BORDER-LEFT: #cccccc 1px solid; LINE-HEIGHT: normal; PADDING-TOP: 5px; BORDER-BOTTOM: #cccccc 1px solid; FONT-STYLE: oblique; FONT-FAMILY: Tahoma
}
</STYLE>
<!--論壇頁面開始代碼-->
<SCRIPT language=JavaScript src="單片機啟點-I2C程序C語言.files/Main.js"></SCRIPT>
</HEAD>
<BODY leftMargin=0 topMargin=0>
<DIV class=menuskin id=popmenu
onmouseover="clearhidemenu();highlightmenu(event,'on')" style="Z-INDEX: 100"
onmouseout="highlightmenu(event,'off');dynamichide(event)"></DIV><!--printpage.asp##帖子可打印頁面-->
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" width="98%"
align=center border=0>
<TBODY>
<TR>
<TD vAlign=center
align=top><B>以文本方式查看主題</B><BR><BR>- <B>單片機啟點</B> (http://www.mcu99.com/bbs/index.asp)<BR>-- <B>特色源程序</B> (http://www.mcu99.com/bbs/list.asp?boardid=32)<BR>---- <B>I2C程序C語言</B> (http://www.mcu99.com/bbs/dispbbs.asp?boardid=32&id=65)<BR>
<HR>
</TD></TR><!--printpage.asp##{$bbslist}循環部分-->
<TR>
<TD vAlign=center
align=top>-- 作者:atmel<BR>-- 發布時間:2004-9-3
15:16:08<BR><BR>-- I2C程序C語言<BR>/*VIICC.H*/<BR>#pragma db cd
small<BR>#include <BR>#include <BR>#define NOP nop ( ); nop ( ); nop ( );
nop ( )<BR>#define SDA P1^7<BR>#define SCL P1^6<BR><BR>void sta(
);<BR>void cack( );<BR>void stop( );<BR>void mnack( );<BR>void mack(
);<BR>void wrbyt(uchar shu);<BR>void wrnbyta(uchar slaw,uchar gg[],uchar
n);<BR>void wrnbyt(uchar slaw,uchar ff[],uchar number);<BR>uchar rdbyt(
);<BR>void rdnbyt(uchar slar,uchar qq[],uchar
number);<BR>源程序由9個函數組成,程序清單如下:<BR>voidsta(
)/*啟動I2C總線*/<BR>{<BR>SDA=1;<BR>SCL=1;<BR>NOP;<BR>SDA=0;<BR>NOP;<BR>SCL=0;<BR>}<BR><BR>void
stop(
)/*停止I2C總線<BR>*/<BR>{<BR>SDA=0;<BR>SCL=1;<BR>NOP;<BR>SDA=1;<BR>NOP;<BR>SCL=0;<BR>}<BR><BR>void
mack(
)/*發送應答位*/<BR>{<BR>SDA=0;<BR>SCL=1;<BR>NOP;<BR>SCL=0;<BR>SDA=1;<BR>}<BR><BR>void
mnack(
)/*發送非應答位*/<BR>{<BR>SDA=1;<BR>SCL=1;<BR>NOP;<BR>SCL=0;<BR>SDA=0;<BR>}<BR><BR>void
cack(
)/*應答位檢查*/<BR>{<BR>SDA=1;<BR>SCL=1;<BR>F0=0;<BR>if(SDA==1)<BR>F0=1;<BR>SCL=0;<BR>nop(
);<BR>}<BR>/*向虛擬I2C總線上發送1個數據字節*/<BR>void wrbyt(uchar shu)<BR>{<BR>uchar
i;<BR>for(i=0;i0){<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
<HR>
</TD></TR><!--printpage.asp##{$bbslist}循環部分-->
<TR>
<TD vAlign=center
align=top>-- 作者:江在流<BR>-- 發布時間:2004-9-23
17:54:20<BR><BR>-- <BR>
<P>請問nop可以這樣引用嗎?</P>
<P>我看到過: _nop_();</P>
<P>這樣的引用方式,不知道對不對?</P>
<HR>
</TD></TR><!--printpage.asp##{$bbslist}循環部分-->
<TR>
<TD vAlign=center
align=top>-- 作者:mmlyy2001<BR>-- 發布時間:2004-9-27
11:26:18<BR><BR>-- <BR>可以呀 #define NOP _nop_();
<HR>
</TD></TR><!--printpage.asp##{$bbslist}循環部分-->
<TR>
<TD vAlign=center
align=top>-- 作者:alan325<BR>-- 發布時間:2004-10-30
16:36:50<BR><BR>-- <BR>
<P>還有數組作參數那部分呢?我想看看.我郵箱guoyangqing@21cn.com</P>
<HR>
</TD></TR><!--printpage.asp##{$bbslist}循環部分-->
<TR>
<TD vAlign=center
align=top>-- 作者:lzf713<BR>-- 發布時間:2005-1-22
18:12:59<BR><BR>-- <BR>
<P>#define NOP nop ( ); nop ( ); nop ( ); nop ( )</P>
<P>然后在程序中多處使用NOP我覺得不好,原因就是占用大量的ROM,例如在程序中使用20次NOP,那么就要占用80byte ROM。</P>
<P>我覺得比較好的做法是:</P>
<P>void delay(unsigned char counter)</P>
<P>{</P>
<P> for(;counter>0;counter--)</P>
<P> _nop_(); </P>
<P>}</P>
<P>然后調用delay()</P>
<HR>
</TD></TR><!--printpage.asp##{$bbslist}循環部分-->
<TR>
<TD vAlign=center
align=top>-- 作者:lzf713<BR>-- 發布時間:2005-1-22
18:21:02<BR><BR>-- <BR>
<P>voidsta(
)/*啟動I2C總線*/<BR>{<BR>SDA=1;<BR>SCL=1;<BR>NOP;<BR>SDA=0;<BR>NOP;<BR>SCL=0;<BR>}<BR>//=============================</P>
<P>我覺得不是很恰當</P>
<P>我認為因該這樣初始化IIC總線:</P>
<P>void iic_init(void)</P>
<P>{</P>
<P>SCL=0;</P>
<P>SDA=0;</P>
<P>delay(5);</P>
<P>SCL=1;</P>
<P>// SDA=0;</P>
<P>delay(5);</P>
<P>// SCL=1;</P>
<P>SDA=1;</P>
<P>delay(5);</P>
<P>SCL=0;</P>
<P>// SDA=1;</P>
<P>delay(5);</P>
<P>}</P>
<HR>
</TD></TR><!--printpage.asp##{$bbslist}循環部分-->
<TR>
<TD vAlign=center
align=top>-- 作者:lzf713<BR>-- 發布時間:2005-1-22
18:26:40<BR><BR>-- <BR>
<P>void stop(
)/*停止I2C總線<BR>*/<BR>{<BR>SDA=0;<BR>SCL=1;<BR>NOP;<BR>SDA=1;<BR>NOP;<BR>SCL=0;<BR>}</P>
<P>file://==================================</P>
<P>我覺得不對,原因沒有釋放SCL</P>
<P>我認為因該這樣:</P>
<P>void stop(void)</P>
<P>{</P>
<P> SDA=0;</P>
<P>SCL=1;</P>
<P>delay(5);</P>
<P>SDA=1;</P>
<P>// SCL=1;</P>
<P>delay(5);</P>
<P>}</P>
<HR>
</TD></TR><!--printpage.asp##{$bbslist}循環部分-->
<TR>
<TD vAlign=center
align=top>-- 作者:lzf713<BR>-- 發布時間:2005-1-22
18:31:34<BR><BR>-- <BR>
<P>void mnack(
)/*發送非應答位*/<BR>{<BR>SDA=1;<BR>SCL=1;<BR>NOP;<BR>SCL=0;<BR>SDA=0;<BR>}<BR>file://-------------------------------------------------------------</P>
<P>是否可以改為這樣?</P>
<P>void mnack( )/*發送非應答位*/<BR>{<BR>SDA=1;<BR>SCL=1;<BR>NOP;<BR>SCL=0;</P>
<P>/* SDL=1; */</P>
<P>NOP;<BR>}</P>
<HR>
</TD></TR><!--printpage.asp##{$bbslist}循環部分-->
<TR>
<TD vAlign=center
align=top>-- 作者:lzf713<BR>-- 發布時間:2005-1-22
18:45:24<BR><BR>-- <BR>
<P>/*向虛擬I2C總線上發送1個數據字節*/<BR>void wrbyt(uchar shu)<BR>{<BR>uchar
i;<BR>for(i=0;i0){<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<BR>/*===========================================================*/</P><BR>
<P>這么我看來看去總覺得缺什么的。我給出一個吧</P><BR>
<P>bit sendbyte(unsigned char outdata)</P><BR>
<P>{</P><BR>
<P> unsigned char i;</P><BR>
<P> for(i=0;i<8;i++)</P><BR>
<P> {</P><BR>
<P> SCL=0;</P><BR>
<P> SDA=(bit) (outdata & 0x80);</P><BR>
<P>/*--------------或者可以使用下面的語句--------------------------------</P><BR>
<P> if(outdata & 0x80)</P><BR>
<P> SDA=1;</P><BR>
<P> else</P><BR>
<P> SDA=0;</P><BR>
<P>-------代替SDA=(bit) (outdata &
0x80);--------------------------------------*/</P><BR>
<P> outdata=outdata<<1;</P><BR>
<P> delay(2);</P><BR>
<P> SCL=1;</P><BR>
<P> delay(5);</P><BR>
<P>}</P><BR>
<P>/* 等待應答,如有應答則返回1,否則返回0 */</P><BR>
<P>SDA=1;</P><BR>
<P>SCL=1;</P><BR>
<P>delay(5) ;</P><BR>
<P>if(SDA)</P><BR>
<P> {</P><BR>
<P> SCL=0;</P><BR>
<P> delay(1);</P><BR>
<P> return (0);</P><BR>
<P> }</P><BR>
<P> else</P><BR>
<P> {</P><BR>
<P>
SCL=0;</P><BR>
<P>
delay(1);</P><BR>
<P> return
(1);</P><BR>
<P> }</P><BR>
<P>}</P><BR>
<DIV align=right><FONT color=#000066>[此貼子已經被作者于2005-1-22
18:46:50編輯過]</FONT></DIV>
<HR>
</TD></TR></TBODY></TABLE><!--頁面結束部分-->
<DIV id=bottom align=center></DIV><BR>
<TABLE cellSpacing=0 cellPadding=0 width="98%" align=center border=0>
<TBODY>
<TR>
<TD id=Footer_ads align=middle></TD></TR>
<TR>
<TD align=middle>
<TABLE align=center>
<TBODY>
<TR>
<TD align=middle>Powered By :<A
href="http://www.dvbbs.net/download.asp" target=_blank>Dvbbs Version
7.0.0</A> Sp2<BR>Copyright ©2002 - 2005 <A
href="http://www.mcu99.com/"><FONT face=Verdana, sans-serif
Helvetica, Arial,><B>單片機<FONT
color=#cc0000>啟點</FONT></B></FONT></A><BR>執行時間:1,125.00000毫秒。查詢數據庫5次。<BR><FONT
onmousemove="this.color='#FF0000';"
onmouseout="this.color='#999999';"
color=#999999>當前模板樣式:[默認模板]</FONT>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -