用c51语言把连续字节做比较,(四).C51编程语言

三.变量的存储器类型

存储器类型与存储空间的对应关系

存储类型

与存储空间的对应关系

DATA

直接寻址片内数据存储区,访问速度快(128B)

BDATA

可位寻址片内数据存储区,容许位与字节混合访问(16B)

IDATA

间接寻址片内数据存储区,可访问片内所有RAM地址空间(256B)

PDATA

分页寻址片外数据存储区(256B)

XDATA

片外数据存储区(64KB)

CODE

代码存储区(64KB)

1.DATA区使用存储类型data、bdata定义变量时,C51编译器会将它   们定位在片内数据存储区中(RAM)STC89C52存储长度为512B,   能快速存取各类数据,片内数据存储区是临时存放传递变量或使   用频率较高的变量的理想存储场所。Data区除了包含程序变量外,   还保护了堆栈和数据寄存器组。在SMALL存储模式下,未说明存   储器类型时,变量默认被定义在DATA区。

2.BDATA区若是在DATA区的位寻址BDATA区定义变量,这个变量就能够   进行位寻址,而且申明位变量。这种可位寻址的变量对状态寄存   器十分有用,能够单独使用变量的每一位,而不必定要用位变量   名引用变量。但不容许在BDATA区定义float和double类型的变   量。

3.IDATA区也能够存放使用频繁的变量,使用寄存器做为指针进行位寻址。   在寄存器中设置8位地址间寻址,与外部存储器相比,指令执行   周期和代码行长度都比较短。

4.PDATA和XDATA区单片机的片外RAM区,声明变量和其余区语法相同。

5.CODE区单片机的程序代码区,代码区的数据是不能够改变的。可存放   数据表,跳转向量和状态表。

四.存储模式

在变量定义时省略了存储器类型标识符,C51编译器会选择默认的存储器类型。默认的存储器类型由SMALL、COMPACL、和LARGE存储模式(Memory Models)指令决定。存储模式是编译器的编译选项,用于决定变量的默认存储类型、参数传递区和无声明存储类型说明变量的存储类型。各类不一样模式对于哦哦哦那个不一样的实际硬件系统,也将有不一样的编译结果。

1.小模式(SMALL Model)全部未声明存储器类型变量,都默认驻留在内部数据区,即这   种方式和用DATA进行显示说明同样。变量访问速度快,当全部数   据对象(包括堆栈)都必须放在内部数据存储区中,空间有限。

2.紧凑模式(Compact Model)全部未声明存储器的变量类型,默认驻留在外部数据存储区的   一个页上。即PDATA进行存储器类型的说明同样的。该模式利用   R0和R1寄存器进行间接寻址(@R0和@R1)。该模式存取速度笔小   模式慢但比大模式快。

3.大模式(Large Model)全部未声明存储器的变量类型,默认驻留在外部数据存储区,   即和利用XDATA进行显示说明同样。

例:

在不一样存储器类型下等价下面的变量说明:

Unsigned chardata var1; //Small模式,被定位在DATA区,片内RAM

Unsigned charpdata var1;//Compact模式片外按页面间接寻址RAM

Unsigned charxdata var1;//Large模式,片外间接寻址RAM

为了提升运行速度,建议在编写源程序时,把存储模式设定为Small,必要时在程序中XDATA、PDATA和IDATA等类型变量进行专门声明。

sbit和bit的区别:sbit定义特殊功能寄存器中的可寻址位;而bit则定义了一个普通的位变量,一个函数可包括bit类型的参数也可做为返回值。sbit能够访问MCS-51单片机内20H~2FH范围内的位对象。

五.C51语言的数组、指针与结构

1.数组是一个由同类型的变量组成的集合,它保存在连续的存储区域中,第一个元素保存在最低地址中,最末一个保存在最高地址中。

定义方式:数据类型【存储器类型】数组名【常量1】···【常量n】

2.指针指针是指某个变量所占用存储空间的首地址。用来存放指针变量的类型。

类型说明符 *指针变量名

char *s; char *str[4]; int *numptr;

这样声明的指针要占用3B。对于MCS-C51存储结构的特殊性,也能够指定存储器类型的指针,声明时定义指针指向的存储器类型,也称为给予存储器类型的指针。

例如:char data *str;char xdata *numtab;

unsigned  char code *powtab;

3.结构   结构变量是将相互关联、多个不一样类型的变量结合在一块儿造成一个组合变量。定义格式:

struct 结构名{

结构成员说明;

}

六.对绝对地址进行访问

1.使用指针*:取指令;&:取地址

具体运算:变量=*指针变量   指针变量=&目标变量

取内容运算时将指针变量所指向的目标地址的值赋给左边的变量,取地址运算是将目标变量的地址赋给左边的变量。变量中只能存放地址(也就是指针型数据),通常状况下不要将非指针类型数据赋给一个指针变量。

MCS-51单片机工做在总线方式下,P0/P2口做为地址/数据总线使用。对外部扩展的数据存储器RAM的读写,可采用指针的方法,实如今C51程序中对任意指定的存储器地址进行操做。

2.使用C51扩展关键字_at_对肯定地址进行访问

使用_at_对指定的存储器空间的地址进行定位,例如对外部接口的地址进行读写。

【存储器类型】 数据类型 标识符 _at_常数

数据类型一般为uchar的1字节类型;常数规定变量的绝对地址,由译码电路产生;使用_at_定义的变量必须为全局变量。

3.使用C51运行库中预约义宏函数原型:

#defineCBYTE((unsigned char volatile code*)0)

#defineDBYTE((unsigned char volatile idata*)0)

#definePBYTE((unsigned char volatile pdata*)0)

#defineXBYTE((unsigned char volatile xdata*)0)

函数原型放在absacc.h文件中。

七.C51的运算符和表达式

1.赋值运算符“=” 变量=表达式;

2.算术运算符C51中的算术运算符中只有取正值和取负值元素运算符是单目运算符,其余的都为双目运算算符

+:加或取正值运算符  -:减或取负值运算符  *:乘法运算符

/:除法运算符  %:模(取余)运算符

3.自增自减预算“++”、“--”

4.关系运算符

>:大于;<:>=:大于等于;<=:小于等于;!=:不等于

5.逻辑运算符逻辑与:条件1&&条件2;  逻辑或:条件1||条件2;

逻辑非:!条件式

6.位运算符变量1  位运算符  变量2

&:按位与。|:按位或。^:按位异或。~:按位取反。

<>:右移。

位运算符的优先级从低到高:“~”、“<>”、“&”、“^”、“|”。

7.复合运算符

+=:加法运算符  >>=:右移位负值  -=:减法赋值

&=:逻辑与赋值  *=:乘法赋值  |=:逻辑或赋值

/=:除法赋值  ^=:异或赋值  %=:取模赋值

~=:逻辑非赋值  <<=:左移位赋值

通常形式: 变量  复合赋值运算符  表达式

八.C51语言的程序结构

1.顺序结构    是指程序由低地址向高地址顺序执行指令代码的过程,是最简   单的程序结构。从地址0000H开始执行。

2.选择结构if语句和switch语句构成。

①if语句   if(表达式) 语句1 else 语句2

②switch语句   处理多路分支的状况

case分支常量的表达式的值必须是整型、字符型,不能使用条件运算符

break语句用于跳出switch结构

3.循环结构for、while、do···while 3种语句构成循环结构。

九.C51语言的函数

实现程序的模块化,同c语言。

十.中断服务函数

void函数名() interrupt n中断号和中断源的对应关系

中断号

中断源

中断号

中断源

0

外部中断0

3

定时、计数器1

1

定时/计数器0

4

串行口

2

外部中断1

5

定时、计数器2

中断函数运行过程当中完成的任务:

(1)中断产生时,中断函数被系统所使用。

(2)中断函数运行完成退出时,堆栈保存的数据将被恢复。

(3)中断函数退出时,其对应的汇编代码使用RETI指令退出。

中断函数应遵循如下规则:

(1)不能进行参数传递。

(2)没有返回值

(3)不能再子函数中直接调用

(4)如中断调用了其余函数,必须保证函数和中断函数使用了相同的寄存器。

(5)对中断函数不须要声明。

十一.C51库函数与头文件

1.C51的库函数

2.本征库函数

文件下的

_cror_()、_crol_():将char型变量循环左移或右移

_iror_()、_irol_():将int型变量循环左移或右移

_lrol_()、_lrol_():将long型变量循环左移或右移

_nop_():空指令12M晶振下为1us经常使用于IIC通讯

_testbit_:测试该为变量并跳转同时清除

_chkfloat_:测试并返回浮点数的状态。

3.几类重要的库函数(1).专用寄存器include文件。

(2).绝对地址include文件absacc.h

(3).动态内存分配函数malloc(stdilb.h)。

(4).缓冲区处理数,string.h,包括复制、比较、移动函   数···

(5).输入输出流函数

4.C51的预处理(1)预处理命令以“#”开头,后面不加分号;

(2)预处理命令在编译前执行,编译是对预处理的结果进行的,如词法、语法分析等。

(3)多数预处理命令习惯放在头文件的开头。

5.使用C51时的注意事项   (1).采用短变量;(2)避免浮点运算。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值