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口应该是亮的。

C51单片机相关问题,哪位大神能给我解释一下面这个高八位和低八位?
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位变量,潜规则就是只取低八位。} ...

C51单片机相关问题,哪位大神能给我解释一下面这个高八位和低八位?
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位变量,潜规则就是只取低八位。} ...

C51单片机程序
TL0 = 0xff;上两行是定时器\/计数器T0的初值,因为T0是16位的,所以用TH0表示高八位,TL0表示低八位 TH1 = 0xfd;TL1 = 0xfd;T1初值 TMOD = 0x21;定时器\/计数器模式控制寄存器 如图 GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1 GATE=0时,仅由TR0,TR1置位分别启动定时器T0...

C51单片机里关于xbyte的问题
这个主要是在用C51的P0,P2口做外部扩展时使用,其中XBYTE [0x0002],P2口对应于地址高位,P0口对应于地址低位。--对。一般P2口用于控制信号,P0口作为数据通道。--P2 是地址高八位。--读、写控制信号分别在 P3.6 和 P3.7。假设我P2口和P0口接的外部扩展不是RAM,而是液晶屏要怎么理解?

51单片机double怎么只有8位有效数字?
我试了一下51的double和float都只有是八位有效数字,怎么办?doublea;a=123.456789012345;仿真结果:a=123.4568floata;a=123.456789012345;仿真结果:a=123.4568... 我试了一下51的double和float都只有是八位有效数字,怎么办?double a;a=123.456789012345;仿真结果:a=123.4568float a;a=123.456789012345;仿真结果:a=123.45...

C51单片机的数码管(带小数点)哪一位对应哪一段
一般是从上面一横(8 位的最低位)开始,顺时针转abcdef再一间一横为g,小数点为最高位。

C51单片机分类
2答:这个问题并不能一概而论,主要的区别如下:1.功能差别:因为2051不是标准的51内核,所以205*的程序不能直接移植到51上。由于205*是精简型,所以P口变得很少,这样一来就只能用来做一些小的简单产品,可利用资源比较紧张。实际上,做产品的话用205*是不一定合算的,除非是非常简单的产品。2....

单片机th0=0x0dc什么意思。 c51
就是将0x0dc的值送给th0 TH0就是定时器0的高八位寄存器,0x0dc就是十六进制数,在汇编中如果十六进制数的高8位超过9的话则需要在字母前加0,就变成了0x0dc,如果是C语言编程的话可以写成0xdc

关于C51单片机单片机的几个问题
这题答案给的居然是F0H、0CH,我觉得分明是1EH、0CH啊,是不是答案错了 --写成二进制:1E0CH = 0001 1110 0000 1100B --取其低 13 位,写成高八位、低五位:11110000、01100 --方式0的初值,就应该是:F0、0C。3、”MCS 51的程序计数器PC不能被用户使用,因为他没有地址“,首先...

单片机C语言中计时计数器赋初值的一个疑问
解释:对于16bit的寄存器而言,所能表示的最大正整数是16个1即十六进制的0xFFFF,十进制数为65535,若再加1,其进位必然溢出,结果就是16个0 所以65536-1000,就是-1000,也就是64536或0xFC18 第二个问题:TH1和TL1分别是高8位寄存器和低8位寄存器,必然是TH1=OxFC,而TL1=0x18,这样算是可以的...

相似回答