8051单片机int字节的实现

发布时间:2024-01-18  

在使用单片机中,unsigned int 占2个字节,unsigned char 占一个字节。而单片机是实行的字节寻址。16字节的bit寻址实在是不好用,

不好用在不能建数组。


在实际的开发过程中,要使用DPTR,还有定时器的TL0,TH0 的高低字节等。

需要我们先定义一个int类型的可以用来赋值什么的比较自然。

然后和0xff与得到低8,一个字节。可以放入DPTR的低字节或定时器的低字节。

将int类型的左移8位后,再和0xff与得到int的高8位,一个字节,移入到DPTR的高字节或定时器的高字节。

这样很麻烦。

实际上,我们可以通过struct和union方便的直接一步到位的得到int 类型的高字节和低字节,同时也能观察到51单片机中int类型是如何存储的。

可以发现,在51单片机中int的两个字节是连续的,高字节存放在低地址,低字节存放在高地址。哈哈

具体的实现是:

8051单片机int字节的实现

首先定义一个 INT_BYTE的结构体,里边是两个unsigned char

然后定义一个union 是 一个无符号的int,和上边的定义的两个字节。

我们指导union里的变量间是共享内存的。也就是 num,和 byte 两个变量所在的首地址是相同的!

而 num,byte都是两个字节,那么byte中的两个字节h,l就是对应的num中的高,低字节。

实验验证一下:

8051单片机int字节的实现

我们定义了一个U16的变量hl ,给hl的num给了0xff0f 这个数值。

然后我们给P0口给了低字节,P1口给了高字节。

调试程序,打开端口,运行后:

8051单片机int字节的实现

太好了,很轻松的就得到了int类型的高低8位。当然,把hl变量加入到

watch窗口就更一目了然了!

8051单片机int字节的实现

同样的道理,我们可以实验unsigned long 类型,他占有4个字节。同样高字节在低地址。

这就是小端数据保存,python中struct解析时就有用到啊。记得好像时用 '' 来标识的,

看来学习单片机还能解疑释惑。

最后,我们可以将这个自建为代码库,以提供复用。最后,放上代码:

#include 

#include "stc89.h"

/*

This code is written  by H.W. 

at 12969722 at qq.com

*/

struct INT_BYTE {

    unsigned char h;

    unsigned char l;

};

typedef union UINT16 {

    unsigned int num;

    struct INT_BYTE byte;

} U16;


struct BYTE_BIT {

    unsigned char a1;

    unsigned char a2;

    unsigned char a3;

    unsigned char a4;

};

typedef  union UBYTE {

    unsigned long  byte;

    struct BYTE_BIT b;

} U8;


void main(void){

    U16 hl;

    U8 ubit;

    hl.num=0xff0f;

    P0=hl.byte.l;

    P1=hl.byte.h;

    ubit.byte=0xf0f1f2f3;

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    8051单片机int字节的实现;在使用单片机中,unsigned int 占2个字节unsigned char 占一个字节。而单片机是实行的字节寻址。16字节的bit寻址实在是不好用, 不好......
    8051单片机中访问int字节的方法;在使用单片机中,unsigned int 占2个字节unsigned char 占一个字节。而单片机是实行的字节寻址。16字节的bit寻址......
    Size ); //I2C总线综合接收函数,从从机接收多个字节的数据 bit I2C_Gets ( unsigned char SlaveAddr, unsigned int SubAddr......
    的问题。 “i2c.h文件” //I2C总线综合发送函数,向从机发送多个字节的数据 I2C读写EEPROM流程图 bit I2C_Puts( unsigned char SlaveAddr, unsigned int......
    ~+127 unsigned int字节 0~65535 signed int字节 -32768~+32767 unsigned long 四字节 0~4294967295......
    是说,我们可以用它来给我们的数据类型来进行定义。*/   /* 然后我们再来看之后的unsignedunsigned用于限定后面的为无符号类型,如果后面不加什么的话,就默认为unsigned int......
      无   * @retval 接收到的一个字节数据   */ unsigned char I2C_ReceiveByte(void) {     unsigned char i,Byte=0x00......
    中是4个字节,高12位表示主设备号,低12位表示次设备号。 可以使用下列宏从dev_t中获得主次设备号:                    也可以使用下列宏通过主次设备号生成dev_t......
    自己加上它只是起到显式的提醒作用。 六。字节对齐可能带来的隐患: 代码中关于对齐的隐患,很多是隐式的。比如在强制类型转换的时候。例如: unsigned int i = 0x12345678; unsigned char......
    ]; unsigned long Date; unsigned int Size; } NewFileInfo, OleFileInfo; 这一种定义方式定义没有使用结构名,称为无名结构。通常会用于程序中只有几个......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>