AT89S51 8位单片机 如何处理16位二进制数

[复制链接]
查看11 | 回复2 | 2009-10-9 07:51:36 | 显示全部楼层 |阅读模式
用C语言写啊C语言的INT型就是16位的,不用转换unsigned int a=12345;for(i=0;i<5;i++){//先从个位开始显示display(i,a%10);//假设在第i位显示一个数的函数是display(i,什么);a/=10;}
回复

使用道具 举报

千问 | 2009-10-9 07:51:36 | 显示全部楼层
我的想法是提取出5位数中的各个位。例如变量temp=65535,万位=temp/10000;千位=(temp/1000)%10,百位=(temp/100)%10,十位=(temp/10)%10,各位=temp%10。然后将各个位送到数码管显示函数。 补充个:楼主的意思是这个16位二进制数不是内部定义,而是从其他器件分两次接收到的吗?如果是的话,可以这样子做。typedef union{
unsigned int hex;
unsigned char octal[2];} CONVERT;CONVERT example;把接收到的两个8位二进制数分别存入example.octal[0]、example.octal[1]。然后用example.hex这个完整的16位二进制数来求得对应的十进制数的各个位。只是这样子做需要注意存储格式,即大端和小端。呵呵,如果我的猜测是错的话,那我也只能说是江郎才尽了。
回复

使用道具 举报

千问 | 2009-10-9 07:51:36 | 显示全部楼层
参考一下我的这个子程序吧.adjusttobcd:
mov a,voll
;adjust hex data(volh and voll) to decimal data
mov b,#100
div ab
add a,volh
mov volh,a
jnc adjustcarry1
inc volint
inc volint
mov a,#56
add a,volh
mov volh,aadjustcarry1:
MOV A,#10
XCH A,B
DIV AB
SWAP A
ORL A,B
mov voll,a
mov a,volh
mov b,#100
div ab
add a,volint
mov volint,a
mov a,#10
xch a,b
div ab
swap a
orl a,b
mov volh,a
RET
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行