单片机程序设计课件

上传人:F****n 文档编号:88137413 上传时间:2019-04-19 格式:PPT 页数:61 大小:584.50KB
返回 下载 相关 举报
单片机程序设计课件_第1页
第1页 / 共61页
单片机程序设计课件_第2页
第2页 / 共61页
单片机程序设计课件_第3页
第3页 / 共61页
单片机程序设计课件_第4页
第4页 / 共61页
单片机程序设计课件_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《单片机程序设计课件》由会员分享,可在线阅读,更多相关《单片机程序设计课件(61页珍藏版)》请在金锄头文库上搜索。

1、单片机原理、接口及应用,第3章 程序设计 林海波,内 容 提 要,概述 汇编语言程序设计 C语言程序设计,3.1 概述,MCS-51单片机的编程语言可以是汇编语言也可以是高级语言(如C语言),高级语言编程快捷,但程序长,占用存储空间大,执行慢;汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能。无论是高级语言还是汇编语言,源程序都要转换成目标程序(机器语言)单片机才能执行。,连接/定位器 L51,汇编语言 源程序,汇编器A51,符号转换程序OHS51,绝对地址目标程序 .BIN,C语言程序,浮动地址目标程序,编译器C51,HEX,图 3-1 两种语言源程序转换成目标

2、程序,目前很多公司将编辑器、汇编器、编译器、连接/定位器、符号转换程序做成集成软件包,用户进入该集成环境,编辑好程序后,只需点击相应菜单就可以完成上述的各步,如WAVE、KEIL 、IAR等。,汇编:将汇编语言源程序转换成机器语言目标程序的过程称为汇编。 汇编程序:能将汇编语言源程序转换成机器语言目标程序的系统软件称为汇编程序。,汇编的方法:汇编的方法有两种 1.手工汇编: 人工查指令表,查出程序中每条指令对应的机器代码。早期的计算机使用。 2.机器汇编: 用计算机中的汇编程序对用户源程序进行汇编。用机器汇编要提供给汇编一些信息,遵循汇编程序的一些约定。这些由伪指令指定。,1)确定程序中每条汇

3、编语言指令的指令机器码 2)确定每条指令在存储器中的存放地址 3)提供错误信息 4)提供目标执行文件(*.OBJ/*.HEX)和列表文件(*.LST),地址 机器码 源程序 ORG 2000H 2000H 78 30 MAIN: MOV R0,#30H 2002H E6 MOV A,R0 ,1. 机器指令:指令系统中的全部指令。每条机器指令都有对应的机器代码,可以被CPU执行。 2. 伪指令: 汇编控制指令,没有指令代码,只用于汇编过程,为汇编程序提供汇编信息。,一、汇编语言指令类型,宏汇编功能:将需要反复多次执行的程序段定义成一个宏指令名(宏定义)。编程时,可在程序中使用宏指令名来替代被定义

4、的程序段(宏调用)。,3.2 伪指令,宏定义过程:,宏调用过程: 宏指令名 实际参数 宏指令名 实际参数,宏指令名 MACRO 形式参数 ;被定义的程序段 ENDM,二伪指令 常用伪指令及功能:,1.起始指令 ORG nn 功能:定义程序或数据块的起始地址。指示此语句后面的程序或数据块以nn为起始地址,连续存放在程序存储器中。 指令地址 机器码 源程序 ORG 2000H 2000H 78 30 MAIN: MOV R0,#30H 2002H E6 MOV A,R0 ,ORG 3000H 3000H 23 TAB: DB 23H,100,A 3001H 64 3002H 41,2.字节定义 标

5、号: DB(字节常数,或字符或表达式) 功能:指示在程序存储器中以标号为起始地址的单元里存放的数为字节数据(八位二进制数)。 例如 LN:DB 32,C,25H,-1;LNLN+2 地址单元依次存放20H , 43H , 25H ,FFH,3. 字定义 标号:DW (字常数或表达式) 作用: 指示在程序存储器中以标号为起始地址 的单元里存放的数为字数据(即16位的二进制数),例如: GH :DW 1234H,5678H,08,5. 等值指令 标号 EQU(数值表达式) 表示EQU两边的量等值,用于为标号或标识符赋值。 例如: X1 EQU 2000H X2 EQU 0FH MAIN: MOV

6、DPTR,#X1 ; DPTR=2000H ADD A,#X2 ; A=A+0FH,4保留字节 标号:DS (数值表达式) 作用: 指示在程序存储器中保留以标号为起始地址的若干字节单元,其单元个数由数值表达式指定。 例如 L1:DS 32 ; 从L1地址开始保留32个存储单元。,6. 位定义 标号 BIT 位地址 作用: 同EQU指令,不过定义的是位操作地址。 例如 AIC BIT P1.1。,7.汇编结束 END 作用:指示源程序段结束。 END指令放在程序的最后。 A51汇编程序还有一些其它的伪指令,列在教材表3-1中。,汇编语言程序设计步骤,一.确定方案和计算方法 二.了解应用系统的硬件

7、配置、性能指标 三.建立系统数学模型,确定控制算法和操作步骤 四.合理分配存储器单元和了解I/O接口地址,五. 编制源程序 1.按功能设计程序,明确各程序之间的相互关系 2.用流程图表示程序结构和功能,3.程序中用注释说明指令在程序中的作用,方便阅读、调试和修改,单片机原理、接口及应用,第10章 C语言编程 林海波,内 容 提 要, C51程序结构 C51的数据类型 数据的存贮类型和存贮模式 SFR、可寻址位、存储器和I/O口的定义 C51的运算符 函 数 变量使用,51系列单片机支持三种高级语言,即PL/M,C和BASIC。8052单片机内固化有解释BASIC语言 ,BASIC语言适用于简单

8、编程而对编程效率运行速度要求不高的场合;PL/M是一种结构化的语言,很象PASCAL,PL/M 编译器好象汇编器一样产生紧凑的机器代码,可以说是高级汇编语言,但它不支持复杂的算术运算,无丰富库函数支持,学习PL/M无异于学习一种新的语言。C语言是一种通用的程序设计语言,其代码率高,数据类型及运算符丰富,并具有良好的程序结构,适用于各种应用的程序设计,是目前使用较广的单片机编程语言。,单片机的C语言采用C51编译器(简称C51)。由C51产生的目标代码短、运行速度高、所需存储空间小、符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言或PL/M51语言目标代码混

9、和使用。,应用C51编程具有以下优点: (1)C51管理内部寄存器和存贮器的分配,编程时,无需考虑不同存储器的寻址和数据类型等细节问题; ()程序由若干函数组成,具有良好的模块化结构; ()有丰富的子程序库可直接引用,从而大大减少用户编程的工作量。 ()C语言和汇编语言可以交叉使用. 汇编语言程序代码短、运行速度快、但复杂运算编程耗时。如果用汇编语言编写与硬件有关的部分程序,用C语言编写与硬件无关的运算部分程序,充分发挥两种语言的长处,可以提高开发效率。,10.1 C51程序结构,同标准C一样,C51的程序由一个个函数组成,这里的函数和其他语言的“子程序”或“过程 ”具有相同的意义。其中必须有

10、一个主函数main(),程序的执行从main()函数开始,调用其 他函数后返回主函数main(),最后在主函数中结束整个程序而不管函数的排列顺序如何。,C语言程序的组成结构如下所示:,全局变量说明 /*可被各函数引用*/ main() /*主函数*/ 局部变量说明 /*只在本函数引用*/ 执行语句(包括函数调用语句) fun1(形式参数表) /*函数1*/ 形式参数说明, 局部变量说明 执行语句(包括调用其他函数语句) funn(形式参数表) /*函数n*/ 形式参数说明 局部变量说明 执行语句 ,C语言的语句规则: 1. 每个变量必须先说明后引用,变量名英文大小写是有差别的。 2. C语言程

11、序一行可以书写多条语句,但每个语句必须以“;”结尾,一个语句也可以多行书写为好。 3. C语言的注释用/*/表示。 4. “”花括号必须成对,位置随意,可在紧挨函数名后,也可另起一行,多个花括号可以同行书写,也可逐行书写,为层次分明,增加可读性,同一层的“”花括号对齐,采用逐层缩进方式书写。,10.2 C51的数据类型,C51的数据有常量和变量之分。 常量在程序运行中其值不变的量,可以为字符,十进制数或十六进制数(用0x表示)。 常量分为数值型常量和符号型常量,如果是符号型常量,需用宏定义指令(#define)对其进行定义(相当于汇编的“EQU”伪指令)如: #define PI 3.1415

12、 那么程序中只要出现PI的地方,编译程序都译为3.1415。 变量在程序运行中其值可以改变的量。 一个变量由变量名和变量值构成,变量名即是存贮单元地址的符号表示,而变量的值就是该单元存放的内容。定义一个变量,编译系统就会自动为它安排一个存贮单元,具体的地址值用户不必在意。,10.2.1 C51变量的数据类型,无论哪种数据都是存放在存贮单元中的,每一个数据究竟要占用几个单元(即数据的长度)都要提供给编译系统,正如汇编语言中存放数据的单元要用DB或DW伪指令进行定义一样,编译系统以此为根据预留存贮单元,这就是定义数据类型的意义.C51编译器支持数据类型见表10.1。,表10-1 C51的数据类型,

13、对表10.1作如下说明: 1. 字符型(char)、整型(int)和长整型(long)均有符号型(signed)和无符号型(unsigned)两种,如果不是必须,尽可能选择unsigned型,这将会使编译器省却符号位的检测,使生成的程序代码比signed类型短得多。 2. 程序编译时,C51编译器会自动进行类型转换,例如将一个位变量赋值给一个整型变量时,位型值自动转换为整型值;当运算符两边为不同类型的数据时,编译器先将低级的数据类型转换为较高级的数据类型,运算后,运算结果为高级数据类型。 3. 51单片机内部数据存贮器的可寻址位(20H2FH)定义为bit型,而特殊功能寄存器的可寻址位(即地址

14、为X0H和X8H的SFR的各位)只能定义为sbit类型。,10.2.2 关于指针型数据,(1)关于指针型变量 在汇编语言程序中,要取存贮单元m的内容可用直接寻址方式,也可用寄存器间接寻址方式 ,如果用R1寄存器指示m的地址,用R1取m单元的内容。相对应的在C语言中用变量名表示取变量的值(相当于直接寻址),也可用另一个变量(如P)存放m的地址,P就相当于R1寄存器 。用*P取得m单元的内容(相当于汇编的间接寻址方式)这里P即为指针型变量。下面表格表示两种语言将m单元的内容送n单元的对照语句。,注: 上表省略了汇编语言程序中对符号地址n和m用EQU伪指令进行具体地址定义的 语句以及C语言对变量n、

15、m和指针变量P进行类型定义的语句,实际程序设计中,此步是不可 缺少的。表中&为取地址运算符,*为取内容运算符。,表10-2 汇编语言和C语言的对照,(2)指针型数据的类型 由于C51是结合51单片机硬件的,51单片机的不同存贮空间,有不同的地址范围,即使对于同一外部数据存贮器,又有用Ri分页寻址(Ri为八位)和用DPTR寻址(DPTR为十六位)两种寻址方式,而指针本身也是一个变量,有它存放的存贮区和数据长度。因此,在指针类型的定义中要说明:被指的变量的数据类型和存贮类型;指针变量本身的数据类型(占几个字节)和存贮类型(即指针本身存放在什么存贮区)。 例如类型定义为data或idata,表示指针

16、指示内部数据存贮器;而pdata表示指针指向外部数据存贮器,用Ri间址。以上均为八位地址;而类型code/xdata表示指针指向外部程序存贮器或外部数据存贮器指针,本身(即被指 示地址)应为十六位长度。如果想使指针能适用于指向任何存贮空间,则可以定义指针为通用型,此时指针长度为3字节,第一字节表示存贮器类型编码,第二、三字节分别表示所指 地址的高位和低位。第一字节表示的存贮器类型编码见表10-3:,表10-3 通用型指针的存贮类型编码,10.3 数据的存贮类型和存贮模式,10.3.1数据的存贮类型 C51是面向8XX51系列单片机及硬件控制系统的开发语言,它定义的任何变量必须以一定的存贮类型的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号