C51汇编程序

目录

一.C51的数据类型和存储类型

1.数据类型:

2.C51的扩展数据类型:

3.数据存储类型

4.数据存储模式

二.特殊功能寄存器及其位变量定义

1.特殊功能寄存器的C51定义

2.位变量的C51定义

三.C51语言的绝对地址访问

1.绝对宏

2._at_关键字


一.C51的数据类型和存储类型

1.数据类型:

针对8051的硬件特点,C51在标准C基础上,扩展了4种数据类型
注意,扩展的4种数据类型,不能使用指针来对它们存取

2.C51的扩展数据类型:

(1) 位变量bit的值可以是1 (true),也可是0 (false)

(2) 特殊功能寄存器sfr。8051单片机的特殊功能寄存器分布在片内数据存储区的地址单元80H~FFH之间,“sfr”数据类型占用一个内存单元利用它可访问8051单片机内部的所有特殊功能寄存器。
例如:sfr P1=0x90这一语句定义了P1端口在片内的寄存器,在程序后续的语句中可以用“p1=0xff”,使P1的所有引脚输出为高电平的语句来操作特殊功能寄存器。

SFR特殊功能寄存器的名称及分布如下:

注:当位地址的尾数是0或8时,是可以进行位寻址的

(3) 特殊功能寄存器sfr16
“sfr16”数据类型占用两个内存单元,用于操作占两个字节的特殊功能寄存器。例如:“sfr16 DPTR=0x82”语句定义了片内16位数据指针寄存器DPTR,其低8位字节地址为82H,高8位字节地址为83H。在程序的后续语句中就可对DPTR进行操作。
(4) 特殊功能位sbit
sbit是指AT89S51片内特殊功能寄存器的可寻址位。


符号”^“前是特殊功能寄存器名字,““^”后的数字定义特殊功能寄存器可寻址位在寄存器中的位置,取值必须是0~7。

注意,不要把bit与sbit相混。bit定义普通的位变量,只能是0或1。sbit是定义特殊功能寄存器的可寻址位,值是可以进行位寻址的特殊功能寄存器的某位的绝对地址,例如,PSW寄存器OV位的绝对地址0xd2。

3.数据存储类型

在讨论C51数据类型时,须同时提及它的存储类型,以及它与8051单片机存储器结构的关系,因为C51定义的任何数据类型必须以一定的方式,定位在8051单片机的某一存储区中,否则没有任何实际意义
8051有片内、片外数据存储区,还有程序存储区
片内的数据存储区是可读写的,8051的衍生系列最多可有256字节的内部数据存储区(例如AT89S52单片机),其中低128字节可直接寻址,高128字节(80H~FFH)只能间接寻址,从地址20H开始的16字节可位寻址。

内部数据存储区可分为3个不同的数据存储类型: data、idata和bdata。

访问片外数据存储区比访问片内数据存储区慢,因为访问片外数据存储区要通过对数据指针加载地址来间接寻址访问
C51提供两种不同的数据存储类型xdata和pdata来访问片外数据存储区
程序存储区只能读不能写,可能在8051单片机内部或者外部,或外部和内部都有,由8051单片机硬件连线决定,C51提供了code存储类型来访问程序存储区。

C51语言存储类型与8051存储空间的对应关系:

C51存储类型及其大小和值域

(1) DATA区。寻址最快,应把常使用的变量放在该区,但该区存储空间有限,DATA区除了包含程序变量外,还包含了堆栈和寄存器组。DATA区声明中的存储类型标识符为data,i通常指片内RAM128字节的内部数据存储的变量,可直接寻址。

标准变量和用户自声明变量都可存储在DATA区中,只要不超过DATA区的范围即可,由于C51用默认的寄存器组来传递参数,这样DATA区至少失去8字节空间。
另外,当内部堆栈溢出的时候,程序会莫名其妙地复位。这是因为8051没有报错机制,堆栈溢出只能以这种方式表示,因此要留有较大的堆栈空间来防止堆栈溢出。
(2) BDATA区。DATA中的位寻址区,在该区中声明变量就可进行位寻址。BDATA区声明中的存储类型标识符为bdata,指的是片内RAM可位寻址的16字节存储区(字节地址为20H~2FH)中的128个位。

(3)IDATA区。该区使用寄存器作为指针来对片内RAM进行间接寻址常用来存放使用比较频繁的变量。与外部存储器寻址相比,它的指令执行周期和代码长度相对较短。
IDATA区声明中的存储类型标识符为idata,指的是片内RAM的256字节的存储区,只能间接寻址,速度比直接寻址慢。

(4)PDATA区和XDATA区 位于片外存储区,PDATA区和XDATA区声明中的存储类型标识符分别为pdata和xdata。
PDATA区只有256字节,仅指定256字节的外部数据存储区。

但XDATA区最多可达64KB,对应的xdata存储类型标识符可指定外部数据区64KB内的任何地址。

对PDATA区的寻址要比对XDATA区寻址快,因为对PDATA区寻址,只需装入8位地址,而对XDATA区寻址要装入16位地址,所以尽量把外部数据存储在PDATA区中。

由于外部数据存储器与外部1/0口是统一编址的,外部数据存储器地址段中除了包含数据存储器地址外,还包含外部1/0口的地址。

(5)程序存储区CODE。程序存储区CODE声明的标识符为code,储存的数据不可改变。在C51编译器中可用存储区类型标识符code来访问程序存储区声明举例如下:

单片机访问片内RAM比访问片外RAM相对快一些,所以应尽量把频繁使用的变量置于片内RAM。即采用data、bdata或idata存储类型,而将容量较大或使用不太频繁的那些变量置于片外RAM,即采用pdata或xdata存储类型。常量只能采用code存储类型

应用举例:

4.数据存储模式

如果在变量定义时略去存储类型标识符,编译器会自动默认存储类型

进一步由SMALL、COMPACT和LARGE存储模式指令限制。例如,若声明char var1,则在使用SMALL存储模式下,var1被定位在data存储区,在使用COMPACT模式下,var1被定位在idata存储区;在LARGE模式下,var1被定位在xdata存储区中。
下面对存储模式作进一步说明
(1)SMALL模式。该模式下,所有变量都默认位于8051单片机内部的数据存储器,与使用data指定存储器类型的方式一样。在此模式下,变量访问的效率高,但是所有数据对象和堆栈必须使用内部RAM。


(2) COMPACT模式
本模式下所有变量都默认在外部数据存储器的1页 256字节)内,这与使用pdata指定存储器类型是一样的。该类型适用于变量不超过256字节的情况,此限制是由寻址方式决定的,相当于使用数据指针@Ri寻址。与SMALL模式相比,该存储模式的效率比较低,对变量访问的速度也慢一些但比LARGE模式快。


(3) LARGE模式
本模式下所有变量都默认位于外部数据存储器,相当于用@DPTR寻址通过数据指针访问外部数据存储器的效率较低,特别是当变量为2字节或更多字节时,该模式要比SMALL和COMPACT产生更多的代码。

二.特殊功能寄存器及其位变量定义

1.特殊功能寄存器的C51定义

直接引用编译器提供的头文C51语言允许通过使用关键字sfr、sbit或来对特殊功能寄存器(SFR)进行访问特殊功能寄存器分布在片内RAM高128字节中,只能采用直接寻址方式。

(1)使用关键字定义sfr。为能直接访问特殊功能寄存器SFR,C51提供了种定义方法,即引入关键字sfr,语法如下:

在8051中,要访问16位SFR,要用关键字sfr16。16位SFR的低字节地址须作为“sfr16”的定义地址,例如:

(2) 通过头文件访问SFR。各种衍生型的8051单片机的特殊功能寄存器的数量与类型有时是不相同的,对其访问可通过头文件访问来进行
为用户处理方便,C51把8051(或8052单片机)常用的特殊功能寄存器和其中的可寻址位进行了定义,放在一个reg51.h (或reg52.h)的头文件中。
当用户要使用时,只需在使用之前用一条预处理命令include<reg51.h>把这个头文件包含到程序中,就可使用特殊功能寄存器名和其中的可寻址位名称了。用户可对头文件进行增减。

(3)特殊功能寄存器中的位定义。对SFR中的可寻址位的访问,要使用关键字来定义可寻址位,共3种方法:

2.位变量的C51定义

由于8051可位操作,C51扩展的“bit”数据类型用来定义位变量,这是与标准C的不同之处。

定义位变量时,允许定义存储类型,位变量都被放入一个位段,此段总是位于8051的片内RAM中,因此其存储类型限制为DATA或IDATA,如果将位变量定义成其他类型,将会导致编译时出错。

三.C51语言的绝对地址访问

如何对8051片内RAM、片外RAM及1/0空间进行访问,C51提供两种常用的访问绝对地址的方法

1.绝对宏

编译器提供了一组宏定义对code、data、pdata和xdata空间进行绝对寻址。
程序中用“#include<absacc.h>”来对absacc.h中声明的宏来访问绝对地址,包括CBYTE、CWORD、DBYTE、DWORD、XBYTE、XWORD、PBYTE、PWORD具体使用参见absacc.h头文件。其中:

2._at_关键字

其中,存储器类型为C51能识别的数据类型,数据类型为C51支持的数据类型;地址常数用于指定变量的绝对地址,必须位于有效的存储器空间之内;使用 _at _定义的变量必须为全局变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/225463.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux CentOS本地部署SQL Server数据库结合cpolar内网穿透实现公网访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装sql server二. 局域网测试连接三. 安装cpolar内网穿透四. 将sqlserver映射…

创业6个月裤衩都赔掉了;2023生成式AI年度大事表;AI工程师的自我修养;LLM开发者成长计划;OpenAI LLM入门课程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f440; 黄家驹AI演唱「直到世界尽头」&#xff0c;是科技前进也是青春回望~ https://www.bilibili.com/video/BV1CG411i7MV 最近几天&#xf…

2022 RedisDays 内容揭秘

上个月&#xff0c;Redis举办了3场线上会议&#xff0c;分别介绍了即将正式发布的Redis 7中包括的重要更新的内容&#xff0c;还有Redis完全重写的RedisJSON 2.0模块&#xff0c;和新发布的Redis Stack模块。除此之外&#xff0c;在此次线上会议中还介绍了现代化的软件架构与Re…

pyside6详细笔记

文章目录 主要模组简介绍安装与环境配置安装配置QtDesignerPyUICPyRCC基础了解元对象系统对象模型重要的类Qt 对象:身份?值?对象树与所有状态概述QObjects 的构造/销毁顺序继承关系图Qt 命名空间模块简介QWidget窗口的创建在PyQt中使用qrc/rcc资源系统Qt 资源系统简介qrc 文件…

从Java8升级到Java17,特色优化点

从Java8升级到Java17&#xff0c;特色优化点 一、局部变量类型推断二、switch表达式三、文本块四、Records五、模式匹配instanceof六、密封类七、NullPointerException 从Java 8 到 Java 20&#xff0c;Java 已经走过了漫长的道路&#xff0c;自 Java 8 以来&#xff0c;Java 生…

预赛->省赛->国赛 我的全国软件测试大赛之旅

学习推荐 Web 功能测试&#xff1a;Javaselenium3 web自动化测试实战 性能测试&#xff1a;看慕测官方的视频&#xff0c;这里会用就行&#xff0c;不用学太多 自己根据视频写的&#xff1a;Web自动测试常用代码(Java版) Web没啥难的&#xff0c;主要拼手速&#xff0c;其…

出错:I/O文件读取JAVA

I/O文件读取 /** author:xiaowang* date:2023/12/6* demand:读取java1班的数据* * */ package homework;import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException;public class FileReadTest {public static void main(String[] args) …

Windows系统上如何搭建Linux操作系统

一、准备工作 1&#xff0c;VMware安装包 2&#xff0c;Centos IOS镜像 3&#xff0c;finalshell安装包 阿里云盘下载地址&#xff1a; https://www.alipan.com/s/uSQsWn15E3W 二&#xff0c;VMware安装 1&#xff0c;新建虚拟机 2&#xff0c;选择下一步 3&#xff0c;…

小航助学题库白名单竞赛考级蓝桥杯等考scratch(14级)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09; 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;

每日一题 1466. 重新规划路线(树,DFS)

根据 connections 建立无向树从 0 开始深搜&#xff0c;每次调用 dfs 时判断路径方向是否正确 class Solution:def minReorder(self, n: int, connections: List[List[int]]) -> int:to defaultdict(set)edge defaultdict(list)for con in connections:edge[con[0]].appe…

Numpy 实现ID3决策树

Numpy 实现ID3决策树 # 定义节点类 二叉树 class Node:def __init__(self, rootTrue, labelNone, feature_nameNone, featureNone):self.root rootself.label labelself.feature_name feature_nameself.feature featureself.tree {}self.result {label:: self.label,fea…

HarmonyOS学习--TypeScript语言学习(一)

注意&#xff1a;这只是我学习的笔记&#xff01;&#xff01;&#xff01; 注意&#xff1a;这只是我学习的笔记&#xff01;&#xff01;&#xff01; 注意&#xff1a;这只是我学习的笔记&#xff01;&#xff01;&#xff01; 本章目录如下&#xff1a; 一、TypeScript语言…

汽车防爆膜行业研究:中国发展前景及市场投资分析

随着汽车保有量的不断增长&#xff0c;汽车的维修和保养等服务市场规模也会快速提升。业内人士表示&#xff0c;今年以来&#xff0c;越来越多的企业开始发力这一市场&#xff0c;汽车后市场的竞争区域也从大中城市向县域城市下沉。 防爆膜就是在车的玻璃上安装一层保护膜&…

各大期刊网址

1.NeurIPS&#xff0c;全称Annual Conference on Neural Information Processing Systems&#xff0c; 是机器学习领域的顶级会议&#xff0c;与ICML&#xff0c;ICLR并称为机器学习领域难度最大&#xff0c;水平最高&#xff0c;影响力最强的会议&#xff01; NeurIPS是CCF 推…

Android 背景边框集合

效果图 代码 <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android" android:shape"rectangle"><solid android:color"#ffffff" /><stroke and…

Doris 编译报错 Error: flex version (2.5.37) must be greater than or equal to 2.6.0

Doris 编译过程报错 Error: flex version (2.5.37) must be greater than or equal to 2.6.0yum update flex 不生效 下载flex 安装包 https://github.com/westes/flex/releases解压 tar -xvf flex-2.6.4.tar

java优雅写法01 -业务判断并断言-Assert工具类

断言的理解: 断言他满足条件不抛异常; 不满足断言时产生异常&#xff1b; 业务需求&#xff1a;判断某个查询对象为空&#xff0c;直接返回错误信息 常见写法&#xff1a; if (ObjectUtil.isNull(object)){ return XXXX }Assert 写法 这句代码的意思是 如果对象为空就提示并返…

你了解架构图吗?

技术界的扛把子架构图&#xff0c;你了解吗&#xff1f;今天我们就来聊聊它 什么是架构图呢&#xff1f; 系统架构是概念的体现&#xff0c;是对物/信息的功能与形式元素之间的对应情况所做的分配&#xff0c;是对元素之间的关系以及元素同周边环境之间的关系所做的定义。 架构…

微信小程序访问不了阿里云oss图片链接解决办法

以下都有可能导致访问不了oss图片 1.小程序没有加访问白名单 这个需要前端搞,加上白名单,如果是域名加域名白名单,ip的话加ip白名单 2.阿里云设置域名白名单 打开bucket列表,选择对应的bucket 配置这个白名单,配置好以后,开发者工具可以预览了,手机端预览不了,查看自己的路…

[AbutionGraph开发文档]时序图谱数据库-流式图计算

文档地址&#xff1a;https://thutmose.gitee.io/abution-graph AbutionGraph是一款端到端数据实时分析的图谱数据库&#xff0c;实时(写入实时、决策分析实时、流式图计算实时)&#xff1a; 基于历史数据构建的指标模型实时查询&#xff1b;接入流式数据并实时更新业务指标&a…