• 8
    回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

请教大家:AD转换结果寄存器

分为转换结果的高4位(如:00001101)和转换结果的低8位(如:10001001),共12位输出.用什么方法或指令把这两个寄存器里的数合并在一起,然后再和设定的寄存器里的内容(8位)进行比较.
全部回复(8)
正序查看
倒序查看
sdjufeng
LV.6
2
2006-03-22 19:43
只需把两个字节的转换结果连起来右移四位,变成单字节,然后就可以与你的设定值相比较了.
0
回复
hxdjb
LV.4
3
2006-03-22 20:16
@sdjufeng
只需把两个字节的转换结果连起来右移四位,变成单字节,然后就可以与你的设定值相比较了.
那样转换精度会不会降低,本来是12位数字量精度.用什么指令把两个字节的连起来?谢谢!
0
回复
sdjufeng
LV.6
4
2006-03-22 20:55
@hxdjb
那样转换精度会不会降低,本来是12位数字量精度.用什么指令把两个字节的连起来?谢谢!
你可以先把两字节的数据暂存一下,右移只是为了比较而已,为了与8位的单字节相比较,必须这样做,另一种防办法就是把8位的数据左移4位,然后比较,不麻烦吗?
右移四位很简单:

MOV    R2,#4
MOV    R5,ByteH
MOV    R4,ByteL
LOOP:
MOV    A,R5
CLR    C
RRC    A
MOV    R5,A
MOV    A,R4
RRC    A
MOV    R4,A
DJNZ   R2,LOOP
CJNE   A,ByteRef,$+3
JNC    BigOrEqu
0
回复
hxdjb
LV.4
5
2006-03-22 21:32
@sdjufeng
你可以先把两字节的数据暂存一下,右移只是为了比较而已,为了与8位的单字节相比较,必须这样做,另一种防办法就是把8位的数据左移4位,然后比较,不麻烦吗?右移四位很简单:MOV    R2,#4MOV    R5,ByteHMOV    R4,ByteLLOOP:MOV    A,R5CLR    CRRC    AMOV    R5,AMOV    A,R4RRC    AMOV    R4,ADJNZ  R2,LOOPCJNE  A,ByteRef,$+3JNC    BigOrEqu
如果我要得到12位高精度的转换结果就只能把RC,RD合在一起,然后右移变成8位.
如果我只要得到8位精度的转换结果,就可以直接读取RB里的数据.
也就是两种结果的精度是不一样的,是吗?500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/39/1143034354.gif');}" onmousewheel="return imgzoom(this);">
0
回复
sdjufeng
LV.6
6
2006-03-22 22:28
@hxdjb
如果我要得到12位高精度的转换结果就只能把RC,RD合在一起,然后右移变成8位.如果我只要得到8位精度的转换结果,就可以直接读取RB里的数据.也就是两种结果的精度是不一样的,是吗?[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/39/1143034354.gif');}"onmousewheel="returnimgzoom(this);">
是的
0
回复
hxdjb
LV.4
7
2006-03-23 09:19
@sdjufeng
是的
非常感谢SDJUFENG的热心帮助,谢谢!
0
回复
sdjufeng
LV.6
8
2006-03-23 09:27
@hxdjb
如果我要得到12位高精度的转换结果就只能把RC,RD合在一起,然后右移变成8位.如果我只要得到8位精度的转换结果,就可以直接读取RB里的数据.也就是两种结果的精度是不一样的,是吗?[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/39/1143034354.gif');}"onmousewheel="returnimgzoom(this);">
你用的这种单片机是用这种方法实现8/12位精度转换的,ADuC812的方式是有一个精度设置位A,当设置成8位精度时,结果高字节无效.
0
回复
hxdjb
LV.4
9
2006-03-23 12:44
@sdjufeng
你用的这种单片机是用这种方法实现8/12位精度转换的,ADuC812的方式是有一个精度设置位A,当设置成8位精度时,结果高字节无效.
我用的是义隆78P417单片机.500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/39/1143089073.gif');}" onmousewheel="return imgzoom(this);">
0
回复