您的位置 首页 ADAS

8051单片机int字节的完成

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

在运用单片机中,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;
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/344417.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部