在使用单片机中,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的两个字节是连续的,高字节存放在低地址,低字节存放在高地址。哈哈

具体的实现是:

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

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

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

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

实验验证一下:

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

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

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

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

watch窗口就更一目了然了!

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

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

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

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

#include <intrins.h>
#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中字节的方法的更多相关文章

  1. 一个解决在非UI线程中访问UI 异常的小方法

    写 WPF 的童鞋可能都会碰到 在非UI线程中访问 UI 异常的问题.这是为了防止数据不一致做的安全限制. 子线程中更新UI还要交给主线程更新,引用满天飞,实在是麻烦. 接下来,我们推出一个可以称之为 ...

  2. ASP.NET内容页中访问母版页中的对象

    在ASP.NET2.0开始,提供了母版页的功能.母版页由一个母版页和多个内容页构成.母版页的主要功能是为ASP.NET应用程序中的页面创建相同的布局和界面风格.母版页的使用与普通页面类似,可以在其中放 ...

  3. 局域网中访问mac中的linux虚拟机服务

    然后到虚拟机的linux系统上面执行ifconfig查看linux系统的IP地址,访问这个地址就能访问mac里面的虚拟机

  4. Android: 在native中访问assets全解析

    本文总结在Android Native C++开发中访问APK中的assets资源的方法 在CMake中添加相关NDK LIB的 依赖 因为我们接下来用到的一些函数实现在NDK库libandroid. ...

  5. 041. asp.net中内容页访问母版页中的控件

    母版页运行机制: 用户通过输入内容也的URL来请求某个页面, 获取该页面后, 读取@Page指令, 如果该指令引用了一个母版页, 则也读取该母版页, 如果也是第一次请求这两个页面, 则母版页和被请求的 ...

  6. 访问 HTML中元素的方法

    http://www.w3school.com.cn/jsref/index.asp   1.document.getElementbyId("id1"),Html中,名称是id1 ...

  7. Ruby中访问控制符public,private,protected区别总结

    重点关注private与protected public 默认即为public,全局都可以访问,这个不解释 private C++, “private” 意为 “private to this cla ...

  8. Ajax中解析Json的两种方法

    eval(); //此方法不推荐 JSON.parse(); //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name" ...

  9. iframe里访问父级里的方法属性

    window.parent.attributeName;  // 访问属性attributeName是在父级窗口的属性名 window.parent.Func();  // 访问属性Func()是在父 ...

随机推荐

  1. mybatis 无效字符

    只想说 是真的坑啊!!!!!sql就是对 但就是报错无效字符..... 一.sql后有 “:”,我觉得这个应该坑了很多人了 二.标签后有类似于空格的东西(我也不知道是tab还是空格,反正删完就对了) ...

  2. Solidity顺序编程

    1.事件 是合约和区块链通讯的一种机制.前端可以监听事件. 使用关键字event(参数);来申请 2.require指令: 使用require指令,使得函数在执行过程中,在不满足某些条件的时候抛出错误 ...

  3. leetCode练题——13. Roman to Integer

    1.题目13. Roman to Integer Roman numerals are represented by seven different symbols: I, V, X, L, C, D ...

  4. MRCP接口MRCPRecog 简介

    功能:开始一个语音识别,一边讲话,一边识别,需要ASR服务器. 原型:MRCPRecog (grammar, options) grammar ---- 语法文件,可以是一个xml文件 options ...

  5. PAT T1008 Airline Routes

    用tarjan算法缩点~ #include<bits/stdc++.h> using namespace std; ; vector<int> g[maxn]; int N,M ...

  6. java并发初探ConcurrentSkipListMap

    java并发初探ConcurrentSkipListMap ConcurrentSkipListMap以调表这种数据结构以空间换时间获得效率,通过volatile和CAS操作保证线程安全,而且它保证了 ...

  7. day18-Python运维开发基础(单继承 / 多继承 / 菱形继承、类的多态)

    1. 单继承 / 多继承 / 菱形继承 # ### 继承 : 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法 """ 一个类可以继承另外一个类,那 ...

  8. Atcoder Grand Contest 037B(DP,组合数学,思维)

    #include<bits/stdc++.h>using namespace std;const long long mod = 998244353;string s;int a[3000 ...

  9. nacos作为配置中心兼容xml配置文件

    最近公司想要用配置中心,因为公司用的有传统的spring项目,有springboot项目,为了兼容都能够采用配置中心,做了一些尝试,经过比较还是倾向于使用nacos,传统dubbo采用spring方式 ...

  10. 尝试实现一个简单的C语言string类型

    用过`C++/Java/python/matlab/JS`等语言后,发现都能很轻松的使用string类型,而C只能这样: char str[] = "hello world"; o ...