一、变量的定义和变量的空间
对8位单片机,直接支持的变量的类型只有无符号字符和位。注意两个原则:
其一、总是使用尽可能最小的数据类型;
对8位机,显然对“char”类型的对象的操作比对“int”或“long”类型的对象方便得多。C51编译器直接支持所有字符操作。例如:两个“char”类型对象相乘与“MUL AB”8051指令相符合。如果用“int”型完成同样运算,则需要调用库函数。
其二、只要有可能,使用“unsigned”数据类型。
8051系列单片机不直接支持有符号数的运算,为此,编译器必须产生与之相关的更多的代码以解决问题。若使用无符号数据类型,产生的代码要少得多。
在头文件reg51.h中有8051所有SFR及可位寻址位的定义,如:
#include //源文件开始写
//………….
P1=0x10; //在编程中可使用
TMOD=0x1;
TR0=1;
EA=1;
减少变量占有的空间的方式:
# 利用#define 定义只读的常量
# 使用位域
# 使用联合
1、存储空间中的对象定位
8051单片机的存储器是哈佛结构,即程序存储器和数据存储器分开,并有各自的寻址机构和方式。因为Franklin C51是面向8051系列单片机及硬件控制系统的开发工具。它定义的任何数据类型必须以一定的数据方式定位在8051 的某一存储区中。该编译器将变量、常量定义成不同的存储类型,把它们定位在不同的存储区中。类型和区域的对照如下:
code :程序存储区(64KB),由MOVC A, @A+DPTR访问
xdata: 外部数据存储区 (64KB), 由MOVX A, @DPTR访问
pdata: 分页(256B)外部数据存储区, 由MOVX A,@Ri访问
data: 直接寻址内部数据存储区(128B), 访问变量速度快
bdata: 可位寻址的内部数据存储区, 允许位与字节混合访问(16B).
idata: 间接寻址内部数据存储区(128B)
例:
#include
#define uchar unsigned char
#define uint unsigned int
bit flag;布尔值
code uchar table[]={1,2,3,"help",oxff};
idata uint temp;
data char vra; /char data var ; 等价,尽量用后一种
static unsigned long xdata array[100]; 静态变量
extern float idata x,y,z; 外部变量
uint pdata dimension;
uchar xdata vector[10][4];
char bdata flags;
sbit flag_0=flags^0;
sbit p_1=p1^1;
定义时如果省略存储类型,存储模式将自动决定变量的默认类型如下:
一般指针”SMALL:参数和局部变量放入可直接寻址的内部数据存储区(默认data)
COMPACT:参数和局部变量放入分页外部数据存储区(默认pdata)
LARGE:参数和局部变量放入外部数据存储区(默认xdata)
在C语言中变量和函数的存储属性关系到它们的可见性和生存期(即作用域和时限)。存储属性分三类:auto自动 extern外部 static静态。
Franklin C51支持“基于存储器的指针”和“一般指针”。
基于存储器的指针:由C源程序中的存储类型决定它的存储单元数。用这种指针可高效访问对象,且只要1~2个字节。
一般指针:需要3个字节(2个字节偏移,1个字节存储类型)。
各类指针变量:
float *p 3字节长 指向8051存储区中的“float”
char data *dp 1字节 ------ “data”存储区中的“char”
int idata *ip 1字节 ------ “idata” 存储区中的“int”
long pdata *pp 1字节 ------
char xdata *xp 2字节 ------
int code *cp 2字节 -------
2、 动态和静态变量
动态变量:自动变量
静态变量:外部变量(extern),静态变量(static)
3、全局和局部变量
静态局部变量
自动变量(说明符auto可缺省)
静态全局变量
外部变量
例:
char xdata *px;指针自身在默认区(取决于存储模式)
char xdata *data pdx ;指针明确位于内部数据存储区(data)
data char xdata *pdx ;同上
关键字:单片机 高级语言编程 FranklinC51
引用地址:
单片机的高级语言编程FranklinC51简介
推荐阅读最新更新时间:2024-03-16 15:41
利用8031单片机,设计跑马灯和流水灯
正常情形下使P1口八个发光二极管做流水灯显示。 紧急情况下,使八个发光二极管做鸳鸯戏水显示。 鸳鸯戏水就是一共是八个灯,一次亮四个,奇数灯和偶数灯分开亮。即:这次是1357灯亮,下次是2468灯亮。 要求用汇编语言编制程序,多谢。 问题补充:要求在外部扩展一个4KB的外部存储器。 悬赏分:80 - 解决时间:2010-1-7 14:43 ===================================== 最佳答案: ;------------------------------------ ;题目要求在外部扩展存储器,就是说P0P2口,我们不能使用,那么就用P1外接8个LED,用P3.2
[单片机]
430单片机中Memory类型
SFR:特殊功能寄存器,包括8,16位外围模块的寄存器 RAM:数据存储器 INFO:信息存储器 FLASH:程序存储器 该结果表示这段程序最终在CPU 中占据了42 字节的程序存储器和80 字节的数据存储 器。CONST memory 是只读数据存储段,实际上也占据的是程序存储器(FLASH)。 要想在输出窗口中显示代码长度,只需在输出窗口中单击鼠标右键进入选项就可以设置。
[单片机]
基于单片机与TC787芯片的三相半控整流电路设计
整流电路广泛应用在直流电机调速,直流稳压电压等场合。而三相半控整流桥电路结构是一种常见的整流电路,其容易控制,成本较低。本文中介绍了一种基于 PIC690单片机与专用集成触发芯片TC787的三相半控整流电路,它结合专用集成触发芯片和数字触发器的优点 ,获得了高性能和高度对称的触发脉冲。它充分利用单片机内部资源 ,集相序自适应、系统参数在线调节和各种保护功能于一体,可用于对负载的恒电压控制。主电路采用了三相半控桥结构,直流侧采用LC滤波结构来提高输出的电压质量。 系统总体设计 本系统通过PIC690单片机作为主控制芯片,用晶闸管作为主要开关器件。设计的目标是保持输出的直流电压稳定,输出电压纹波小,交流输出测电流THD较低
[单片机]
使用MCU或SoC简便地提高太阳能板效率
今天,人们比以往任何时候都更关心矿石燃料排放和传统发电和可再生能源所导致的环境问题。在可再生资源中,主要是太阳能板和风力发电。他们的优势是可保持并且无污染,但他们的安装成本较高,并且在大多数应用中,他们的负载接口需要电源调节器(dc/dc 或dc/ac转换)。光电模块(PV模块)还有相对较低的转换效率。 使用高效率电源调节可以减少整体系统成本,旨在从PV模块提取最大限度的能量(使用最大功率点追踪技术--MPPT)。现有的面板系统也存在缺点,一整天只能导向一个方向,不能总是直接面对太阳光。 在这篇文章中,我们将讨论的技术是,如何在系统级提高太阳能面板效率,包括太阳能电池板最大受光定位,最大限度地从太阳能板提取现有电力,以及智能电
[单片机]
利用单片机实现的红外线遥控系统
引言 随着科学技术的不断发展,红外线遥控器因其具有体积小、功耗低、功能强、成本低等特点正在向各个领域渗透,在家用电器、安全保卫、工业控制以及人们日常生活中广泛应用,特别是在家用电器、安全保卫和人们日常生活中的应用就更广泛了。本文给出用软件方式实现红外遥控器译码的单片机程序,所有程序都经过实际单片机系统调试通过。对于硬件电路,发射由红外线遥控器完成,而接收部分则只需要在单片机系统中添加一个红外线接收管就可完成。 1 红外线遥控系统 红外线遥控系统就是指利用红外线来传递控制信号,实现对控制对象的远距离控制的目的;具体来讲,就是由发射器发出红外线指令信号,由接收器接收信号并对信号进行处理,最后实现对对象的各种功能的远距离控制。红外
[单片机]
51单片机音乐万年历制作
一、电源电压4.8V—5.2V,可以直接用电脑USB供电。 二、程序修改说明 1、如果你编译通不过,就是你用的KEIL库文件不全,请换个完整版本的KEIL,或到我店铺购买,本程序是完全编译通过,且没有1个警告; 2、本程序由于农历,节气等数据很占空间,编译后有19K多,请使用程序存储器20K以上的51单片机,比如STC89C55、STC89C58,STC89C516,AT89C55,AT89S54,SST89C58等; 3、如果你的汉字显示不全或乱码,比如“三“显示不了,那是你的KEIL没有打补丁,并不是程序问题,至于什么补丁你可以网上搜或向我索要; 4、在修改位定义的时候需要将Soundplay.h文件下的sbit BeepI
[单片机]
第6课 数码管静态显示
1、数码管显示原理 数码管是单片机应用系统中常用的一种显示器件,由于其价格低廉、操作简单,而被广泛的应用于各种数字显示系统中,常见的数码管如图1所示。 根据外观的不同,数码管又为分1位数码管、2位数码管、3位数码管、四位数码管等种类,如图2所示。 但不论是几位一体的数码管,其显示原理都是一样的,都是靠内部发光二极管发光来进行显示的。下面我们以1位数码管为例介绍其显示原理。 1、数码管显示的原理 数码管内部的电路如图3所示, 图3 数码管内部电路 图3中,显示一个完整的8字,需要7个小段,外加一个小数点,共8段,分别称为a段、b段、c段、d段、e段、f段、g段、dp段,每段内部都集成了一个发光二
[单片机]
AD574与8031单片机及前置电路的一种实用接口电路
AD574是美国核拟器件公司Analog Devices) 生产的12 位逐次逼近型快速A/D 转换器。其转换35us,转换误差为土0.05%,是前我国应用广泛,价格适中的A/D转换器。其内部含三态电路,可直接与各种微处理器连接,且无须附加逻辑接口电路,便能与CMOS 及TTL 电平兼容。内部配置的高精度参考电压源和时钟电路,使它不需要任何外部电路和时钟信号,就能实现A/D转换功能,应用非常方便。 许多文献有关于AD574与8031单片机接口技术的介绍, 但其控制功能引线基本局限于单一的AD574与8031的连接。由于8031无内部程序存贮器, 其内部数据存贮器也有限, 因而8031构成的测控系统, 往往都需外扩存贮器
[单片机]