C51单片机相关问题,哪位大神能给我解释一下面这个高八位和低八位?

#include<reg51.h> //包含单片机寄存器的头文件
void main(void)
{
unsigned char m,n;
unsigned int s;
m=64;
n=71;
s=m n; //s=64 71=4544,需要16位二进制数表示,高8位送P1口,低8位送P0口
//由于4544=17 256+192=H3 16 16 16+H2 16 16+H1 16+H0
//两边同除以256,可得17+192/256=H3 16+H2+(H1 16+H0)/256
//因此,高8位16进制数H3 16+H2必然等于17,即4544除以256的商
//低8位16进制数H1 16+H0必然等于192,即4544除以256的余数

P1=s/256; //高8位送P1口 ,P1=17=11H=0001 0001B, P1.0和P1.4口灭,其余亮
P0=s%256; //低8位送P0口 , P3=192=c0H=1100 0000B,P3.1,P3.6,P3.7口灭,其余亮
}

#include<reg51.h> //包含单片机寄存器的头文件
void main(void)
{
unsigned char m,n;
unsigned int s;
m=64;
n=71;
s=m*n;
P1=s>>8; //这样写你应该可以理解了
P0=s; //一个16位数直接赋值给8位变量,潜规则就是只取低八位。
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-24
看第一句注释应该是 s=m*n;(应该不能直接写m n的吧)
也就是s=4544,二进制就是0001 0001 1100 0000,高八位就是0001 0001,低八位就是1100 0000
P1=s/256,s/256就是去掉后八位的意思(256是2的八次方,除以256就是去掉后八位),也就是0001 0001,然后把这0001 0001赋值给P1口,那么P1口的P1.0和P1.4就是高电平灭,其他是低电平亮。
P0=s%256,s%256是只留后八位(取模嘛,前面的都舍弃了)
第2个回答  2013-09-24
高8位显示的数值,要乘以256,才能与低8位相加。
因为高8位的1相当于256.

备注不要太认真去看,各人的理解方式不同,
程序猿也是会进化的,只要记住公式,慢慢的你会有自己的理解方式。

另外,程序里面低8位的1口应该是亮的。
相似回答