在进行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单片机 绝对地址 访问
引用地址:
51单片机绝对地址访问的两种方法
推荐阅读最新更新时间:2024-03-16 14:41
基于51单片机的nrf24l01无线的接收和发射程序
通过灯的闪烁来判断数据的接受和发射 有接收端和发射段的程序 如果24L01用reg51那么两个设备都要用reg51,如果用reg52就都得用reg52! PC通过串口发送给单片机命令 ,单片机把命令通过24L01无线发送给另一个单片机,另一个单片机控制灯LED1,LED2,LED3,LED4闪烁。 无线发射程序: #include 2401.h #define uint unsigned int #define uchar unsigned char //1//sbit KEY1=P0^0; //发送按键 //1//sbit KEY2=P0^1; //1//sbit KEY3=P0^2
[单片机]
51单片机 LCD12864 驱动程序 C语言 ST7920
main.c #include reg52.h #include intrins.h #include string.h #include stdio.h #include stdlib.h #include LCD12864.h void main( void ) { Ini_Lcd(); Lcd_WriteStr(0,0, QQ137712826 ); while ( 1 ) { } } lcd12864.h #include reg52.h #include intrins.h sbit RS = P2 ^ 0; sbit R
[单片机]
与51单片机定时/计数器相关的三个控制寄存器
1、TMOD(方式控制寄存器) GATE:设置定时/计数器的启动或停止是否需要外部中断引脚参与控制 GATE=0,不需要外部中断引脚参与控制。 GATE=1,定时/计数器由TR1/TR0 和外部中断引脚共同控制。 C/T:设定定时/计数器的状态 C/T=1 设定为计数器 C/T=0 设定为定时器 M1、M0:设定计数器的长度 00:13 位 01:16 位 10:8 位自动重装 11:8 位 2、TCON(定时/计数器控制寄存器) TF1、TF0:定时/计数器溢出中断标志位,由系统自动置位或清零,用户不能
[单片机]
51单片机控制蜂鸣器发SOS国际求救信号声音实验
说明:本文是51单片机控制蜂鸣器发声实验的高级版,和上个实验差不多,上个实验是控制蜂鸣器发声,本实验可以理解为控制蜂鸣器间断发出不同长度的声音,本文同样重在夯实基础,如果是大神,请自觉飘过。 好了我们言归正传,轮船行驶在辽阔的大海里,当发生意外事故的时候,“SOS”遇难信号便飞向海空,传往四面八方,我们都知道SOS信号是三短,三长,三短(摩尔斯电码),那么我们要如何去控制蜂鸣器发出这样的信号呢? 其实用单片机控制蜂鸣器发SOS声也很简单,原理基本上和上个实验差不多,控制方式稍微会复杂一点点,我们下面会详细介绍。我们同样从硬件和软件两个角度来给大家详细说明。 硬件部分 蜂鸣器 上个实验我们已经讲得很清楚了,再次不在赘
[单片机]
STM32Cube-直接存储器访问(DMA)
在USART章节讲解了串口的轮询和中断模式,这一章介绍一下通过DMA模式控制串口传输。 直接存储器访问 (DMA) 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据。这样节省的 CPU 资源可供其它操作使用。说白了DMA就是一个搬运工,将数据从一个地方搬到另一个地方而不需要CPU处理。 作为一个搬运工,要他正常工作必须要确定几个重要的参数。 1.传输模式:数据从哪里搬到哪里。三种可能的传输方向:存储器到外设、外设到存储器或存储器到存储器。 2.通道选择:就是数据传输的是走那条道路 3.仲裁器:多个DMA传输是优先级高的优先传输。 4
[单片机]
MCS-51单片机的中央处理器CPU介绍
MCS-51单片机的中央处理器CPU由运算器和控制逻辑构成,其中包括若干特殊功能寄存器(SFR)。 一、以ALU为中心的运算器 算术逻辑单元ALU能对数据进行加、减、乘、除等算术运算;“与”、“或”、“异或”等逻辑运算以及位操作运算。 PSW的格式如图1-3所示,其各位的含义是: 图1-3 PSW的格式 CY:进位标志。有进位/借位时CY=1,否则CY=0; AC:半进位标志。当D3位向D4位产生进位/借位时AC=1,常用于十进制调整运算中; F0:用户可设定的标志位,可置位/复位,也可供测试。 RS1、RS0:四个通用寄存器组的选择位,该两位的四种组合状态用来选择0~3寄存器组。见表1-2。 OV:
[单片机]
C51单片机对抽油机的智能功率控制电路设计
为了实现抽油机能自动根据负载需要实时进行Δ/Y双向切换和间歇定时控制的目标,采用嵌入式控制技术设计了如图1所示的控制电路。 智能功率控制器的硬件系统以新华龙电子公司为C8051F206配套的实验板为基础,新增输出电路和键盘显示电路后形成。直接利用实验板上的C8051F206MCU、JTAG接口、晶振、复位及电源电路,大大降低了硬件设计工作量。 (1)输出电路 本系统的被控对象是电机的开关。为满足星角切换和开机/停机要求,需要对3只交流接触器(C1~C3)按一定组合关系进行控制,其电路原理和控制真值表如图2(a)和图2(b)所示。考虑到现场抗干扰的需要,在输出端口P0.1,P0.3和P0.5后采用了光电隔离电路(图2(c)),其
[单片机]
基于MCS_51单片机的工业屏柜散热方案设计
摘要: 从单片机系统设计入手, 采用MCS-51芯片并通过AD转换来对温度信号进行采集,然后经过一系列软硬件设计, 给出了对温度进行控制的实现方法, 同时对系统的散热过程进行了分析。 0 引言 电子电气元件, 尤其是大规模集成电路因发热而产生的问题一直难于解决。而工业屏柜作为一种集成有多种电子设备的工业产品, 其温度的升高常常导致其内部的微电子元件(如PN节) 发生温度漂移而使得各种参数发生改变, 从而导致程序运行混乱而失去其原有的功能, 或与其原有的功能偏差过大而导致故障。在工业控制设备的计数系统、继电保护系统、数控液晶显示模块、温度控制单元的模块、各类传感器、变频器中的IGBT模块和数控及报警显示等设备中, 都会存在因过热而导
[单片机]