<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>
另外电路中ADC的数据口与P1口是反接的,就是DA1接到了P17,DA8接到了P10,所以或者修改电路,或者在读入ADC数据后,做一个数据位的调换处理
一周热门 更多>