在进行8051单片机应用系统程序设计时,编程都往往少不了要直接操作系统的各个存储器地址空间。C51程序经过编译之后产生的目标代码具有浮动地址,其绝对地址必须经过BL51连接定位后才能确定。为了能够在C51程序中直接对任意指定的存储器地址进行操作,可以采用扩展关键字“at”、指针、预定义以及连接定位控制命令。
在这些方法中,本人认为最简单而有效的方法是用“ _at_ ”关键字来对指定变量存储器空间绝对地址来指定。一般格式如下:
[存储器类型] 数据类型 标识符 _at_ 地址常数
其中:
存储器类型 为idata、data、xdata等C51能够识别的所有类型,最好不要省略。
数据类型 可以用int、long、float等基本类型,当然也可以用数组、结构等复杂数据类型 , 本人认为一般用unsigned int 就可以解决很多问题了。
标识符 就是要定义的变量名,编程者自己决定
地址常数 就是要直接操作的存储器的绝对地址,必须位于有效的存储器空间之内。
注意:不能对变量进行初始化,只能是全局变量,一般不要轻易用,免得出错。
举例:
xdata unsigned int addr1 _at_ 0x8300;
另有一种方法就是要用到一个头文件absacc.h,也不是很难,举个例说明一下就会明白:
#include
XBYTE[0x8300]=0; /*向外部存储器(XDATA)地址0x8300写0
本人强烈建议用at,这样可能会更好些,还有一点就是不能乱用,因为有些存储器空间不能随便占用,C51编译器已经做其它的用了,而且有些空间单片机本身就做了很重要的作用,如果乱用,很容易出错.
关键字:51单片机 C语言编程 绝对地址
引用地址:
51单片机C语言编程中对单片机绝对地址访问的两种方法
推荐阅读最新更新时间:2024-03-16 14:34
使用51单片机和DS1302时钟芯片做一个简易的电子时钟
一、前言 今天给大家推荐一个51单片机小实验,带你使用51单片机做一款简易的电子时钟,其中计时模块采用DS1302硬件模块,显示采用LCD显示屏,具体怎么实现开来一起看看吧! 二、DS1302模块介绍 DS1302 是 DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟和31字节静态 RAM,通过简单的串行接口与单片机进行通信。实时时钟、日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年自动补偿等多种功能。时钟操作可通过 AM/PM 指示,DS1302 与单片机之间能简单地采用同步串行的方式进行通信,简易三线SPI通信模式: RES 复位 I/O 数据线 SCLK 串行时钟 SPI
[单片机]
用51单片机定时器的应用
用51单片机定时器产生周期的8种不同频率的方波;其中定时器1控制频率时间,即每个波形4s;定时器0控制波形的频率; #include reg52.h #define uint unsigned int #define uchar unsigned char sbit p23=P2^3; uint frq,flag; void main() { TMOD=0x11; frq=50000; flag=0; TH0=(65536-frq)/256; TL0=(65536-frq)%256; //开始定时为50Ms TH1=(65536-50000)/256; TL1=(65536-50000)%256; //定时50ms
[单片机]
基于51单片机+LD3320语音模块+SYN6288语音合成——语音识别智能分类垃圾桶
基本介绍 这个一个基于51单片机做的一个语音识别分类智能垃圾桶,我这里用的是STC89C52 通过我们说话来对垃圾词语进行分类。比如:垃圾桶(一级指令)易拉罐(垃圾词语),我们通过说话 说出关键字 让语音模块 接收到 —— 语音模块通过串口发指令给51单片机,针对指令 51单片机发指令和语音合成模块,让喇叭说话、 并且控制指令对应的舵机从而实现对垃圾桶开盖。实现起来其实不难。 器件 51单片机 LD3320语音模块 我用的是这个 飞音云店铺的 开源的。 SYN6288语音合成 SG90舵机(4个) 180°不带限位。 usb-ttl模块 垃圾桶四个(4个) 面包板(建议用) 其他 还有什么杜邦线啥的这里
[单片机]
51单片机的二氧化碳、温湿度检测系统
基于51单片机的二氧化碳、温湿度检测系统设计。采用LCD1602显示,CO2传感器使用MH-Z19B,温湿度传感器使用DHT11 制作出来的实物图如下: Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件) 单片机源程序如下: /********************************** (C) COPYRIGHT ******************************* * File Name : main.C * Author : * License : MIT * Version : V1.0 * Date
[单片机]
51单片机系列知识5--并口(2)
2、P1口 P1口对应的专用寄存器的助记符是P1,它是一个8位的专用寄存器,字节地址是90H,它的每一位都有位地址,可以对位进行直接访问。 PI口的位结构如图2-20所示。P1口也是准双向口,它的用途如图2-21所示。 3、P2口 P2口对应的专用寄存器的助记符是P2,它是一个专用寄存器,字节地址是0A0H.。它的每一位都有位地址,可以对位进行直接访问。 P2口的位结构如图2-22所示,P2口的使用方法如表2-11所示。 4、P3口 P3口对应的专用寄存器的助记符是P3,它是一个8位的专用寄存器,字节地址是0B0H。它的每一位都有位地址,可以对位进行直接的访问。 P3口的位结构如图2-23所示。
[单片机]
3步教你如何用51单片机制作秒表
和很多朋友一样,在学51单片机的过程中我们肯定会涉及到制作一个秒表,牵涉到把单片机的多个部分组合起来使用,这对于我们初学者来说可能显得有些困难,我同大家一样,百思不得其解,最后头都弄大了才把这个秒表制作出来,为了给以后的朋友们一些思路,一些参考,所以在这里我把自己制作的整个详细过程整理出来供大家参考。我调试出来是没有问题的,各方面都稳定运行,由于我水平有限,中间可能会有不对的地方,欢迎大家指正,我们一起学习,一起进步! 我将分为三个部分来介绍:1.整体思路,2.硬件电路方面,3.软件编程方面。 1、整体思路 利用51单片机制作秒表时,我介绍精确到十分位(即0.1s)的制作,并让其拥有启动,暂停,复位三个功能。 用到的单片机
[单片机]
用51单片机解码的12通道315M遥控器DIY
N久前作的一个遥控插座,通过单片机进行12通道解码。 原理图 PCB 内部结构 面板:红色指示灯为巡检指示灯,绿色指示灯为通道工作指示灯。 程序代码: #include REG51.H sfr WDT_CONTR=0xe1;//看门狗初始化 #define uchar unsigned char #define uint unsigned int #define uint unsigned int sbit run=P3^7; sbit out=P3^2; sbit out1=P3^3; sbit out2=P3^4; sbit out3=P3^5; bit bzw; bit bzw1; bit b
[单片机]
TMS320VC5402DSP与51单片机的接口设计技术
TMS320VC5402(VC5402)是德州仪器公司推出的具有较高性价比的定点数字信号处理器。VC5402增强外设由软件等待状态发生器、锁相环时钟发生器、6通道直接存储器访问(DMA)控制器、增强型8位并行主机接口(HPI)等组成。两个可编程的多通道缓冲串口(McBSP)能够全双工、快速地与其他同步串口进行数据交换,硬件连接简单,串口的工作模式和传送数据的格式可通过编程实现。DSP和单片机之间的通信一般利用双口RAM,通过串口或DSP的HPI接口实现。 利用双口RAM实现 CY7C026是CYPRESS公司生产的16k×16B高速双口静态RAM,存取速度小于25ns。他具有真正的双端口,可以同时进行数据存取,两个端口具有独立的
[嵌入式]