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

📄 第四章 keil c51高级编程.htm

📁 本文档详细介绍了怎样使用keil软件开发单片机程序
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                  lang=EN-US>C51提供了三种访问绝对地址的方法:</SPAN></P>
                  <H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A 
                  name=_Toc475103184><SPAN lang=EN-US style="FONT-SIZE: 15pt">1. 
                  </SPAN>绝对宏:</A></H3>
                  <P class=MsoBodyTextFirstIndent>在程序中,用“#<SPAN 
                  lang=EN-US>include&lt;absacc.h&gt;”即可使用其中定义的宏来访问绝对地址,包括:</SPAN></P>
                  <P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN 
                  lang=EN-US>CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD</SPAN></P>
                  <P class=MsoBodyTextFirstIndent>具体使用可看一看<SPAN 
                  lang=EN-US>absacc.h便知</SPAN></P>
                  <P class=MsoBodyTextFirstIndent>例如:</P>
                  <P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN 
                  lang=EN-US>rval=CBYTE[0x0002];指向程序存贮器的0002h地址</SPAN></P>
                  <P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN 
                  lang=EN-US>rval=XWORD<SPAN 
                  style="mso-tab-count: 1">&nbsp;&nbsp; 
                  </SPAN>[0x0002];指向外RAM的0004h地址</SPAN></P>
                  <H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A 
                  name=_Toc475103185><SPAN lang=EN-US style="FONT-SIZE: 15pt">2. 
                  </SPAN><SPAN lang=EN-US>_at_关键字</SPAN></A></H3>
                  <P class=MsoBodyTextFirstIndent>直接在数据定义后加上<SPAN 
                  lang=EN-US>_at_ const即可,但是注意:</SPAN></P>
                  <P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN 
                  lang=EN-US>(1)绝对变量不能被初使化;</SPAN></P>
                  <P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN 
                  lang=EN-US>(2)bit型函数及变量不能用_at_指定。</SPAN></P>
                  <P class=MsoBodyTextFirstIndent>例如:</P>
                  <P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN 
                  lang=EN-US>idata struct link list _at_ 
                  0x40;指定list结构从40h开始。</SPAN></P>
                  <P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN 
                  lang=EN-US>xdata char text[25b] 
                  _at_0xE000;指定text数组从0E000H开始</SPAN></P>
                  <P class=MsoBodyTextFirstIndent>提示:如果外部绝对变量是<SPAN 
                  lang=EN-US>I/O端口等可自行变化数据,需要使用volatile关键字进行描述,请参考absacc.h。</SPAN></P>
                  <H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A 
                  name=_Toc475103186><SPAN lang=EN-US style="FONT-SIZE: 15pt">3. 
                  </SPAN>连接定位控制</A></H3>
                  <P class=MsoBodyTextFirstIndent>此法是利用连接控制指令<SPAN 
                  lang=EN-US>code xdata pdata \data 
                  bdata对“段”地址进行,如要指定某具体变量地址,则很有局限性,不作详细讨论。</SPAN></P>
                  <H2 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A 
                  name=_Toc475103187><SPAN lang=EN-US 
                  style="FONT-SIZE: 16pt">第二节 </SPAN><SPAN lang=EN-US>Keil 
                  C51与汇编的接口</SPAN></A></H2>
                  <H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A 
                  name=_Toc475103188><SPAN lang=EN-US style="FONT-SIZE: 15pt">1. 
                  </SPAN>模块内接口</A><SPAN 
                  style="mso-bookmark: _Toc475103188"></SPAN><SPAN lang=EN-US 
                  style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></H3>
                  <P class=MsoBodyTextFirstIndent>方法是用#<SPAN 
                  lang=EN-US>pragma语句具体结构是:</SPAN></P>
                  <P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN 
                  lang=EN-US>#pragma asm</SPAN></P>
                  <P class=MsoBodyTextIndent 
style="MARGIN-LEFT: 36.75pt">汇编行</P>
                  <P class=MsoBodyTextIndent style="MARGIN-LEFT: 36.75pt"><SPAN 
                  lang=EN-US>#pragma endasm</SPAN></P>
                  <P class=MsoBodyTextFirstIndent>这种方法实质是通过<SPAN 
                  lang=EN-US>asm与ndasm告诉C51编译器中间行不用编译为汇编行,因而在编译控制指令中有SRC以控制将这些不用编译的行存入其中。</SPAN></P>
                  <H3 style="MARGIN-LEFT: 0cm; TEXT-INDENT: 0cm"><A 
                  name=_Toc475103189><SPAN lang=EN-US style="FONT-SIZE: 15pt">2. 
                  </SPAN>模块间接口</A><SPAN 
                  style="mso-bookmark: _Toc475103189"></SPAN><SPAN lang=EN-US 
                  style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></H3>
                  <P class=MsoBodyTextFirstIndent><SPAN 
                  lang=EN-US>C模块与汇编模块的接口较简单,分别用C51与A51对源文件进行编译,然后用L51将obj文件连接即可,关键问题在于C函数与汇编函数之间的参数传递问题,C51中有两种参数传递方法。</SPAN></P>
                  <P class=MsoNormal 
                  style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; tab-stops: 63.0pt" 
                  align=left><SPAN lang=EN-US 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">(1) 
                  通过寄存器传递函数参数</SPAN><SPAN lang=EN-US 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'"><O:P></O:P></SPAN></P>
                  <P class=MsoBodyTextFirstIndent>最多只能有<SPAN 
                  lang=EN-US>3个参数通过寄存器传递,规律如下表:</SPAN></P>
                  <P class=MsoNormal 
                  style="TEXT-INDENT: 24pt; TEXT-ALIGN: left; tab-stops: 63.0pt" 
                  align=left><SPAN lang=EN-US 
                  style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'">&nbsp;<O:P></O:P></SPAN></P>
                  <TABLE 
                  style="MARGIN-LEFT: 32.4pt; BORDER-COLLAPSE: collapse; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" 
                  cellSpacing=0 cellPadding=0 border=0>
                    <TBODY>
                    <TR>
                      <TD 
                      style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 78.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid" 
                      vAlign=top width=105>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">参数数目</SPAN><SPAN 
                        lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'"><O:P></O:P></SPAN></P></TD>
                      <TD 
                      style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 78.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt" 
                      vAlign=top width=105>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">char<O:P></O:P></SPAN></P></TD>
                      <TD 
                      style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 78.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt" 
                      vAlign=top width=105>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">int<O:P></O:P></SPAN></P></TD>
                      <TD 
                      style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 78.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt" 
                      vAlign=top width=105>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">long,float<O:P></O:P></SPAN></P></TD>
                      <TD 
                      style="BORDER-RIGHT: medium none; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 78.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.75pt solid; mso-border-left-alt: solid windowtext .75pt" 
                      vAlign=top width=105>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">一般指针</SPAN><SPAN 
                        lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'"><O:P></O:P></SPAN></P></TD></TR>
                    <TR>
                      <TD 
                      style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 78.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-border-top-alt: solid windowtext .75pt" 
                      vAlign=top width=105>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">1<O:P></O:P></SPAN></P>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">2<O:P></O:P></SPAN></P>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">3<O:P></O:P></SPAN></P></TD>
                      <TD 
                      style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 78.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-border-left-alt: solid windowtext .75pt; mso-border-top-alt: solid windowtext .75pt" 
                      vAlign=top width=105>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">R7<O:P></O:P></SPAN></P>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">R5<O:P></O:P></SPAN></P>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">R3<O:P></O:P></SPAN></P></TD>
                      <TD 
                      style="BORDER-RIGHT: windowtext 0.75pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 78.75pt; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; mso-border-left-alt: solid windowtext .75pt; mso-border-top-alt: solid windowtext .75pt" 
                      vAlign=top width=105>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">R6 &amp; 
                        R7<O:P></O:P></SPAN></P>
                        <P class=MsoNormal 
                        style="TEXT-ALIGN: center; tab-stops: 63.0pt" 
                        align=center><SPAN lang=EN-US 
                        style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">R4 &amp; 

⌨️ 快捷键说明

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