




已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章 C51单片机语言程序设计基础第三章 C51单片机语言程序设计基础第 3章 51单片机程序的 C语言描述使用 C语言进行 51单片机编程是单片机系统开发的发展方向, C语言是通用计算机程序设计语言,但现在也广泛用于单片机开发, C语言与汇编语言相比具有使用容易、可移植性好、可以直接操作硬件的特点,特别是在单片机上采用操作系统,则必须采用 C语言编程。对于初学单片机来说,采用 C语言入门单片机也是一个好的选择,使用 C语言可以避免汇编语言需要记忆大量指令的缺点,快速学会单片机。Keil软件是一个简单易学的单片机 C语言开发工具, Keil软件具有使用简单,功能强的特点。 Keil软件加上 C语言,是开发 51单片机的利器,也是初学单片机必须掌握的单片机开发手段。第三章 C51单片机语言程序设计基础51单片机具有如下所示的不同的存储空间,每个存储空间包括从 0到最大存储范围的连续字节地址。在 C51中按照存储数据的类型,将 51单片机的存储器分为不同区域,下面简单介绍如下。 3.1 51 单片机的存储器第三章 C51单片机语言程序设计基础1. 代码区 (CODE)代码区又称为代码段 (程序存储区 ),用来存放可执行代码,对于 51单片机存储代码的片内部空间为 4K, 外部空间为 64k。程序存储区 CODE声明的标识符为 code2. 数据区 (DATA)51单片机能直接访问的片内 128字节内部 RAM称为数据段DATA, DATA区的寻址是最快的,常把频繁使用的变量或局部变量存储在 DATA 段。DATA区声明中的存储类型标识符为 data 第三章 C51单片机语言程序设计基础4. 特殊功能寄存器 (SFR)SFR中很多寄存器都可位寻址,而且可以通过名字进行引用,例如如果要对中断使能寄存器 IE中的 EA 位进行寻址,可使用 EA或 IE.7或 0AFH寻址。 SFR中包含控制定时 /计数器、串行口中断源及中断优先级等寄存器,它们的寻址方式和 DATA区中的其它字节和位一样可位寻址。3.位寻址段 (BDATA)位寻址段 (BDATA)是片内 RAM中的可位寻址字节,包括 16个字节共 128位,每一位都可单独寻址;这使得程序控制非常方便。BDATA区声明中的存储类型标识符为 bdata第三章 C51单片机语言程序设计基础6.外数据区 ( XDATA和 PDATA区 ) 51单片机有一个 64K的数据区( XDATA) ,该区和代码区一样采用 16位地址寻址。XDATA区声明中的存储类型标识符为 xdata, PDATA区声明中的存储类型标识符为 pdata。5. 间接数据区 ( IDATA)51系列中的一些单片机,如 8052,有附加的 128字节的内部 RAM,位于从 80H开始的地址空间中,被称为 IDATA。虽然 IDATA区的地址和 SFR的地址是重叠的,但因为 IDATA区只能通过间接寻址来访问,所以可以分别寻址。 IDATA区声明中的存储类型标识符为 idata,指内部 256字节的存储区。第三章 C51单片机语言程序设计基础3.2.1 C语言的标识符和关键字标识符 用于标识语句、数据类型、函数、变量、数组、存储方式等对象, 也就是这些对象的名字。在 C语言中, 标识符大小写敏感 ,就是大写与小写代表的对象是不同的。需要注意的是:标识符只能是字母( A Z,a z)、数字 0 9和下划线 “”组成的字符串,并且标识符号的第一个字母必须是下划线或是英文字母。关键字 是具有固定名称与特定含义的特殊标识符,也称为保留字,在C语言中不允许用户自定的标识符与关键字相同。C语言中的关键字如下: atuo break case const等C51关键字如下:bit sbit sfr sfr16 data bdata idata pdata 等共 32个。 3.2 C语言基础知识第三章 C51单片机语言程序设计基础KEIL C51编译器所支持的数据类型列在下表中。在标准 C语言中基本的数据类型为 char( 字符)、 int( 整型)、 long( 长整型)、 float( 浮点),而在 C51编译器中 int和 short相同, float和 double相同,下面是具体的定义: 3.2.2 数据类型数据类型 长度 值 域 说明char 字符 unsigned char 单字节 0 255 signed char 单字节 -128 +127 默认int 整型 unsigned int 双字节 0 65535 signed int 双字节 -32768 +32767 默认long 长整型 unsigned long 四字节 0 4294967295 signed long 四字节 -2147483648 +2147483647 默认浮点 float 四字节 1.175494E-38 3.402823E+38 指针 * 1 3字节 对象的地址 位标量 bit 位 0或 1 特殊寄存器 sfr 单字节 0 255 16位特殊 sfr16 双字节 0 65535 可寻址位 sbit 位 0或 1 第三章 C51单片机语言程序设计基础( 1) char字符类型char类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。 分无符号字符类型 unsigned char和有符号字符类型 signed char, 默认值为signed char类型。signed char类型用字节中最高位字节表示数据的符号, “0“表示正数,“1“表示负数,负数用补码表示。所能表示的数值范围是 128 +127。unsigned char常用于处理 ASCII字符或用于处理小于或等于 255的整型数。正数的补码与原码相同,负数的补码等于它的绝对值按位取反后加 1。unsigned char类型用字节中所有的位来表示数值,所可表达的数值范围是 0 255;非常适合 51单片机使用,因为 51单片机每次处理 8位数据。( 2) int 整型整型长度为两个字节,用于存放一个双字节数据 。分有符号 int整型数signed int和无符号整型数 unsigned int, 默认值为 signed int类型。 signed int表示的数值范围是 32768 +32767,字节中最高位表示数据的符号, “0“表示正数, “1“表示负数。 unsigned int表示的数值范围是 0 65535。第三章 C51单片机语言程序设计基础( 3) long 长整型长整型长度为四个字节,用于存放一个四字节数据。 分有符号 long长整型 signed long和无符号长整型 unsigned long, 默认值为 signed long类型。signed int表示的数值范围是 2147483648 +2147483647,字节中最高位表示数据的符号, “0“表示正数, “1“表示负数。 unsigned long表示的数值范围是 0 4294967295。( 4) float 浮点型浮点型符合 IEEE 754标准的单精度浮点型数据,占用四个字节( 32位二进制数)。 ( 5) * 指针型指针型本身就是一个变量,在这个变量中存放指向另一个数据的地址。这个指针变量要占据一定的内存单元,对不同的处理器长度也不尽相同,在C51中它的长度一般为 1 3个字节。指针变量也具有类型。 第三章 C51单片机语言程序设计基础( 6) bit 位标量位标量是 C51编译器的一种扩充数据类型,利用 它可定义一个位标量 ,但不能定义位指针,也不能定义位数组。 它的值是一个二进制位 ,不是 0就是 1,类似一些高级语言中的 Boolean类型中的 True和 False。与 51单片机有关的位操作必须定位在片内 RAM中的位寻址空间。( 7) sfr 特殊功能寄存器特殊功能寄存器也是一种扩充数据类型,占用一个内存单元,值域为 0 255。利用它可以访问 51单片机内部的所有特殊功能寄存器。例如 sfr P1= 0x90这一语句定义 P1标识符代表单片机 P1端口在片内的寄存器(地址 0x90), 在后面的语句中可以用 P1= 255(对 P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。用法 : sfr 特殊功能寄存器名 = 地址常数 ;第三章 C51单片机语言程序设计基础( 8) sbit 可寻址位sbit是 C51中的一种扩充数据类型,利用它可以访问芯片内部的 RAM中的可寻址位或特殊功能寄存器中的可寻址位。例如, sfr P0 = 0x80; /因 P0端口的寄存器是可位寻址的,所以我们可以定义sbit P0_1 = P0 1; /P0_1为 P0口中的 P0.1引脚同样我们可以用 P1.1的地址去写 ,如 sbit P1_1 = 0x91;这样在以后的程序语句中就可以用 P1_1来对 P1口的引脚 1进行读写操作了。以上所述的数据类型中,只有 bit与 unsigned char两种数据类型可以直接转换成机器指令。在编写 C51程序时,应尽可能使用无符号字符变量,以及位变量。第三章 C51单片机语言程序设计基础在程序运行过程中,数值不改变的量称为常量。( 1)整型常量可以表示为十进制如 123,0, 89等。十六进制则以 0x开头如 0x34,-0x3B等。长整型就在数字后面加字母 L, 如 104L, 034L, 0xF340等。( 2) 字符型常量 是 单引号内的字符 ,如 a, d等,还可以在该字符前面加一个反斜杠 “”组成专用转义字符,如表所示。3.2.3 常量 转义 字符 含 义 ASCII码(十六 /十 进 制)o 空字符( NULL) 00H/0n 换 行字符( LF) 0AH/10r 回 车 字符( CR) 0DH/13t 水平制表符( HT) 09H/9b 退格符( BS) 08H/8f 换页 符( FF) 0CH/12 单 引号 27H/39” 双引号 22H/34 反斜杠 5CH/92常用转义字符第三章 C51单片机语言程序设计基础( 3) 字符串型常量由双引号内的字符组成 ,如 “test“, “OK“等。当引号内的没有字符时,为空字符串。在使用特殊字符时同样要使用转义字符如双引号。在 C中字符串常量是作为字符类型数组来处理的,在存储字符串时系统会在字符串尾部加上 “o”转义字符以作为该字符串的结束符。字符串常量 “A“和字符常量 A是不同的,前者在存储时多占用一个字节的空间。( 4) 符号常量代替常量的标识符,称为符号常量。 例如语句 “#define DATA 60”中, DATA就是代表常数 60的符号常量。符号常量不是变量,常用大写字母书写,而变量常用小写字母书写。符号常量的定义:#difine False 0x0; /用预定义语句可以定义常量#difine TRUE 0x1; /这里定义 TRUE为 1, False为 0第三章 C51单片机语言程序设计基础1. 变量的定义在 C语言中,定义变量需要四方面的内容:( 1) 变量的数据类型 ,例如 int, char 等( 2) 变量的作用范围,与变量声明的位置有关 。( 3) 变量的存储种类 ,就是在变量的存储方法,不同的存储方法,影响变量的存在时间。( 4) 变量的存储类型 ,就是确定变量的存储在哪类存储器中。2. 变量的定义格式 定义一个变量的格式如下:存储种类 数据类型 存储类型 变量名表( 1)在定义格式中除了数据类型和变量名表是必要的,其它是可选项。( 2)变量的存储类型按照变量的有效作用范围,可以将变量划分为 局部变量 和 全局变量 。3.2.4 变量第三章 C51单片机语言程序设计基础按照变量的存储种类对变量进行划分 ,变量分为: 内部变量 (自动变量( auto)、 静态变量 ( static)、 寄存器变量 ( register) 外部变量 (全局变量、静态变量)。 自动变量 ( auto) :在变量前加存储种类说明符号 auto 则该变量是自动变量。在函数体内部定义的变量,如果没有存储类型说明,都是自动变量。 自动变量的作用范围 在定义它的函数体内部。自动类变量在动态存储器中分配单元,调用函数时,建立该变量存储单元,函数返回时,该变量存储单元自动放弃。 外部变量 ( exterm) :使用存储类型说明符号 extern定义的变量为外部变量 .凡是在所有函数之前,在函数外部定义的变量都是外部变量,定义时可以没有说明符号 extern, 但是一个函数体内说明一个已经定义过的外部变量时,则必须有说明符号 extern。 一个外部变量被定义后,就为它分配了固定的内存空间,外部变量的生存期是整个程序执行时间,一直占用存储单元,因此外部变量是全局变量。各个函数使用的外部变量,只需要在一个函数中定义,在使用该变量的函数中用 extern说明就可以使用了。若一个源文件中要引用其它源文件中定义的全局变量,就需要在文件的开头用关键字 extern说明引进的变量,例如, extern int x; 则说明 x是其它文件中已经定义的全局变量。 第三章 C51单片机语言程序设计基础 静态变量( static) :使用存储种类说明符号 static定义的变量称为静态变量 。在函数体外定义静态全局变量与在函数体内部定义的静态局部变量,都占用存储单元不释放,直到程序结束。也就是在函数返回时存储器中仍保留该变量位置,使其值具有连续性,静态局部变量的默认初值为 0。静态全局变量的有效范围为定义点到程序的结束,而且只有在定义它的程序模块文件中有效 (这一点与全局变量有区别),其他文件不能改变其内容。静态全局变量的默认值是 0。静态局部变量只在定义它的函数中有效。 寄存器变量( register) :C语言允许使用频率高的变量定义为寄存器变量,这样的变量前需要加存储类型符号 register, 其实这只是给编译器一个建议,原因是寄存器数量有限,需要编译器根据实际情况决定。存储器类型的说明就是指定该变量在 C51硬件系统中所使用的存储区域,并在编译时准确的定位。需要注意的是在 AT89S51芯片中 RAM只有低 128位。 Keil软件所能区别的存储类型如下: 第三章 C51单片机语言程序设计基础存储类型 说 明data 直接访问内部数据存储器bdata 可位寻址内部数据存储器idata 间接访问内部数据存储器pdata 分页访问外部数据存储器xdata 外部数据存储器 (64KB外部 RAM ),code 程序存储器(片内 4kB) 或( 64KB片外 FLASH)当使用 data、 bdata定义常量与变量时, C51编译器将其定位在片内存储器。当使用 code存储类型, C51编译器将其定位片内或片外 FLASH存储器中。当使用 xdata存储类型, C51编译器将变量定位在片外 RAM, 寻址范围为 64k。如果省略变量的存储类型说明, C51编译器则会按存储模式 SMALL,COMPACT或 LARGE所规定的默认存储类型去指定变量的存储区域。 第三章 C51单片机语言程序设计基础SMALL存储模式 ,把变量和堆栈都放在 51单片机片内 RAM(128字)中,默认数据类型是 data。COMPACT存储模式 ,把变量和数据定位在 51单片机的分页片外存储区( 256字节),默认的存储类型是 pdata。LARGE存储模式 ,把变量都定位在 8051系统的外部数据区外部数据区( 64KB),默认存储类型是 xdata。存储模式说明:第三章 C51单片机语言程序设计基础3. 定义特殊功能寄存器有关的变量sfr, sbit定义变量的方法如下 :( 1) sfr直接对 51单片机的特殊寄存器进行定义 格式如下:sfr 特殊功能寄存器名 =特殊功能寄存器地址常数 ;例如: sfr P0 = 0x80; /定义 P0 I/O口,其地址 80Hsfr P1 = 0x90; /定义 P1 I/O口,其地址 90Hsfr关键字后面是一个要定义的变量名字,可任意选取,但要符合标识符的命名规则,名字最好有一定的含义如 P1口可以用 P1为名,等号后面必须是常数,不允许有带运算符的表达式,而且要求常数必须在特殊功能寄存器的地址范围之内( 80H FFH)。第三章 C51单片机语言程序设计基础( 2)关键字 sbit定义可位寻址空间的特殊位,格式如下:格式 1: sbit 位变量名 =位地址 ;例如: sbit P1_1 = 0x91; 相当于把特殊寄存器地址空间位寻址区的绝对地址 0x91赋给位变量 P1_1。同 sfr一样 sbit的位地址必须位于地址 80H-FFH之间。格式 2: sbit 位变量名 =特殊功能寄存器名 位位置 / 位位置范围为 07之间例 1: sfr P1 = 0x90; /首先定义字节变量 P1sbit P1_1 = P1 1; /然后再指定位变量 P1_1在字节变量 P1中的位置 1。格式 3: sbit 位变量名 =字节地址 位位置例如 : sbit P1_1 = 0x90 1;格式 3和格式 2是一样的,只是把字节的地址直接用常数表示。第三章 C51单片机语言程序设计基础3.2.5 数组( 1) 一维数组 一维数组的声明格式为:类型说明符 数组名 常量表达式 ; 一维数组初始化:【 例 】 显示十进制数字 09的共阳数码管段译码数组:Unsigned char seg10=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/定义了无符号字符型数组 seg ,它有 seg0 seg9共 10个元素 。第三章 C51单片机语言程序设计基础( 2) 二维数组二维数组的格式为:类型说明符 数组名 下标 1下标 2;二维数组以行列矩阵的形式存储。第 1个下标代表行,第 2个下标代表列。【 例 】 unsigned int Table410 = 0x002 , 0x040 , 0x0BC, 0x138 , 0x1B4 , 0x230 , 0x2AC , 0x328 , 0x3A4 , 0x420 ,0x49C , 0x518 , 0x594 , 0x610 , 0x68C , 0x708 , 0x784 , 0x800, 0x87C , 0x8F8 ,0x974, 0x9F0, 0xA6C, 0xAE8, 0xB64, 0xBE0, 0xC5C ,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环境检测实验操作指南
- 线上线下融合的市场营销活动策划方案
- 教师教学技能提升网络培训研修日志范文
- 船舶修理数字化平台建设
- 2025年高精度医用过滤器项目提案报告模板
- 农业智能化管理方案
- 2025年物业管理专业术语解析及模拟题集
- (2025年标准)股权原价购买协议书
- 苏教版四年级下册数学期末复习计划
- 2025年运动康复师中级考试高频考点回顾与面试技巧
- 吊顶钢结构转换层施工方案
- 手拉葫芦安全培训
- 职业健康安全与环境讲解
- DB1331∕T 034-2022 建筑与市政工程无障碍设计图集
- 乡镇卫生院风险管理制度
- 移动餐车营销策划方案范文
- 2025年修订版《雇佣合同》全文
- 人工智能训练师(3级)理论知识复习题练习卷附答案
- 《新药注册申报流程》课件
- 2022年全国中学生数学奥林匹克竞赛(预赛)暨2022年全国高中数学联合竞赛一试(A卷)参考答案及评分标准
- icp仪器分析考试试题及答案
评论
0/150
提交评论