求汇编大神帮我看下这段程序哪有错误?仿真后数码管显示0000?

2019-11-24 11:48发布

<p>本人汇编语言萌新,有好多不懂的地方,下面是程序,求大神解答<br></p><pre style="max-width: 100%;"><code class="cpp hljs" codemark="1"> OE BIT P2<span class="hljs-number">.7</span> ;ADC0808的OE端 EOC BIT P2<span class="hljs-number">.6</span> ;ADC0808的EOC端 ST BIT P2<span class="hljs-number">.5</span> ;ADC0808的START和ALE端 CS4 BIT P2<span class="hljs-number">.3</span> CS3 BIT P2<span class="hljs-number">.2</span> CS2 BIT P2<span class="hljs-number">.1</span> CS1 BIT P2<span class="hljs-number">.0</span> LED _0 DATA <span class="hljs-number">30</span>H ;显示缓冲区 LED_1 DATA <span class="hljs-number">31</span>H LED_2 DATA <span class="hljs-number">32</span>H LED_3 DATA <span class="hljs-number">33</span>H ADC DATA <span class="hljs-number">34</span>H ; 存放 转换后的数据 ORG <span class="hljs-number">0000</span>H AJMP START ORG <span class="hljs-number">0030</span>H ;--------------初始化------------------------------------------ START: MOV SP,<span class="hljs-meta">#60 ;设置堆栈</span> MOV LED_0,<span class="hljs-meta">#00H ;清空显示缓冲区</span> MOV LED_1,<span class="hljs-meta">#00H</span> MOV LED_2,<span class="hljs-meta">#00H</span> MOV LED_3,<span class="hljs-meta">#00H</span> MOV DPTR,<span class="hljs-meta">#TABLE ;送字形码表首地址</span> ;---------------ADC0808转换-------------------------------- AD_CONV: CLR ST SETB ST CLR ST ;启动转换 JNB EOC,$ ;等待转换结束 SETB OE ;允许输出 MOV ADC,P1 ;暂存转换结果 CLR OE ;关闭输出 ;---------------数据处理--------------------------------------- ADC_RD: MOV A,ADC ;将AD转换结果转换成BCD码 MOV B,<span class="hljs-meta">#0C4H ;乘以19.6mv(5V/255)</span> MUL AB ;AB相乘结果存在A MOV R7,A ;把A结果存在R7 MOV R6,B ;B中数据存在R6 TUNBCD: CLR A ;清空A CLR C ;清空C MOV R3,A ;清空R3 MOV R4,A ;清空R4 MOV R5,A ;清空R5 MOV R2,<span class="hljs-meta">#10H ;把10H赋给R2</span> T_BCD: MOV A,R7 ;把R7中结果赋给A RLC A ;将A循环左移 MOV R7,A ;将循环左移后的结果存在R7 MOV A,R6 ;把R6数据赋给A RLC A ;将A循环左移 MOV R6,A ;将循环左移结果给R6 MOV A,R5 ;把R5数据赋给A ADDC A,R5 ;把A和R5中数据相加 DA A ;将计算结果改为十进制 MOV R5,A ;把A中数据赋给R5 MOV A,R4 ;把R4中数据赋给A ADDC A,R4 ;把R4和A中数据相加 DA A ;把结果转换为十进制 MOV R4,A ;把转换后的结果赋给R4 MOV A,R3 ;把R3中数据赋给A ADDC A,R3 ;把A和R3中数据相加 MOV R3,A ;把相加结果存在R3 DJNZ R2,T_BCD ;R2<span class="hljs-number">-1</span>若不为零则跳到T_BCD MOV A,R5 ;把R5数据移到A SWAP A ;将A高四位和低四位互换 ANL A,<span class="hljs-meta">#0FH ;把A和0FH相与</span> MOV LED_0,A ;把相与结果存在LED_0 MOV A,R4 ;把R4结果存在A ANL A,<span class="hljs-meta">#0FH ;把A和0FH相与</span> MOV LED_1,A ;把相与后的结果存在LED_1 MOV A,R4 ;把R4结果存在A SWAP A ;把A高四位和低四位互换 ANL A,<span class="hljs-meta">#0FH ;把A和0FH相与</span> MOV LED_2,A ;把相与后的结果赋给LED_2 MOV A,R3 ;把R3数据赋给A ANL A,<span class="hljs-meta">#0FH ;把A和0FH相与</span> MOV LED_3,A ;把相与后的结果存在LED_3 LCALL DISP ;调用DISP函数 AJMP AD_CONV ;跳到AD_CONV执行 DISP: MOV A,LED_0 ;把LED_0的数据存在A CLR CS4 ;清空CS4 CLR CS3 ;清空CS3 CLR CS2 ;清空CS2 CLR CS1 ;清空CS1 MOVC A,@A+DPTR ;查表 SETB CS4 ;把CS4置<span class="hljs-number">1</span> MOV P0,A ;把A的数据存在P0 LCALL DELAY ;调用DELAY函数 CLR CS4 ;把CS4清零 MOV A,LED_1 ;把LED_1赋给A MOVC A,@A+DPTR ;查表 SETB CS3 ;把CS3置<span class="hljs-number">1</span> MOV P0,A ;把A的数据赋给P0 LCALL DELAY ;调用DELAY函数 CLR CS3 ;清零CS3 MOV A,LED_2 ;把LED_2的数据赋给A MOVC A,@A+DPTR ;查表 SETB CS2 ;把CS2置<span class="hljs-number">1</span> MOV P0,A ;把A中数据给P0 LCALL DELAY ;调用DELAY函数 CLR CS2 ;清空CS2 MOV A,LED_3 ;把LED_3中数据给A MOVC A,@A+DPTR ;查表 SETB CS1 ;把CS1置<span class="hljs-number">1</span> MOV P0,A ;把A中数据给P0 CLR P0<span class="hljs-number">.7</span> ;第一位显示小数点 LCALL DELAY ;调用DELAY函数 CLR CS1 ;清空CS1 RET DELAY: MOV R7,<span class="hljs-meta">#3 ;把3赋给R7</span> DELA: MOV R6,<span class="hljs-meta">#115 ;把115赋给R6</span> DJNZ R6,$ ;R6<span class="hljs-number">-1</span>若不为<span class="hljs-number">0</span>则跳到$ DJNZ R7,DELA ;R7<span class="hljs-number">-1</span>若不为<span class="hljs-number">0</span>则跳到DELA RET TABLE: DB <span class="hljs-number">0</span>C0H,<span class="hljs-number">0F</span>9H,<span class="hljs-number">0</span>A4H,<span class="hljs-number">0</span>B0H,<span class="hljs-number">99</span>H,<span class="hljs-number">92</span>H,<span class="hljs-number">82</span>H,<span class="hljs-number">0F</span>8H DB <span class="hljs-number">80</span>H,<span class="hljs-number">90</span>H,<span class="hljs-number">88</span>H,<span class="hljs-number">83</span>H,<span class="hljs-number">0</span>C6H,<span class="hljs-number">0</span>A1H,<span class="hljs-number">86</span>H,<span class="hljs-number">8</span>EH,<span class="hljs-number">6F</span>H END</code></pre><p><br></p><p><br></p>
4条回答
人中狼
1楼 · 2019-11-24 18:01.采纳回答
程序思路应该没问题,可以先屏蔽AD转换部分,单独调试数码管显示,设置固定的数值,看显示是否正确。
另外电路中ADC的数据口与P1口是反接的,就是DA1接到了P17,DA8接到了P10,所以或者修改电路,或者在读入ADC数据后,做一个数据位的调换处理
doublelove
2楼-- · 2019-11-24 13:16
测试过硬件有问题吗?
人中狼
3楼-- · 2019-11-24 15:44
 精彩回答 2  元偷偷看……
阿信509
4楼-- · 2019-11-24 19:49
都是先用最简单的程序开始调试

一周热门 更多>