当前位置:
文档之家› 单片机语言程序设计概述 ppt课件
单片机语言程序设计概述 ppt课件
data bdata
idata
pdata xdata code
间接寻址片内数据存储区,可访问片内全部RAM地址空间(256 字节)
分页寻址片外数据存储区(256字节)由MOV @Ri访问(i=0,1)
片外数据存储区(64 KB)由MOVX @DPTR访问 程序存储器64 KB空间,由MOVC @DPTR访问
特殊功能寄存器C51定义的一般语法格式如下:
sfr sfr_name =int constant ; “sfr”是定义语句的关键字,其后必须跟一个80C51单片
机真实存在的特殊功能寄存器名,“=”后面必须是一个整型常
数,不允许带有运算符的表达式,是特殊功能寄存“sfr_name” 的字节地址,这个常数值的范围必须在SFR地址范围内,位于 0x80~0xFF。
4、C语言: C语言是一种源于编写UNIX操作系统的语言,是一种结构化 语言,可产生紧凑代码。优点如下: 1)对单片机指令系统不要求了解,仅要求对8051存储器结构
有初步了解;
2)寄存器的分配,不同存储器的寻址及数据类型等细节可由 编译器管理; 3)程序有规范的结构,分为不同的函数,使程序结构化; 4)更符合人们的思考习惯;改善了程序的可读性; 5)编程及程序调试时间显著缩短,从而提高效率; 6)提供的库包含许多标准子程序构性和模块化更容易阅读和维护,而且由于有更
好的可移植性很多处理器支持C编译器。
用C语言编写MCS–51单片机的应用程序,虽然不像用汇编 语言那样具体地组织、分配存储器资源和处理端口数据,但在C 语言编程中,对数据类型与变量的定义,必须要与单片机的存 储结构相关联,否则编译器不能正确地映射定位。 用C语言编写单片机应用程序与编写标准的C语言程序的不 同之处就在于根据单片机存储结构及内部资源定义相应的C语言 中的数据类型和变量,其它的语法规定、程序结构及程序设计
Cx51数据类型分类
在编程时,为了书写方便,经常用简化的缩写形式来定义
数据类型。其方法是在源程序开头使用#define语句自定义简化
的类型标识符。 例如:
#define uchar unsigned char
#define uint unsigned int 这样,在编程中,就可以用uchar代替unsigned char,用 uint代替unsigned int来定义变量。
寄存器正确、合理的使用以及按实际地址处理端口数据。当设 计一个小的嵌入式系统时,一般我们都用汇编语言。在很多工 程中这是一个很好的方法,因为代码一般都不超过8K 而且都比 较简单。如果硬件工程师要同时设计软件和硬件经常会采用汇 编语言来做程序。使用汇编的麻烦在于它的可读性和可维护性, 特别当程序没有很好的标注的时候,代码的可重用性也比较低。
COMPACT
LARGE
3、80C51特殊功能寄存器(SFR)的Cx51定义
80C51单片机中,地址范围为80H~FFH的单元为SFR寄存器。 为了能直接访问这些SFR,KEIL Cx51提供了一种自主形式 的定义方法,这种定义方法与标准C语言不兼容,只适用于对 8051系列单片机进行C语言编程。
存储模式
说
明
默认的存储类型是 data ,参数及局部变量放入可直
SMALL
接寻址片内RAM的用户区中(最大128字节)。 默认的存储类型是pdata,参数及局部变量放入分页 的外部数据存储区,通过 @R0 或 @R1 间接访问,栈空 间位于片内数据存储区中 默认的存储类型是xdata,参数及局部变量直接放入 片外数据存储区,使用数据指针DPTR来进行寻址。
函数说明部分:它包括函数名,函数类型,函数属性,函
数参数名和形式参数类型。一个函数名后面必须跟一个(), 函数参数可以没有。
函数体: 函数说明部分下面的大括号内的内容。函数体一
般包括:变量定义和执行部分(由若干语句组成).
4) 一个Cx51程序总是从main 函数开始执行的,而不论main 函数在整个程序中的位置如何。
EPROM编程器
硬件仿真器
三、Cx51数据与运算 1、 Cx51数据类型 位型(bit) 字符型(char) 整型(int) 基本类型 长整型(long) 浮点型(float) 双精度浮点型(double) 数组类型(array) 数据类型 构造类型 结构体类型(struct) 共用体(union) 枚举(enum) 指针类型 空类型
下方,与机构化语句对齐,并占用一行。
Cx51源程序大体上是一个函数定义的集合,集合中仅有一
个名为main的主函数。主函数是程序的入口,主函数中所有语
句执行完毕,则程序执行完成。 函数定义由类型,函数名,参数表和函数体组成。
格式如下:
类型 { 数据说明部分; 函数名(参数表) 参数说明;
执行语句部分;
第一部分
单片机C语言程序设计概述
教学基本要求: (1)、熟悉支持80C51单片机的几种编程语言及各自特点; (2)、熟悉Cx51程序结构及开发过程 ; (3)、熟悉Cx51的数据类型及存储模式; (4)、掌握80C51特殊功能寄存器(SFR)的Cx51定义; (5)、掌握80C51并行接口及Cx51定义; (6)、掌握80C51位变量及Cx51定义; (7)、掌握Cx51运算符、表达式及其规则; (8)、熟悉Cx51流程控制语句; (9)、掌握Cx51构造数据类型; (10)、掌握Cx51函数。
第三种格式:
sbit 例如: sbit OV=0XD2 ;/* 定义OV位地址为D2H */ bit-name = int constant; “=”后的int constant为寻址位的绝对位地址。
sbit
CY=0XD7 ;/* 定义CY位地址为D7H */
特殊功能位代表了一个独立的定义类,不能与其它位定义 和位域互换。
带存储类型的变量的定义的一般格式为
数据类型 Char data var1; Bit bdata flags; 存储类型 变量名 变量存储类型定义举例: /* var1 定位在内部RAM*/ /* flags 定位在内部RAM的位寻址区*/ 址寻址方式*/ Unsigned int pdata i; /*无符号整型变量i定位在外部
1、 BASIC:
非常容易学。根据解释的行就可以找到错误,而不是当程 序执行完才能显示,由于逐行解释所以很慢,每一行必须在执
行时转换成机器代码,需要花费很多时间,不能做到实时性。
只适用于要求编程简单而对编程效率或运行速度要求不高的场 合。 2、 PL/M: 是Intel从8080微处理器开始为系列产品开发的编程语言,
可以统一在一个头文件中定义,也可以在程序中(一般在开始的 位置)进行定义,其定义方法如下: 对于80C51片内I/O口按特殊功能寄存器方法定义。 例如:
sfr P0=0x80 ;
sfr P1=0x90 ;
/* 定义P0口,地址为80H */
/* 定义P1口,地址为90H */
对于片外扩展I/O口,则根据硬件译码地址,将其视作为片 外数据存储器的一个单元,使用#define语句进行定义。 例如: #include <absacc.h> #define PORTA XBYTE [0xFFC0]
是一种结构化语言,但它使用关键字去定义结构。它能产生紧
凑代码。总的来说是“高级汇编语言”,可详细控制代码的
生成。但对于8051系列,它不支持复杂的算术运算,浮点变量, 也没有丰富的库函数支持。 3、汇编语言: 用汇编程序设计MCS–51系列单片机应用程序时,必须要考
虑其存储器结构,尤其必须考虑其片内数据存储器与特殊功能
Float idata x,y,z;
/* 变量定位在内部RAM,但只能采用间
RAM,并用MOVX @Ri访问*/
Unsigned char xdata v[10][4][4]; /*无符号三维数组变 量, 定位在外部RAM,并占据10×4 × 4=160字节存储空间*/
如果定义时略去存储类型标志符,编译器会自动选择默认 的类型,由SMALL,COMPACT和LARGE存储模式指令限制。
5)每个语句和数据定义的最后必须有一个分号。
6)C语言本身没有输入/输出语句,输入和输出操作是有库函 数scanf和printf等函数来完成的。 7)可以用/*~~~*/对C程序中的任何部分作注释。
CX51源程序 CX51编译器 浮动目标码模块 系统库 用户库 列表文件
链接
绝对定位目标码文件
映像文件
教学重点: (1)、 Cx51的数据类型及存储模式; (2)、 80C51特殊功能寄存器(SFR)的Cx51定义; (3)、 80C51并行接口及Cx51定义; 教学难点:
(1)、 Cx51构造数据类型;
(2)、 Cx51函数;
一、80C51单片机的编程语言
四种语言支持80C51,即:汇编,PL/M,C和BASIC。
是寻址位在特殊功能寄存器“sfr-name”中的位号,必须是0~
7范围中的数。 例如:
sfr
sbit sbit
PSW=0xD0 ; /* 定义PSW寄存器地址为D0H */
OV=PSW^2 ; /* 定义OV位为PSW.2,地址为D2H */ CY=PSW^7 ; /* 定义CY位为PSW.7,地址为D7H */
第二种格式:
sbit bit-name =int constant^int constant ; “=”后的int constant为寻址地址位所在的特殊功能寄存 器的字节地址,“^”符号后的int constant为寻址位在特殊功 能寄存器中的位号。
例如:
sbit sbit OV=0XD0^2 ;/* 定义OV位地址是D0H字节中的第2位 */ CY=0XD0^7 ;/* 定义CY位地址是D0H字节中的第7位 */
}
Cx51程序结构说明: