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

📄 c51pickfrankasm.htm

📁 这是有关C51和A51函数互调的方法总结.应用于混和编程.
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                        style="FONT-SIZE: 9pt">;用于存放第一个int参数的变量</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="10%"><SPAN 
                      style="FONT-SIZE: 9pt">b_v:</SPAN></TD>
                      <TD width="20%"><SPAN style="FONT-SIZE: 9pt">DS 2 
                      </SPAN></TD>
                      <TD width="70%"><SPAN 
                        style="FONT-SIZE: 9pt">;用于存放第二个int参数的变量</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="10%"><SPAN 
                        style="FONT-SIZE: 9pt">result:</SPAN></TD>
                      <TD width="20%"><SPAN style="FONT-SIZE: 9pt">DS 1 
                      </SPAN></TD>
                      <TD width="70%"><SPAN 
                        style="FONT-SIZE: 9pt">;存放func函数char结果的变量</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="10%"></TD>
                      <TD width="90%"><SPAN 
                        style="FONT-SIZE: 9pt">RSEG&nbsp;&nbsp; 
                    STACK</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="10%"></TD>
                      <TD width="20%"><SPAN 
                        style="FONT-SIZE: 9pt">DS&nbsp;&nbsp;&nbsp;&nbsp; 
                        20H</SPAN></TD>
                      <TD width="70%"><SPAN 
                        style="FONT-SIZE: 9pt">;为堆栈保留32个字节</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="10%"></TD>
                      <TD width="20%"><SPAN 
                        style="FONT-SIZE: 9pt">RSEG&nbsp;&nbsp; 
funca51</SPAN></TD>
                      <TD width="70%"><SPAN 
                        style="FONT-SIZE: 9pt">;funca51代码段起始</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="10%"></TD>
                      <TD width="90%"><SPAN 
                        style="FONT-SIZE: 9pt">JMP&nbsp;&nbsp;&nbsp; 
                      START</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="9%"><SPAN 
                      style="FONT-SIZE: 9pt">START:</SPAN></TD>
                      <TD width="10%"><SPAN 
                      style="FONT-SIZE: 9pt">MOV</SPAN></TD>
                      <TD width="18%"><SPAN 
                        style="FONT-SIZE: 9pt">SP,#STACK-1</SPAN></TD>
                      <TD width="63%"><SPAN 
                        style="FONT-SIZE: 9pt">;初始化堆栈</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="9%"></TD>
                      <TD width="28%"><SPAN 
                        style="FONT-SIZE: 9pt">MOV&nbsp;&nbsp;&nbsp; 
                        ?func?BYTE+0,a_v+0 </SPAN></TD>
                      <TD width="63%"><SPAN 
                        style="FONT-SIZE: 9pt">;取第一个int参数</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="9%"></TD>
                      <TD width="10%"><SPAN 
                      style="FONT-SIZE: 9pt">MOV</SPAN></TD>
                      <TD width="81%"><SPAN 
                        style="FONT-SIZE: 9pt">?func?BYTE+1,a_v+1</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="9%"></TD>
                      <TD width="10%"><SPAN 
                      style="FONT-SIZE: 9pt">MOV</SPAN></TD>
                      <TD width="22%"><SPAN 
                        style="FONT-SIZE: 9pt">?func?BYTE+2,b_v+0</SPAN></TD>
                      <TD width="59%"><SPAN 
                        style="FONT-SIZE: 9pt">;取第二个int参数</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="15%"></TD>
                      <TD width="85%"></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="9%"></TD>
                      <TD width="10%"><SPAN 
                      style="FONT-SIZE: 9pt">MOV</SPAN></TD>
                      <TD width="22%"><SPAN 
                        style="FONT-SIZE: 9pt">?func?BYTE+3,b_v+1</SPAN></TD>
                      <TD width="59%"></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="9%"></TD>
                      <TD width="10%"><SPAN 
                      style="FONT-SIZE: 9pt">LCALL</SPAN></TD>
                      <TD width="18%"><SPAN 
                      style="FONT-SIZE: 9pt">func</SPAN></TD>
                      <TD width="63%"><SPAN 
                        style="FONT-SIZE: 9pt">;调用C函数func</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="9%"></TD>
                      <TD width="10%"><SPAN 
                      style="FONT-SIZE: 9pt">MOV</SPAN></TD>
                      <TD width="18%"><SPAN 
                        style="FONT-SIZE: 9pt">result,R7</SPAN></TD>
                      <TD width="63%"><SPAN 
                      style="FONT-SIZE: 9pt">;存取结果</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="9%"></TD>
                      <TD width="91%"><SPAN 
                      style="FONT-SIZE: 9pt">END</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <P align=justify><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp; 
                  分别用C51和A51编译器对上述func51.C和ASM51.A51编译,再执行连接L51 
                  ASM51.OBJ,func51.OBJ 
                  NOOVERLAY,即可实现在ASM51中调用C函数func。连接时选择NOOVERLAY是为了禁止数据段和位段的覆盖。</SPAN><B></P>
                  <P align=justify><SPAN style="FONT-SIZE: 9pt"><FONT 
                  color=#800080>3.2 在C51中调用汇编程序</FONT></SPAN></B></P>
                  <P><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp; 
                  下面以8051和DS1820接口程序为例来说明在C中调用汇编程序的方法。Dallas公司的DS1820是一种数字式温度计,它与微控制器接口只需一根I/O线,所有的命令、状态和9位温度读数均通过单线双向传送。虽然该器件的硬件接口十分简单,但对读/写时序中的时间片精度要求严格,因而,本例接口程序采用汇编语言编写,主程序及修正温度值的计算部分用C语言编写。本例假定读者对DS1820有所了解,不然请参阅Dallas公司有关DS1820的数据资料。<BR>&nbsp;&nbsp; 
                  以下是8051微控制器与DS1820接口的C源程序,本程序要求8051的P1.0与DS1820连接,工作频率12MHz。清单中error(char)和display(char 
                  *)分别是错误处理和LCD显示处理函数,限于篇幅未给出。</SPAN></P></TD></TR>
              <TR>
                <TD colSpan=2 width="100%"><SPAN 
                  style="FONT-SIZE: 9pt">#include &lt;reg51.h&gt; </SPAN></TD></TR>
              <TR>
                <TD colSpan=2 width="100%"><SPAN 
                  style="FONT-SIZE: 9pt">#include &lt;stdio.h&gt; </SPAN></TD></TR>
              <TR>
                <TD colSpan=2 width="100%"><SPAN 
                  style="FONT-SIZE: 9pt">#include &lt;math.h&gt;</SPAN></TD></TR>
              <TR>
                <TD width="31%"><SPAN style="FONT-SIZE: 9pt">extern 
                  WDS1820(unsigned char x);</SPAN></TD>
                <TD width="69%"><SPAN style="FONT-SIZE: 9pt">/* 
                  写DS1820命令外部函数声明 */</SPAN></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="44%"><SPAN style="FONT-SIZE: 9pt">extern 
                        RDS1820(unsigned char *pt);</SPAN></TD>
                      <TD width="56%"><SPAN style="FONT-SIZE: 9pt">/* 
                        读DS1820数据外部函数声明 */</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD width="40%"><SPAN style="FONT-SIZE: 9pt">extern bit 
                  RTDS1820(void);</SPAN></TD>
                <TD width="60%"><SPAN style="FONT-SIZE: 9pt">/* 复位DS1820外部函数声明 
                  */</SPAN></TD></TR>
              <TR>
                <TD width="46%"><SPAN style="FONT-SIZE: 9pt">extern 
                  Delay15(unsigned char n);</SPAN></TD>
                <TD width="54%"><SPAN style="FONT-SIZE: 9pt">/* 延时15μs外部函数声明 
                  */</SPAN></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="28%"><SPAN style="FONT-SIZE: 9pt">sbit 
                        P1_0=P1^0;</SPAN></TD>
                      <TD width="72%"><SPAN style="FONT-SIZE: 9pt">/* 
                        sbit对象P1.0声明 */</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%">
                  <TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
                    <TBODY>
                    <TR>
                      <TD width="28%"><SPAN style="FONT-SIZE: 9pt">void main 
                        (void)</SPAN></TD>
                      <TD width="72%"><SPAN style="FONT-SIZE: 9pt">/* 主函数 
                        */</SPAN></TD></TR></TBODY></TABLE></TD></TR>
              <TR>
                <TD colSpan=2 width="100%"><SPAN 
                  style="FONT-SIZE: 9pt">{</SPAN></TD></TR>
              <TR>

⌨️ 快捷键说明

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