系列单片机程序设计.ppt

上传人:牧羊曲112 文档编号:5811533 上传时间:2023-08-22 格式:PPT 页数:87 大小:1.78MB
返回 下载 相关 举报
系列单片机程序设计.ppt_第1页
第1页 / 共87页
系列单片机程序设计.ppt_第2页
第2页 / 共87页
系列单片机程序设计.ppt_第3页
第3页 / 共87页
系列单片机程序设计.ppt_第4页
第4页 / 共87页
系列单片机程序设计.ppt_第5页
第5页 / 共87页
点击查看更多>>
资源描述

《系列单片机程序设计.ppt》由会员分享,可在线阅读,更多相关《系列单片机程序设计.ppt(87页珍藏版)》请在三一办公上搜索。

1、2010/5/18,单片机原理与接口技术,第四章 MCS-51系列单片机程序设计,4.1 汇编语言程序设计概述,计算机是仿照人的思维方式顺序执行一条条指令来完成特定任务的机器,计算机程序因此被定义为指令或语句的“有序集合”,程序设计是指编写计算机程序的过程。汇编语言是用指令助记符等表示的计算机指令,采用汇编语言编写的程序被称为汇编语言程序。汇编语言程序具有代码效率高(编译后的指令代码占用存储空间小)和执行时间短等优势和特点。由于单片机的存储器等资源有限,单片机应用程序中经常需要面对硬件操作,且对程序执行的时间有较为严格的要求或限制。因此,汇编语言程序设计是单片机应用系统设计的重要基础之一。,4

2、.1 汇编语言程序设计概述,1、汇编语言的特点:汇编语言的特点归纳如下:助记符指令与机器指令一一对应;程序代码效率高,占用存储空间小,运行速度快,汇编语言程序往往是最优化的程序;助记符指令(汇编指令)与计算机硬件联系紧密,要求编程人员对计算机硬件较为熟悉;汇编语言程序缺乏通用性,移植性较差。,4.1.1 汇编语言的特点及语句格式,4.1 汇编语言程序设计概述,2、汇编语言的语句格式MCS-51系列单片机汇编语言的语句格式如下:;标号是汇编语句地址的符号表示。用于规定该语句所执行的操作。操作数为汇编指令的操作提供数据或地址 注释是指对一条汇编语句或一段汇编语言程序的说明,以增加汇编语言程序的可读

3、性。,4.1.1 汇编语言的特点及语句格式,4.1 汇编语言程序设计概述,1、起始地址定位伪指令ORG 格式:标号:ORG 操作数 说明:其功能是指出紧接其后的指令的目标代码的第一个字节在程序存储器中的绝对地址。例如:ORG 0030H START:MOV A,#33H.即定义标号START表示的起始地址值为0030H,该段程序的指令代码从该地址开始顺序存放。,4.1.2 汇编语言伪指令,4.1 汇编语言程序设计概述,2、赋值伪指令EQU 格式:字符名称 EQU 操作数 说明:该指令用于字符名称赋值。在同一个源程序中,任何一个字符名称只能赋值一次。且一旦赋值之后,整个源程序中该字符的值就固定不

4、变了。例如:ADPORT EQU 1001H即给字符名称ADPORT 赋值16进制数1001H。,4.1.2 汇编语言伪指令,4.1 汇编语言程序设计概述,3、数据地址赋值伪指令DATA格式:字符名称 DATA 操作数说明:DATA伪指令的功能与EQU伪指令相似,不同之处在于DATA伪指令所定义的字符名称可先使用后定义(赋值),也可先定义(赋值)后使用。在程序中它常用来定义(赋值)数据地址。,4.1.2 汇编语言伪指令,4.1 汇编语言程序设计概述,4、字节数据赋值伪指令DB格式:标号:DB数据表(字节)说明:该伪指令用于定义(赋值)若干字节数据表(固定常数),并存放在指定地址单元开始的程序存

5、储器中。例如:ORG 0050HTABLE:DB 99H,88H 即表示在地址0050H(标号TABLE)开始定义(赋值)两个字节数据(99H,88H)。,4.1.2 汇编语言伪指令,4.1 汇编语言程序设计概述,5、双字节数据赋值伪指令DW格式:标号:DW数据表(双字节)说明:该伪指令与DB伪指令的不同之处在于DW定义(赋值)的是双字节数据,而DB定义(赋值)的是单字节数据。高8位数据安排在低地址单元,低8位数据安排在高地址单元。6、预留空间定义伪指令DS格式:标号:DS 操作数说明:该伪指令的作用是通知汇编程序,从指定的地址单元开始(通常由标号指定首地址),保留由操作数(常数或表达式)规定

6、的字节空间。,4.1.2 汇编语言伪指令,4.1 汇编语言程序设计概述,7、位地址赋值伪指令BIT格式:字符名称 BIT 位地址说明:该伪指令给字符名称赋予位地址(片内RAM和SFR中的位地址),常用于位操作程序中。例如:FLAG BIT 20H 即将位地址20H赋予字符名称FLAG。8、定义汇编结束伪指令END格式:标号:END说明:汇编结束伪指令END的作用是通知汇编程序,汇编源程序到此结束。在一个汇编程序中,只允许出现一条END伪指令,且必须安排在整个源程序的末尾处。,4.1.2 汇编语言伪指令,4.1 汇编语言程序设计概述,4.2 基本程序结构,1、顺序结构程序2、分支结构程序3、循环

7、结构程序4、子程序5、中断程序,基本程序结构,4.2 基本程序结构,顺序结构是各类程序中最简单的,也是最基本的程序结构。顺序结构程序的特征是整个程序段没有任何转移指令。主要由数据传递类指令和数据运算类指令组成,通常用于执行数据传送和较为简单的算术或逻辑运算任务。,4.2.1 顺序结构,4.2 基本程序结构,例4-1,将内部 RAM 中 20H 单元和 30H 单元的无符号数相加,存入R0(高位)和R1(低位)中。源程序如下:MOV A,20H;取出被加数ADD A,30H;两数相加MOV R1,A;低位存入R1CLR A;ADDC A,#00H;取进位标志MOV R0,A;高位存入R0RET,

8、4.2.1 顺序结构,4.2 基本程序结构,分支结构程序利用条件转移指令,使程序在执行某一指令后(产生测试条件),根据所规定的条件满足与否改变其后程序执行的顺序(产生分叉),即根据判断条件的成立与否来确定程序的走向。分支结构程序的特征是程序段中有控制转移类指令(条件转移指令)。依据程序分叉的数目,可将分支结构程序细分为单分支选择结构和多分支选择结构两类。,4.2.2 分支结构,4.2 基本程序结构,1、单分支选择结构 当程序的判断仅有两个出口(分叉),即两者选一时,称为单分支结构。通常用条件判断指令来选择并确定程序的出口。例4-3.设内部RAM 40H和41H单元中存放2个8位无符号二进制数,

9、试编程找出其中的大数存人30H单元中。源程序如下:MOV A,40H CJNE A,41H,LOOP;取2个数进行比较 LOOP:JNC LOOP1;根据CY值,判断单分支出 MOV A,41H;41H单元中是大数 LOOP1:MOV 30H,A;40H单元中是大数 RET,4.2.2 分支结构,4.2 基本程序结构,2、多分支选择结构 当程序的判别部分有两个以上的出口(分叉)时,称为多分支选择结构。例4-4,设变量X的值存放在内部RAM的30H单元中,编程求解下列函数式,将求得的函数值Y存人40H单元。X1(X100)Y 0(10X100)X一1(X10),4.2.2 分支结构,4.2 基本

10、程序结构,MOV A,30H;取自变量X值 CJNE A,#10,LOOP;与10比较,A中值不改变LOOP:JC LOOP2;若X100,转LOOP3 MOV 40H,00H;因10X100,故Y=X1 MOV 40H,AEXIT:RET,4.2 基本程序结构,在程序设计中,遇到一段程序需要多次重复执行的情况,通常应该采用循环结构程序。1、循环结构程序组成 循环结构程序由初始化、循环处理、循环控制和循环结束4部分组成。(1)初始化部分 初始化部分设置循环处理之前的初始状态,如循环次数、变量初值、地址指针初值等。(2)循环处理部分 循环处理部分又称循环体,是重复执行的数据处理程序段,它是循环程

11、序的核心部分(功能主体)。,4.2.3 循环结构,4.2 基本程序结构,(3)循环控制部分控制部分控制循环继续与否。(4)结束部分结束部分对循环程序全部执行结束后的结果进行分析、处理和保存。循环结构程序一般分为“单重循环”和“多重循环”两类,循环次数的控制有多种方式,当循环次数已知时,可采用循环次数计数器控制循环;若循环次数未知时,可按条件满足与否控制循环。,4.2.3 循环结构,4.2 基本程序结构,2循环程序设计在一个循环程序的循环体中不包含另外的循环结构称为单重循环。例4-5,设某字符串以回车符(0DH)为结束标志,并存放在内部RAM40H单元开始的连续存储单元之中,编写测试字符串长度的

12、汇编语言程序。编程思路 为测试字符串(0DH)的长度,应使用逐个字符依次与回车符(ODH)比较的方法。为此需要设一个字符串指针和一个长度计数器,字符串指针用于指定字符,长度计数器用于累加字符串的长度。如比较不相等,则长度计数器和字符串指针都加1,以继续往下比较;如果比较相等,则表示该字符为回车符,字符串结束,长度计数器的值就是字符串的长度。,4.2.3 循环结构,4.2 基本程序结构,2循环程序设计 程序如下:MOV R7,0FFH;设长度计数器初值 MOV R0,3FH;字符串指针 初值LOOP:INC R7 INC R0 CJNE R0,ODH,LOOP RET,4.2.3 循环结构,4.

13、2 基本程序结构,4.2.4 子程序结构,在编写程序过程中,如果遇到在几个程序段中都需要执行某段相同程序的情况(功能独立),为减少编程工作量和节省程序存储空间,就应该采用子程序结构,将重复执行的相同程序段编写成为一个子程序(功能子程序)。,4.2 基本程序结构,MAIN:;进入主程序MOV R0,#03H;设置入口参数(延时1)ACALL SUBPRO;调用子程序;子程序返回,继续执行主程序;#;子程序入口地址(子程序名称):SUBPRO;功能:延时子程序(延时时间由R0初值设置);入口参数:R0内存放延时计数初值;出口参数:无;使用寄存器:R0、R1;#SUBPRO:MOV R1,#03HD

14、JNZ R1,$DJNZ R0,SUBPRORET;子程序返回 END,4.2.3 子程序结构,4.2 基本程序结构,单片机中断程序设计主要有以下三个方面:1、中断向量设置2、中断初始化3、中断服务程序,4.2.5 中断程序结构,4.2 基本程序结构,例4-7,设89C51单片机外中断0(EX0)下降沿有效,每次进入中断服务程序,要求将89C51单片机的P1.7P1.0取反。主程序如下:ORG 0000H STAR:AJMP MAIN;主程序原始入口 ORG 0003H;外部中断0中断向量 AJMP EXTR;跳转到EX0中断服务子程序实际入口地址 ORG 0030H MAIN:SETB IT

15、0;主程序实际入口,边沿触发设置 SETB EX0;外部中断0允许 SETB EA;总中断允许HERE:AJMP HERE;等待再次进入中断服务程序,4.2.5 中断程序结构,4.2 基本程序结构,中断服务子程序:ORG 1200H EXTR:PUSH PSW;保护现场 CPL A;累加器A数据取反 MOV P1,A;数据输出至P1端口 POP PSW;恢复现场 RETI;中断返回,4.2.5 中断程序结构,4.3 汇编语言程序设计实践,汇编语言程序设计的一般步骤如下:建立数学模型 用适用的数学方法描述所需要解决的问题;确定算法 将数学模型转化为适合单片机处理(顺序执行)的形式,采用绘制程序流

16、程图等方法表示程序设计的思路和依据。编写源程序 采用模块化设计方法,合理划分功能模块,分配存储器和I/O端口(依据硬件电路)等资源,确定各模块内各程序段的结构,编写源程序文件。汇编及调试 在集成开发环境的支持下,汇编语言源程序经汇编生成目标程序文件,并通过调试以及对运行结果的分析,修正源程序中的错误,达到预期的设计目标。,所谓查表,就是根据变量x在表格中查找y,使yf(x)。函数值y事先根据变量x的取值范围计算出,并按一定规律编成表格存放在计算机的程序存储器中。当用户程序中需要用这些数据时,直接按编排的索引值(或程序号)寻找答案。这样编写的程序称为查表程序。查表程序是一种常用程序,广泛应用于L

17、ED显示器控制、智能化仪表控制、打印机打印以及数据转换等功能程序中,具有程序简单、执行速度快等优点。查表程序有多种结构形式,下面举例介绍一种常用的查表程序。,4.3.1 查表程序,4.3 汇编语言程序设计实践,4.3.1 查表程序,例4-8,将16进制数转换成ASCII码的子程序。假设16进制数存放在R0中低4位,要求将转换后的ASCII码送回到R0中。设计思路:己知0-9的ASCII码为30H一39H,AF的ASCII码为41H一46H。对十六进制数而言,0-F是连续的,而对应的ASCII码不连续,查表方法对解决此类问题十分有效。根据题意,子程序的入口参数和出口参数均通过R0传递,表中所有的

18、值都是单字节,表格长度为16字节。,4.3 汇编语言程序设计实践,查表子程序:MOV A,R0;读取主程序通过R0传送的十六进制数ANL A,0FH;屏蔽高4位,取出低4位ADD A,#02H;设置变址值(依据表首地址与查表指 令所处位置)MOVC A,A+PC;查表指令(获得对应的ASCII码)MOV R0,A:通过R0将查表结果传递给主程序RETTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H 程序中因为“MOVC A,A+PC”指令与表格首址相隔两个字节,故变址调整值为2,程序中对应变量x的

19、函数值y为单字节。,4.3.1 查表程序,4.3 汇编语言程序设计实践,在51系列单片机指令集中有单字节的算术运算(加、减、乘、除)指令,但在实际程序设计中经常会遇到多字节算术运算问题,需要通过编制专门的功能子程序解决此类问题。例4-9,多字节无符号数加法运算。假设R0中存放被加数低位字节地址指针,R1中存放加数低位字节地址指针,R2中存放字节数,多字节算术运算一般从低字节(低位)到高字节(高位)的顺序依次进行。,4.3.2 算术运算程序,4.3 汇编语言程序设计实践,汇编源程序如下:ADDBIN:CLR C LOOP1:MOV A,R0;取被加数 ADDC A,R1;两数相加,带进位 MOV

20、 R0,A INC R0 INC R1 DJNZ R2,LOOP1;未加完转LOOP1 JNC LOOP2;无进位转LOOP2 MOV R0,#0lH RET LOOP2:DEC R0 RET,4.3.2 算术运算程序,4.3 汇编语言程序设计实践,例4-10,BCD码多字节加法运算。假设R0中存放被加数低位字节地址指针,R1中存放加数低位字节地址指针,R2中存放字节数。,BCDADD:MOV 20H,R0 MOV 23H,R2 CLR C LP0:MOV A,R0;取被加数 ADDC A,R1;两数相加 DA A;十进制调整 MOV RO,A INC R0;指针加1 DJN2 R2,LP0;

21、做完加法否,4.3.2 算术运算程序,MOV R2,23H JNC RETURN;有无进位 MOV R0,#01H INC R3 RETURN:MOV R0,#20H RET,4.3 汇编语言程序设计实践,例4-11,如图4-2所示,MCS-51单片机的P1作为输出端口,连接8只发光二极管。按该电路工作原理,P1口各位输出“0”时,将发光二极管点亮;P1口各位输出“1”使发光二极管灭。分析下述汇编程序运行后,8个发光二极管点亮的规律。,4.3.3 I/O接口控制程序,图4-2 P1口驱动LED示意图,4.3 汇编语言程序设计实践,主程序:LP:MOV P1,7EH LCALL DELAY MO

22、V P1,0BDH LCALL DELAY MOV P1,#0DBH LCALL DELAY MOV P1,0E7H LCALL DELAY MOV P1,0DBH LCALL DELAY MOV P1,0BDH LCALL DELAY SJMP LP子程序:DELAY:MOV R2,0FAH L1:MOV R3,#0FAH L2:DJNZ R3,L2 DJNZ R2,L1 RET,4.3.3 I/O接口控制程序,例4-12:按照图4-2所示的电路,试编写控制发光二极管指示灯移位的程序,要求8个发光二极管依次亮一个,循环左移,一个一个地亮,直至循环。相关源程序如下:MOV A,7FH L1:M

23、OV P1,A RL A LCALL DELAY;与例4-11的延时程序相同 SJMP Ll,4.3.3 I/O接口控制程序,4.3 汇编语言程序设计实践,一个函数的定义由类型、函数名、参数表和函数体四部分组合而成。一个函数在程序中可以三种形态出现:函数定义、函数调用、函数说明。C51函数的一般格式为:类型 函数名(参数表)参数说明;数据说明部分;/注释 执行语句部分;,4.4.1 C51程序结构,4.4 面向51单片机的C语言程序,4.4.2 C51数据类型,1.数据类型,KEIL C51编译器支持的数据类型、长度和值域如表4-1所列。,表4-1 KEIL C51 数据类型,4.4.2 C5

24、1数据类型,1.数据类型,C语言的数据有常量、变量之分。常量是在程序运行的过程中,其值不能改变的量;变量是在程序运行中,其值可以改变的量。一个变量由两部分构成:变量名和变量值,每一个变量都有一个变量名,在内存中占据一定的存储单元(地址),并在该内存单元中存放该变量的值。常量定义:#define CONST 44/定义常量符号CONST,值为44 变量定义:char t;/定义字符型变量,变量名为t C语言中习惯上以小写字母定义变量,以大写字母定义常量。另外由于51单片机的寄存器及数据总线为8位所以在定义变量时,应尽可能使用无符号字符型。,4.4.2 C51数据类型,1.数据类型-常量和变量,2

25、C51数据存储类型 51系列单片机的程序存储器与数据存储器是分开的,并独立寻址。51系列单片机共有如下四个存储空间:片内程序存储空间;片外程序存储空间;片内数据存储空间;片外数据存储空间。C语言编程时在对常量、变量的定义时,要注意不同功能的常量、变量应存储在不同的存储区,在定义变量或常量时要定义成不同的存储类型(data,bdata,idata,pdata,xdata,code)。,4.4.2 C51数据类型,表4-2 C51存储类型与单片机存储空间对应关系,4.4.2 C51数据类型,2C51数据存储类型,3特殊功能寄存器的定义 在51单片机内部RAM的高128字节,分散着21个特殊功能寄存

26、器(SFR),为了能直接访问这些特殊功能寄存器,KEIL C51提供一种自主形式的定义方法,此种方法与标准C语言不兼容,只适用于对8051系列单片机进行定义。这种定义的方法引入关键字“sfr”,如:sfr TMOD=0 x89;/*定时/计数器方式控制寄存器地址为89H*/。sbit:特殊功能位声明,sbit led1=P10;,4.4.2 C51数据类型,将其视为片外数据存储器的一个单元,利用#define语句进行定义:#define PORTA XBYTE0 x0020/*将PORTA定义为外部I/O口,地址为0 x0020*/例:要通过地址0 x0020向外部写数据0 x01,下面分别用

27、汇编语言和C语言编程实现:汇编语言实现:MOV DPTR,#0020HMOV A,#01HMOVX DPTR,AC语言实现:#define PORTA XBYTE0 x0020PORTA=0 x01;,4.4.2 C51数据类型,4片外扩展I/O口,C51的运算符主要包括算术运算、关系运算、逻辑运算、位操作运算、自增减运算及复合运算等。其运算符与表达式与C语言要求基本一致。,4.4.3 C51运算符和表达式,4.4.2 C51数据类型,4.4.3 C51运算符和表达式,C语言程序主要有顺序、选择和循环三种结构。顺序结构即语句逐条执行,是最基本、最简单的程序结构。选择结构和循环结构的相关控制语句

28、分别介绍如下:1选择结构语句及流程图 在选择结构中常见的控制语句有:if,else if,switch-case。其中if、else if主要应用在串行多分支结构程序控制中,而switch-case主要用于并行从分去结构程序的控制中。图4-3所示为串行多分支结构流程图。,4.4.4 C51流程控制语句,4.4 面向51单片机的C语言程序,图4-3 串行多分支结构流程图,串行多分支结构,语句的基本形式:1)if(表达式)语句;/当括号内的表达式为真,则执行内的语句;2)if(表达式)语句1;else语句2;/当括号内的表达式为真,则执行内的语句,否则执行语句2;3)if(表达式1)语句1;els

29、e if(表达式2)语句2;else语句n;/哪一个表达式条件为真,则执行对应中的语句,但判断时表达式1的优先级最高,只有条件不满足时,才继续向下判断。4)if(表达式1)if(表达式2)语句1;else 语句2;/if的嵌套使用,只有当表达式1为真时,才进行下一级判断。,1选择结构语句及流程图,并行多分支结构,图4-4并行多分支结构流程图,switch-case语句表达形式:switch(表达式1)case 值1:语句1;break;case 值2:语句2;break;case 值N:语句N;break;default:语句N+1;,1选择结构语句及流程图,4.4.4 C51流程控制语句,2

30、循环结构语句及流程图 循环结构中常见的控制语句主要有while,do while,for等。While语句的一般形式为:while(条件)语句;,,图4-5 while结构流程图,4.4.4 C51流程控制语句,与while相比,do while的区别就是行执行循环语句后判断循环条件。语句的形式为:do语句;while(条件)。流程图如图4-6所示。,图4-6 do while结构流程图,4.4.4 C51流程控制语句,2循环结构语句及流程图,for(表达式1;表达式2;表达式3)语句;,for语句在执行时共有5个过程,具体执行过程如下:对表达式进行赋值初始化 判断表达式2是否为真,若为真则进

31、行循环,若为假则退出循环 若表达式2为真,则执行循环体内的语句,并求解表达式3 回到第二步,再判断表达式2 退出for 循环,4.4.4 C51流程控制语句,2循环结构语句及流程图,51单片机内部资源主要是特殊功能寄存器或SFR寻址,在KEIL C51中提供了定义这些寄存器的头文件,在进行C语言编程,应在源程序的开始处包含头文件,#include。内部资源的C语言编程主要介绍外中断、定时器和串行口编程。C51编译器支持在C源程序中直接开发中断程序,采用特殊语法定义中断函数,定义方法如下:返回值 函数名 interrupt n using m n代表单片机的中断编号,n的范围(04)依次为外部中

32、断0、定时/计数器0、外部中断1、定时/计数器1、串行口中断。m表示通用寄存器组的的选择,范围(0-3)。,4.4.5 单片机资源与C语言编程,4.4.6 C语言程序实例,在进行单片机的C语言编程时,其步骤与汇编语言编程没有区别,首先要了解单片机系统硬件电路的设计,尤其单片机的外部资源的地址编码,当了解了单片机系统的硬件电路后,就可以根据要求画出流程图,合理分配内部资源进行编程,下面以一个数据采集的实例进行说明。,图4-7为ADC0809与51系列单片机(89S51)的接口电路原理图,要求顺序采集ADC0809的8个通道的模拟量,并存放在数组ADCON中,图4-7 单片机数据采集原理图,由电路

33、原理图可以看到,ADC0809的启动信号START由译码器Y1与单片机RD信号经或非门产生,输出使能信号OE由Y1与单片机WR信号经或非门产生,3/8译码器的输入接到P2.5至P2.7,ADC0809的通道选择信号接到单片机的地址线A0至A2,因此得到ADC0809的8个输入通道的地址为2000H2007H,ADC0809转换结束标志EOC经非门后接到单片机的P3.2口。,C51源程序如下:#include/包含头文件#include#define uchar unsigned char#define IN0 XBYTE0 x2000/设置ADC0809通道0的地址sbit ad_over=P

34、32;/转换结束标志定义void ad0809(uchar idata*x)/采集函数uchar i;uchar xdata*ad_adr;ad_adr=,#include#define uchar unsigned char#define uint unsigned intsbit D0=P10;uint a;,void main()D0=0;a=59000;while(a-);D0=1;a=50000;while(a-);,#includedelay_10ms(unsigned t)unsigned int i,j;for(i=0;it;i+)for(j=0;j1880;j+);,void

35、 main()while(1)delay_10ms(100);P0=0 xfe;delay_10ms(100);P0=0 xfd;delay_10ms(100);P0=0 xfb;Delay_10ms(100);P0=0 xf7;delay_10ms(100);P0=0 xef;delay_10ms(100);P0=0 xdf;delay_10ms(100);P0=0 xbf;delay_10ms(100);P0=0 x7f;,#include/52系列单片机头文件#define uint unsigned int/宏定义#define uchar unsigned charvoid dela

36、yms(uint);/声明子函数uchar x;/声明无符号数原变量x(占1B)void main()/主函数P1=0 xfe;/赋初值11111110 while(1)/大循环for(x=0;x1|0 x80;/右移1位,并设定最高位为1/右移结束,灯全部灭,无论是单片机汇编语言还是C语言编程,都需要借助一个软件工具,一般也称为开发环境,目前有很多专业的单片机软件开发工具,下面为读者介绍一种单片机的集成开发环境,Keil uVision2集成开发环境。Keil Vision2集成开发环境是德国Keil公司针对51系列单片机应用系统开发而推出的基于32位 windows环境下,以51单片机为开

37、发目标,以高效率C语言为基础的集成开发平台。本节主要介绍Keil C51 V7.20版,它主要包括C51交叉编译器和A51宏汇编等工具,还内嵌了单片机仿真调试软件,可以让用户采用模拟仿真和实时在线仿真两种方式对目标系统进行开发。软件仿真时,它可以查看程序变量,内部存储单元。以及模拟和查看单片机I/O口,定时器及中断的工作方式和设置,甚至可以仿真单片机的串行通信。,4.5 Keil Vsion2 集成开发环境,双击安装程序setup,进入安装模式。它与一般软件安装过程类似。值得注意的是,当出现提示“Install Support.全新安装”和“Update Current Installatio

38、n升级安装”时,选择“Install Support.全新安装”。并且在出现提示“Full version”和“Eval version”时,选择“Full version”。随后依次点击“Next-Yes-选择安装目录-Next-”输入序列号、姓名、公司”等。安装完成后在Windows桌面上会出现一个Keil Vision2的图标。,4.5.1 Keil uVsion2安装,在Keil uVsion2支持下开发单片机应用系统软件,一般需要经过以下的几个过程:创建工程工程选项卡设置新建源文件添加源文件到工程编译仿真调试下载。,4.5.2 Keil Vsion2的使用,(1)Keil C51 V

39、ision2界面与工程创建(如图4-8),图4-8 Keil C51 Vision2 的工作界面,创建一个新工程,首先须在菜单栏“Project”菜单中选择“New Project”选项(补充图1),此时会弹出“创建新工程”对话框(补充图2),可填入工程名,随后单击保存。,创建新工程 补充图1,保存工程项目(Test)补充图2,接着出现选择单片机芯片型号对话框(补充图3)。本例选择单片机,随后点击“确定”,新工程创建即告完成。,选择芯片型号 补充图3,建立源程序文档 补充图4,点击保存按钮 补充图5,图4-9 源程序文档加入所建工程项目中,图4-10 工程文件设置,Target选项卡设置补充图

40、6,Output选项卡的设置 补充图7,保存文件格式 补充图8(练习.A),添加源程序 补充图9,设定完成后单击“确定”返回主界面,工程文件设置完毕。当工程建立并设置完成之后,接下来就可以对工程进行编辑(源程序文本)。以下面简单的汇编源程序为例:ORG 0000H;P1口输出实验 LJMP STARTORG 0100HSTART:MOV A,#0FEHLOOP:RL A MOV P1,A LCALL DELAY;延时 0.1秒 JMP LOOPDELAY:MOV R1,#127;延时0.1秒DEL1:MOV R2,#200DEL2:DJNZ R2,DEL2 DJNZ R1,DEL1 RET E

41、ND,当源程序文件编辑输入完成之后,单击工具栏保存文件,随后单击工具栏的编译按钮“”对文件进行编译。如果源程序没有语言错误,将会在文件存储目录生成,OBJ文件,同时如果设置正确,会生成.HEX文件,并且在工程主界面下方会出现无语法错误的提示,如图4-19。但源程序没有语法错误并不能保证就是正确可行的,还需要对程序进行调试。,程序通过编译 补充图10,图4-11 进入调试仿真环境,此外Keil软件在程序调试时可随时观察寄存器及端口、存储器的变化图4-22中,左面窗口显示了系统内部寄存器。点击任务栏“Peripherals”选项,可以选择打开中断,I/O口,定时器等状态窗口。另外点击调试工具栏的“

42、观察窗口”可以查看程序中所设变量的变化情况如图4-23所示,便于程序的调试。另外我们也注意到,在调试工具栏中,还有其它调试工具的按钮,此处不再一一列举,读者可在调试的过程加强对其的理解。灵活掌握调试工具,有助于高效率地进行程序的调试。,调试工具栏 补充图11,图4-22 查看端口状态窗口,变量观察窗口 补充图12,图4-13 SLISP编程界面,4.5.3 程序代码下载,(1)根据实际连接方式选择通讯端口,如LPT1表示利用并口连接。(2)选择速率,默认为FAST。(3)选择单片机型号,如AT89S52。(4)选择目标文件,单击文件按钮,选择编译后的.HEX或.BIN文件。(5)在编程选项中如

43、图选中重载文件,擦除,FLASH,校验芯片ID码前面的复选框。(6)点击编程按钮,即可将程序下载到单片机中。程序下载到单片机后,即可观察硬件的运行情况,并根据实际运行再次修改程序。需要提出注意的是,由于AT89S52单片机的ISP接口是与P1口共用的,所以在运行P1口的程序时应将下载线取下否则可能会影响程序的运行。,4.5.3 程序代码下载,思考练习题,1.什么是伪指令?伪指令有何作用?伪指令与指令集中的指令有何区别2.计算机可以执行的指令是什么指令?汇编语言程序和C语言程序如何变换成为由可执行的指令构成的文件?3.编写一段完整规范的51汇编语言程序,将某51单片机片内35H一55H单元的数据

44、传送到外部RAM以3000H为首址的存储区中。4.试编写一段汇编语言程序,使某51单片机片内30H单元的内容与外部RAM2200H单元的内容交换。5.设某51单片机片内5AH单元有一变量x,请编写计算以下分段函数式的汇编语言程序,并将计算结果存入片内5BH单元中。2X1(X100)Y 0(10X100)X一2(X10)6.编写汇编语言程序,实现某51单片机P1口外接的8个发光二极管的流水(跑马)灯控制(时间间隔自行定义并采用调用延时子程序方式实现)。7.假设有5个双字节压缩码,顺序存放在外部RAM从BARF(2000H)开始的单元中(高位存放在高地址字节)。编写汇编语言程序,实现上述数据求和并将结果存放到SUM(51单片机片内RAM)开始的单元中(未给出的条件可自行定义并加以注释)。8.编写汇编语言程序和C51程序,将存放在表首地址以标号TAB表示的数据表中存放的8个单字节数逐个取出并求其平均值(未给出的条件可自行定义并加以注释)。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号