51单片机怎么处理24位数据?
比如我从AD那里收到一个24位的数据0FFFFFFH,我怎么把数据转化为10进制,并用LED显示,我需要汇编代码,显示部分不用,主要是转化部分高手帮帮忙啊...
比如我从AD那里收到一个24位的数据0FFFFFFH,我怎么把数据转化为10进制,并用LED显示,我需要汇编代码,显示部分不用,主要是转化部分
高手帮帮忙啊 展开
高手帮帮忙啊 展开
1个回答
展开全部
3字节二进制数范围为0-16777215,所以需要8位数码管来显示这个数
假如我们收到的三字节数为0E23456H=14824534(十进制)
那么,若想将其显示出来,我们需分别求出1,4,8,2,4,5,3,4 这8个数,
分别将其放入相应的内存单元,供显示程序读取。
现在的关键问题就是如何从0E23456H得到1,4,8,2,4,5,3,4
我们知道,0E23456H=14824534=1*10000000+4*1000000+8*100000+2*10000+4*1000+5*100+3*10*4*1
这就是十进制
所以,我们只需将14824534除以10000000,商即为10000000的权值,结果是1;余数为4824534,再除以1000000,商即为
1000000的权值,结果是4;余数为824534,再除以100000,....;余数为34,再除以10,得3,为10的权值;余数为4,为
1的权值.
8个数都求出来了
ok
如果你觉得3字节除以3字节的子程序比较难编,我这有个4字节除以2字节的子程序,你可以先把14824534除以10000得到
1482,然后用1482除以1000得1,余数除以100得4,再余数除以10得8,再余数为2。然后用14824534-1482*10000得到4534,
同样的方法得到4,5,3,4
HOHO~
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;函数名称:无符号32位被除数除以16位除数子程序
;说明: 除数不能为0,适用于商不大于2字节的除法
;入口参数:BCS4,BCS3,BCS2,BCS1; CS2,CS1 (4字节被乘数和2字节乘数,高字节在前)
;出口参数:BCS4,BCS3,BCS2,BCS1 (BCS4BCS3为余数;BCS2BCS1为商,高字节在前)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCS4 EQU 60H
BCS3 EQU 61H
BCS2 EQU 62H
BCS1 EQU 63H
CS2 EQU 64H
CS1 EQU 65H
DIV32: MOV B,#16
DIV32LOOP1:CLR C
MOV A,BCS1
RLC A
MOV BCS1,A
MOV A,BCS2
RLC A
MOV BCS2,A
MOV A,BCS3
RLC A
MOV BCS3,A
XCH A,BCS4
RLC A
XCH A,BCS4
MOV PSW.5,C
CLR C
SUBB A,CS1
MOV 66H,A
MOV A,BCS4
SUBB A,CS2
JB PSW.5,DIV32LOOP2
JC DIV32LOOP3
DIV32LOOP2:MOV BCS4,A
MOV A,66H
MOV BCS3,A
INC BCS1
DIV32LOOP3:DJNZ B,DIV32LOOP1
CLR PSW.5
DIV32DONE:RET
DIV32LOOP4:SETB PSW.5
SJMP DIV32DONE
假如我们收到的三字节数为0E23456H=14824534(十进制)
那么,若想将其显示出来,我们需分别求出1,4,8,2,4,5,3,4 这8个数,
分别将其放入相应的内存单元,供显示程序读取。
现在的关键问题就是如何从0E23456H得到1,4,8,2,4,5,3,4
我们知道,0E23456H=14824534=1*10000000+4*1000000+8*100000+2*10000+4*1000+5*100+3*10*4*1
这就是十进制
所以,我们只需将14824534除以10000000,商即为10000000的权值,结果是1;余数为4824534,再除以1000000,商即为
1000000的权值,结果是4;余数为824534,再除以100000,....;余数为34,再除以10,得3,为10的权值;余数为4,为
1的权值.
8个数都求出来了
ok
如果你觉得3字节除以3字节的子程序比较难编,我这有个4字节除以2字节的子程序,你可以先把14824534除以10000得到
1482,然后用1482除以1000得1,余数除以100得4,再余数除以10得8,再余数为2。然后用14824534-1482*10000得到4534,
同样的方法得到4,5,3,4
HOHO~
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;函数名称:无符号32位被除数除以16位除数子程序
;说明: 除数不能为0,适用于商不大于2字节的除法
;入口参数:BCS4,BCS3,BCS2,BCS1; CS2,CS1 (4字节被乘数和2字节乘数,高字节在前)
;出口参数:BCS4,BCS3,BCS2,BCS1 (BCS4BCS3为余数;BCS2BCS1为商,高字节在前)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCS4 EQU 60H
BCS3 EQU 61H
BCS2 EQU 62H
BCS1 EQU 63H
CS2 EQU 64H
CS1 EQU 65H
DIV32: MOV B,#16
DIV32LOOP1:CLR C
MOV A,BCS1
RLC A
MOV BCS1,A
MOV A,BCS2
RLC A
MOV BCS2,A
MOV A,BCS3
RLC A
MOV BCS3,A
XCH A,BCS4
RLC A
XCH A,BCS4
MOV PSW.5,C
CLR C
SUBB A,CS1
MOV 66H,A
MOV A,BCS4
SUBB A,CS2
JB PSW.5,DIV32LOOP2
JC DIV32LOOP3
DIV32LOOP2:MOV BCS4,A
MOV A,66H
MOV BCS3,A
INC BCS1
DIV32LOOP3:DJNZ B,DIV32LOOP1
CLR PSW.5
DIV32DONE:RET
DIV32LOOP4:SETB PSW.5
SJMP DIV32DONE
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询