AD问题

[复制链接]
2399|5
 楼主| hopewise 发表于 2011-7-14 16:33 | 显示全部楼层 |阅读模式
每次AD转换后都进行下面AD处理(8为AD,共256次),想了很久还是不明白---为何第⑨的结果(ad_dath)就是256次AD平均的数字?            
①         siz  n_ad            //n_ad增1,结果为零,则GOTO  voltage_chkok----------这个就是所谓的256次累加----------

②         jmp  voltage_chk2    //若结果不为0,则GOTO  voltage_chk2

             jmp  voltage_chkok
④  voltage_chk2:

             clr  c                     //清进位C
             mov  a,adrh          //ad采样结果(8位)送A
             adcm a,ad_datl     //采样结果累加,最后放ad_dath(高8位),ad_datl(低8位)---(在此过程中,注意进位标志)
             clr  acc        
             adcm a,ad_dath      
                ret
voltage_chkok:
                mov  a,ad_dath       //取高8位的AD结果,即ad_dath,送ad_dat,作为AD的最终结果
                mov  ad_dat,a
                clr  ad_datl             //采样结束,清ad_datl,ad_dath.为下一次采样做初始化准备
                clr  ad_dath
                ret
mcu5i51 发表于 2011-7-14 17:00 | 显示全部楼层
没分清是那种芯片;
从注释上看是把AD值相加256次,相当于 *256 ,取平均值在 /256 就好了,/256其实就是取高位字节,直接取多方便呀
joyme 发表于 2011-7-14 17:00 | 显示全部楼层
简单的除法,/256 就是去掉低8位(右移8位的效果)
 楼主| hopewise 发表于 2011-7-14 17:22 | 显示全部楼层
我搞软件时间不长,更不用说AD方面了,只是以后想学AD内容.
附件是朋友的一段内容.
       只是我还是不怎么明白2位高手的含义,可否祥细点?
       HT46R47
       为何adcm a,ad_datl这条指令所产生的C累加就是高字节内容?
       我不明白它怎么就右移了8位?
joyme 发表于 2011-7-14 17:59 | 显示全部楼层
它没有做移位的动作,而是只是取了高8位即ad_dath,我所说的移位是让你用16位的概念理解,8位的数据+256次到一个16位的变量里,那么除以256就是右移8位或取高8位。
用汇编写8位单片机不能直接处理16位的变量,所以用了ad_datl和ad_dath两个8位变量
clr acc
adcm a,ad_dath 就完成了C累加到ad_dath的功能
觉得汇编难以理解就直接写C多好
 楼主| hopewise 发表于 2011-7-14 19:22 | 显示全部楼层
经你指点,我终明白了,非常感谢joyme的无私热心的正确的回答.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

468

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部