打印

例程看不懂

[复制链接]
4265|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
wenfen|  楼主 | 2010-7-31 11:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
AD, ADC, dc, DCM, tmp
计算总和并存放在ADC_DH4T 和ADC_DL4(包括两个被清零的)
CAL_AD_ADD:
LDI TMP4,00H;清0
LDA ADC_DL1,01H;取ADC_DL1值
ADDM ADC_DL2,01H;ADC_DL1、ADC_DL2相加
LDA ADC_DH1,01H;取ADC_DH1值
ADCM ADC_DH2,01H;ADC_DH1、ADC_DH2相加(带进位)
LDI TBR,00H;A=0
ADCM TMP4,00H;相加后不是0吗(CY=0时)??????
LDA ADC_DL2,01H
ADDM ADC_DL3,01H
LDA ADC_DH2,01H
ADCM ADC_DH3,01H
139
LDI TBR,00H
ADCM TMP4,00H
LDA ADC_DL3,01H
ADDM ADC_DL4,01H
LDA ADC_DH3,01H
ADCM ADC_DH4,01H
LDI TBR,00H
ADCM TMP4,00H
27
88386523| | 2010-8-4 12:35 | 只看该作者
看不懂

使用特权

评论回复
26
zhaoyunfeng001| | 2010-8-3 22:57 | 只看该作者
好牛的程序

使用特权

评论回复
25
juginhine| | 2010-8-3 09:19 | 只看该作者
呵呵LZ提出的兩個運算可以這樣理解。
第一個運算是4個8位數的加法。每兩個8位數相加,結果都有可能產生進位而溢出。如FF+FF=1FE。所以才有兩個8位數相加的結果是12位數。最後的加0是為了記錄進位標誌。
第二個問題是除2運算了。除2運算採用的是右移運算。我們將12bit數當作一個整體看。低4bit右移產生的CY其實就是12位數據的bit0位,而中間4bit右移產生的CY其實是bit4(相當於10h除2等於8一樣),高4位右移產生的CY是bit8(相當於100h除2等於80h一樣).所以每次的右移中低位的CY可以忽略,而中4bit和高4bit的CY是一定要保存結果的。

使用特权

评论回复
24
pkat| | 2010-8-2 17:58 | 只看该作者
汇编?也不是太懂,学习了

使用特权

评论回复
23
huwr| | 2010-7-31 18:51 | 只看该作者
楼上这位大哥怎么到处留笑脸啊,哈哈

使用特权

评论回复
22
subrinalilac| | 2010-7-31 15:20 | 只看该作者
:D

使用特权

评论回复
21
subrinalilac| | 2010-7-31 15:19 | 只看该作者
:lol

使用特权

评论回复
20
wenfen|  楼主 | 2010-7-31 13:38 | 只看该作者
嗯,好的,我有机会试试

使用特权

评论回复
19
tian111| | 2010-7-31 13:37 | 只看该作者
你可以自己修改一下程序,把这个余数利用起来。

使用特权

评论回复
18
wenfen|  楼主 | 2010-7-31 13:35 | 只看该作者
呵呵,挺有意思的

使用特权

评论回复
17
tian111| | 2010-7-31 13:34 | 只看该作者
是的,这个除2是结果取整。

使用特权

评论回复
16
wenfen|  楼主 | 2010-7-31 13:32 | 只看该作者
对啊,那个余数如果不管CY的话,不就是没了吗?

使用特权

评论回复
15
tian111| | 2010-7-31 13:31 | 只看该作者
当然是这样了,0011为3,除以2后,结果为1,余1。

使用特权

评论回复
14
wenfen|  楼主 | 2010-7-31 13:30 | 只看该作者
假如低位为0011的话,如果不管CY的话,经过SHR指令之后就变成0001了,那个小数就不要了,如果加上的话,就比除以2后的结果大了,那在实际应用中必须要舍去那个小数0.5??

使用特权

评论回复
13
chenho| | 2010-7-31 11:47 | 只看该作者
除以2后是要得到一个整数还是要精确到小数点后一位?

使用特权

评论回复
12
tian111| | 2010-7-31 11:47 | 只看该作者
为什么要判断低位的CY,判断它有什么用呢?

使用特权

评论回复
11
wenfen|  楼主 | 2010-7-31 11:43 | 只看该作者
总和除以2,得到平均值,存放在ADC_DH4T 和ADC_DL4
CAL_AD_DIV:
LDA ADC_DL4,01H
SHR
STA ADC_DL4,01H
LDA ADC_DH4,01H
SHR
STA ADC_DH4,01H
BNC $+3
LDI TBR,1000B
ORM ADC_DL4,01H
LDA TMP4,00H
SHR
BNC $+3
LDI TBR,1000B
ORM ADC_DH4,01H
;----------------------------
CAL_ADCDATA_END:
RTNI
;************************************************
为什么不判断低位的CY呢???

使用特权

评论回复
10
tian111| | 2010-7-31 11:38 | 只看该作者
ADCM指令是将M的值加上A再加上CY,而在实际操作中我们只要加上CY而不想加A,故在执行ADCM前先把A值清零。

使用特权

评论回复
9
wenfen|  楼主 | 2010-7-31 11:38 | 只看该作者
我没看懂的时候就返回看这个ADCM指令了,还是没有看懂
我看着是为了加那个进位CY才用的着两条指令
LDI TBR,00H
ADCM TMP4,00H

使用特权

评论回复
8
tian111| | 2010-7-31 11:36 | 只看该作者
你去查一下ADCM指令的介绍就清楚了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

737

主题

8940

帖子

8

粉丝