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

📄 上海齐济电子-应用技巧-pic单片机开发的若干问题.htm

📁 一些收集到的PIC文章
💻 HTM
📖 第 1 页 / 共 3 页
字号:
          <TD width="8%"></TD>
          <TD width="92%"><SPAN style="FONT-SIZE: 9pt">&nbsp; 
        c=a*b;</SPAN></TD></TR>
        <TR>
          <TD width="8%"></TD>
          <TD width="92%"><SPAN style="FONT-SIZE: 9pt">} 
            /*得不到正确的结果c=400*/</SPAN></TD></TR></TBODY></TABLE>
      <P align=justify><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp; 
      原因是Mplab-C以8×8乘法方式来编译c=a*b,返回单字节结果给c,结果的溢出被忽略。改上例中的“c=a*b;”表达式为“c=a;c=c*b;”,最为安全(对加法的处理同上)。</SPAN></P><B>
      <P align=justify><FONT color=#008080><SPAN style="FONT-SIZE: 9pt">3.3 
      了解乘除法函数对寄存器的占用</SPAN></FONT></P></B>
      <P align=justify><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp; 
      由于PIC片内RAM仅几十个字节,空间特别宝贵,而Mplab-C编译器对RAM地址具有不释放性,即一个变量使用的地址不能再分配给其它变量。如RAM空间不能满足太多变量的要求,一些变量只能由用户强制分配相同的RAM空间交替使用。而Mplab-C中的乘除法函数需借用RAM空间来存放中间结果,所以如果乘除法函数占用的RAM与用户变量的地址重叠时,就会导致出现不可预测的结果。如果C程序中用到乘除法运算,最好先通过程序机器码的反汇编代码(包含在生成的LST文件中)查看乘除法占用地址是否与其它变量地址有冲突,以免程序跑飞。Mplab-C手册并没有给出其乘除法函数对具体RAM地址的占用情况。例5是乘法函数对0×13、0×14、0×19、0×1A地址占用情况。</SPAN></P>
      <BLOCKQUOTE>
        <P align=justify><FONT color=#008080><STRONG><SPAN 
        style="FONT-SIZE: 9pt">例5</SPAN></STRONG></FONT></P></BLOCKQUOTE>
      <TABLE border=0 width="100%">
        <TBODY>
        <TR>
          <TD width="29%"></TD>
          <TD colSpan=3 width="71%"><SPAN 
          style="FONT-SIZE: 9pt">部分反汇编代码</SPAN></TD></TR>
        <TR>
          <TD width="29%"><SPAN style="FONT-SIZE: 9pt">#include 
            &lt;pic16c71&gt;</SPAN></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">01A7</SPAN></TD>
          <TD width="15%"><SPAN style="FONT-SIZE: 9pt">081F</SPAN></TD>
          <TD width="40%"><SPAN style="FONT-SIZE: 9pt">MOVF 1F,W</SPAN></TD></TR>
        <TR>
          <TD width="29%"><SPAN 
            style="FONT-SIZE: 9pt">#include&lt;math.h&gt;</SPAN></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">01A8</SPAN></TD>
          <TD width="15%"><SPAN style="FONT-SIZE: 9pt">0093</SPAN></TD>
          <TD width="40%"><SPAN style="FONT-SIZE: 9pt">MOVWF 13</SPAN></TD></TR>
        <TR>
          <TD width="29%"></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">;借用</SPAN></TD>
          <TD width="15%"></TD>
          <TD width="40%"></TD></TR>
        <TR>
          <TD width="29%"><SPAN style="FONT-SIZE: 9pt">unsigned long Value 
            @0x1</SPAN></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">01A9</SPAN></TD>
          <TD width="15%"><SPAN style="FONT-SIZE: 9pt">0820</SPAN></TD>
          <TD width="40%"><SPAN style="FONT-SIZE: 9pt">MOVF 20,W</SPAN></TD></TR>
        <TR>
          <TD width="29%"><SPAN style="FONT-SIZE: 9pt">char Xm 
@0x2d;</SPAN></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">01AA</SPAN></TD>
          <TD width="15%"><SPAN style="FONT-SIZE: 9pt">0094</SPAN></TD>
          <TD width="40%"><SPAN style="FONT-SIZE: 9pt">MOVWF 14</SPAN></TD></TR>
        <TR>
          <TD width="29%"></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">;借用</SPAN></TD>
          <TD width="15%"></TD>
          <TD width="40%"></TD></TR>
        <TR>
          <TD width="29%"><SPAN style="FONT-SIZE: 9pt">void main()</SPAN></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">01AB</SPAN></TD>
          <TD width="15%"><SPAN style="FONT-SIZE: 9pt">082D</SPAN></TD>
          <TD width="40%"><SPAN style="FONT-SIZE: 9pt">MOVF 2D,W</SPAN></TD></TR>
        <TR>
          <TD width="29%"><SPAN style="FONT-SIZE: 9pt">{Value=20;</SPAN></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">01AC</SPAN></TD>
          <TD width="15%"><SPAN style="FONT-SIZE: 9pt">0099</SPAN></TD>
          <TD width="40%"><SPAN style="FONT-SIZE: 9pt">MOVWF 19</SPAN></TD></TR>
        <TR>
          <TD width="29%"></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">;借用</SPAN></TD>
          <TD width="15%"></TD>
          <TD width="40%"></TD></TR>
        <TR>
          <TD width="29%"><SPAN style="FONT-SIZE: 9pt">Xm=40;</SPAN></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">01AD </SPAN></TD>
          <TD width="15%"><SPAN style="FONT-SIZE: 9pt">019A</SPAN></TD>
          <TD width="40%"><SPAN style="FONT-SIZE: 9pt">CLRF1A</SPAN></TD></TR>
        <TR>
          <TD width="29%"></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">;借用</SPAN></TD>
          <TD width="15%"></TD>
          <TD width="40%"></TD></TR>
        <TR>
          <TD width="29%"><SPAN 
style="FONT-SIZE: 9pt">Value=Value*Xm</SPAN></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">01AE</SPAN></TD>
          <TD width="15%"><SPAN style="FONT-SIZE: 9pt">235F</SPAN></TD>
          <TD width="40%"><SPAN style="FONT-SIZE: 9pt">CALL 035Fh</SPAN></TD></TR>
        <TR>
          <TD width="29%"></TD>
          <TD colSpan=3 width="71%"><SPAN 
          style="FONT-SIZE: 9pt">;调用乘法函数</SPAN></TD></TR>
        <TR>
          <TD width="29%"><SPAN style="FONT-SIZE: 9pt">……</SPAN></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">01AF</SPAN></TD>
          <TD width="15%"><SPAN style="FONT-SIZE: 9pt">1283</SPAN></TD>
          <TD width="40%"><SPAN style="FONT-SIZE: 9pt">BCF 03,5</SPAN></TD></TR>
        <TR>
          <TD width="29%"><SPAN style="FONT-SIZE: 9pt">}</SPAN></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">01B0</SPAN></TD>
          <TD width="15%"><SPAN style="FONT-SIZE: 9pt">009F</SPAN></TD>
          <TD width="40%"><SPAN style="FONT-SIZE: 9pt">MOVWF 1F</SPAN></TD></TR>
        <TR>
          <TD width="29%"></TD>
          <TD colSpan=3 width="71%"><SPAN 
            style="FONT-SIZE: 9pt">;返回结果低字节</SPAN></TD></TR>
        <TR>
          <TD width="29%"></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">01B1</SPAN></TD>
          <TD width="15%"><SPAN style="FONT-SIZE: 9pt">0804</SPAN></TD>
          <TD width="40%"><SPAN style="FONT-SIZE: 9pt">MOVF 04,W</SPAN></TD></TR>
        <TR>
          <TD width="29%"></TD>
          <TD width="16%"><SPAN style="FONT-SIZE: 9pt">01B2</SPAN></TD>
          <TD width="15%"><SPAN style="FONT-SIZE: 9pt">00A0</SPAN></TD>
          <TD width="40%"><SPAN style="FONT-SIZE: 9pt">MOVWF 20</SPAN></TD></TR>
        <TR>
          <TD width="29%"></TD>
          <TD colSpan=3 width="71%"><SPAN 
            style="FONT-SIZE: 9pt">;返回结果高字节</SPAN></TD></TR></TBODY></TABLE><B>
      <P align=justify><FONT color=#008080><SPAN style="FONT-SIZE: 9pt">4 
      对芯片重复编程</SPAN></FONT></P></B>
      <P align=justify><SPAN style="FONT-SIZE: 9pt">&nbsp;&nbsp;&nbsp; 
      对无硬件仿真器的用户,总是选用带EPROM的芯片来调试程序。每更改一次程序,都是将原来的内容先擦除,再编程,其过程浪费了相当多的时间,又缩短了芯片的使用寿命。如果后一次编程的结果较前一次,仅是对应的机器码字节的相同位由“1”变成“0”,就可在前一次编程芯片上再次写入数据,而不必擦除原片内容。<BR>&nbsp;&nbsp;&nbsp; 
      在程序的调试过程中,经常遇到常数的调整,如常数的改变能保证对应位由“1”变“0”,都可在原片内容的基础继续编程。另外,由于指令“NOP”对应的机器码为“00”,调试过程中指令的删除,先用“NOP”指令替代,编译后也可在原片内容上继续编程。<BR>&nbsp;&nbsp;&nbsp; 
      另外,在对带EPROM的芯片编程时,特别注意程序保密状态位。厂家对新一代带EPROM芯片的保密状态位已由原来的EPROM可擦型改为了熔丝型,一旦程序代码保密熔丝编程为“0”,可重复编程的 
      EPROM 芯片就无法再次编程了。使用时应注意这点,以免造成不必要的浪费(Microchip 资料并未对此做出说明)。</SPAN></P>
      <P align=left><FONT face=楷体_GB2312 size=3></FONT><FONT 
      color=#008080><STRONG><SPAN 
      style="FONT-SIZE: 9pt">参考文献</SPAN></STRONG></FONT></P>1 Micorchip PIC16Cxx 
      Data Book
      <P></P>2 MPLAB-C USER’S GUIDE <!-- InstanceEndEditable --></SPAN></TD></TR>
  <TR>
    <TD>&nbsp;</TD></TR>
  <TR align=middle>
    <TD><A href="http://www.chipgem.com.cn/refer/yyjq80.htm#"><IMG border=0 
      src="上海齐济电子-应用技巧-PIC单片机开发的若干问题.files/img_top_cn.gif"></A> <A 
      href="javascript:window.print()"><IMG border=0 
      src="上海齐济电子-应用技巧-PIC单片机开发的若干问题.files/img_print_cn.gif"></A> <A 
      href="javascript:window.close()"><IMG border=0 
      src="上海齐济电子-应用技巧-PIC单片机开发的若干问题.files/img_close_cn.gif"></A></TD></TR></TBODY></TABLE>
<TABLE align=center border=0 borderColor=#0099ff width=768>
  <TBODY>
  <TR>
    <TD>
      <HR align=center class=hr SIZE=1 width="100%">
    </TD></TR>
  <TR align=middle>
    <TD class=footer>上海市大连路1548号莱克大厦26D(200092) 电话:021-65630199 65630173 
      65630142 传真:021-65630332<BR>上海齐济电子有限公司 <A 
      href="http://www.chipgem.com.cn/refer/yyjq80.htm#" 
      onclick="javascript:window.external.addFavorite('http://www.chipgem.com.cn','上海齐济电子有限公司')">http://www.chipgem.com.cn/refer/yyjq80.htm#</A> 
      Copyright&copy;2003-2004</TD></TR></TBODY></TABLE><!-- InstanceEnd --></BODY></HTML>

⌨️ 快捷键说明

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