单片机AT89S52程序相关设计和调试_第1页
单片机AT89S52程序相关设计和调试_第2页
单片机AT89S52程序相关设计和调试_第3页
单片机AT89S52程序相关设计和调试_第4页
单片机AT89S52程序相关设计和调试_第5页
已阅读5页,还剩54页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 单片机AT89S52程序相关设计和调 试 1 第第5章章 程序设计与调试程序设计与调试 n5.1 汇编语言程序设计汇编语言程序设计 n5.2 C51 n5.3 单片机AT89S52程序相关设计和调 试 2 源程序的编辑源程序的编辑 源程序的编写要依据源程序的编写要依据8051汇编语言的基本规则,特别要汇编语言的基本规则,特别要 用好常用的汇编命令(即伪指令),例如下面的程序段:用好常用的汇编命令(即伪指令),例如下面的程序段: ORG 0040H MOV A,#7FH MOV R1,#44H END 这里的这里的ORG和和END是两条伪指令,其作用是告诉汇编程序此是两条伪指令,其作用是告诉汇

2、编程序此 汇编源程序的起止位置。编辑好的源程序应以汇编源程序的起止位置。编辑好的源程序应以 .ASM或或.A51 扩展名存盘扩展名存盘(取决于汇编器要求取决于汇编器要求),以备汇编程序调用。,以备汇编程序调用。 5.1 汇编语言程序设计汇编语言程序设计 单片机AT89S52程序相关设计和调 试 3 源程序经过机器汇编后,形成的若干文件中含有两个主要源程序经过机器汇编后,形成的若干文件中含有两个主要 文件,一是列表文件,另一个是目标码文件。因汇编软件的文件,一是列表文件,另一个是目标码文件。因汇编软件的 不同,文件的格式及信息会有一些不同。但主要信息如下:不同,文件的格式及信息会有一些不同。但主

3、要信息如下: 列表文件主要信息为:列表文件主要信息为: 地地 址址 目标码目标码 汇编程序汇编程序 ORG 0040H 0040H 747F MOV A,#7FH 0042H 7944 MOV R1,#44H END 目标码文件主要信息为:目标码文件主要信息为: 首地址首地址 末地址末地址 目标码目标码 0040H 0044H 747F7944 单片机AT89S52程序相关设计和调 试 4 伪指令伪指令 伪指令是汇编程序能够识别并对汇编过程进行某种控伪指令是汇编程序能够识别并对汇编过程进行某种控 制的汇编命令。它不是单片机执行的指令,所以没有对应制的汇编命令。它不是单片机执行的指令,所以没有对

4、应 的可执行目标码,汇编后产生的目标程序中不会再出现伪的可执行目标码,汇编后产生的目标程序中不会再出现伪 指令。指令。 1、起始地址设定伪指令:、起始地址设定伪指令: ORG 格式为:格式为:ORG 表达式表达式 该指令的功能是向汇编器说明下面紧接的程序代码或常该指令的功能是向汇编器说明下面紧接的程序代码或常 数存放的起始地址(程序存储器地址)。在一个源程序中,数存放的起始地址(程序存储器地址)。在一个源程序中, 可以多次使用可以多次使用ORG伪指令规定不同程序段或数据段存放的伪指令规定不同程序段或数据段存放的 起始地址,但要求地址值由小到大依序排列,不允许空间起始地址,但要求地址值由小到大依

5、序排列,不允许空间 重叠。重叠。 2、汇编结束伪指令:、汇编结束伪指令: END 汇编程序遇到汇编程序遇到END伪指令后即结束汇编,处于伪指令后即结束汇编,处于END之之 后的程序,汇编程序将不处理。后的程序,汇编程序将不处理。 单片机AT89S52程序相关设计和调 试 5 ORG和和END例子例子 ORG 0 ;该段程序的机器码从地址该段程序的机器码从地址0单元开始存放单元开始存放 AJMP START ORG3;该段程序的机器码从地址该段程序的机器码从地址3单元开始存放单元开始存放 AJMP INT0_PROC ORG 0100H; 0100H地址单元开始存放地址单元开始存放 START:

6、 MOV A,#30H ORG 1000H; 1000H地址单元开始存放地址单元开始存放 INT0_PROC: CLR IE0 END; 所有汇编程序结束所有汇编程序结束 单片机AT89S52程序相关设计和调 试 6 标号:标号: DB 字节数据表字节数据表 功能是从标号指定的地址开始,在程序存储器中定义字功能是从标号指定的地址开始,在程序存储器中定义字 节数据。字节数据表可以是一个或多个字节数据、字符串或节数据。字节数据表可以是一个或多个字节数据、字符串或 表达式。该伪指令将字节数据表中的数据根据从左到右的顺表达式。该伪指令将字节数据表中的数据根据从左到右的顺 序依次存放在指定的存储单元中。

7、一个数据占一个存储单元。序依次存放在指定的存储单元中。一个数据占一个存储单元。 例如:例如: ORG 500H DB 8,10,18 DB “ABC” 汇编后,汇编后,500H开始顺序存放:开始顺序存放:08H,0AH,12H,41H,42H, 43H 3、字节数据定义伪指令、字节数据定义伪指令 DB 单片机AT89S52程序相关设计和调 试 7 标号:标号: DW 字数据表字数据表 功能是从标号指定的地址单元开始,在程序存储器中定功能是从标号指定的地址单元开始,在程序存储器中定 义字数据。该伪指令将字或字表中的数据根据从左到右的顺义字数据。该伪指令将字或字表中的数据根据从左到右的顺 序依次存

8、放在指定的存储单元中。序依次存放在指定的存储单元中。16位的二进制数,高位的二进制数,高8位位 存放在低地址单元,低存放在低地址单元,低8位存放在高地址单元。例如:位存放在高地址单元。例如: ORG 1400H DATA:DW 324AH,3CH 汇编后,(汇编后,(1400H)=32H,(,(1401H)= 4AH,(,(1402H) =00H,(,(1403H)=3CH。 4、字数据定义伪指令、字数据定义伪指令 DW 单片机AT89S52程序相关设计和调 试 8 符号名符号名 EQU 表达式表达式 功能是将表达式的值或特定的某个汇编符号定义为一功能是将表达式的值或特定的某个汇编符号定义为一

9、 个指定的符号名。例如:个指定的符号名。例如: LEN EQU 10; 把把BLOCK单元开始存放的单元开始存放的10 SUM EQU 21H;个无符号数进行求和个无符号数进行求和 BLOCK EQU 22H;并将结果存入并将结果存入SUM单元中单元中 CLR A MOV R7,LEN MOV R0,BLOCK LOOP: ADD A,R0 INC R0 DJNZ R7,LOOP MOV SUM,A END 5、赋值伪指令、赋值伪指令 EQU 单片机AT89S52程序相关设计和调 试 9 符号名符号名 DATA 表达式表达式 功能是将表达式的值作为内部功能是将表达式的值作为内部RAM地址赋给一

10、个指定地址赋给一个指定 的符号名。例如:的符号名。例如: LEN EQU 10; SUM DATA 21H; 与与EQU不同之处是明确指出不同之处是明确指出 BLOCK DATA 22H; 符号名代表内部符号名代表内部RAM地址地址 CLR A MOV R7,LEN MOV R0,BLOCK LOOP: ADD A,R0 INC R0 DJNZ R7,LOOP MOV SUM,A END 6、内部、内部RAM地址赋值伪指令地址赋值伪指令 DATA 单片机AT89S52程序相关设计和调 试 10 符号名符号名 BIT 表达式表达式 功能是将表达式的值作为位地址赋给一个指定的符号功能是将表达式的值

11、作为位地址赋给一个指定的符号 名。例如:名。例如: SDABIT P1.0; 数据输出数据输出 SCKBIT P1.1; 时钟输出时钟输出 SHIFT_OUT:; 移位输出子程序移位输出子程序 MOVR6, #8 LP:RLC A MOVSDA, C SETB SCK NOP CLRSCK DJNZ R6, LP RET 7、位地址赋值伪指令、位地址赋值伪指令 BIT 单片机AT89S52程序相关设计和调 试 11 ORG 0000H MOV DPTR, #2000H LPCLR: CLR A MOVX DPTR, A ; 0送送(DPTR) INC DPTR ; DPTR+1 MOVA, D

12、PH CJNE A, #30H,LPCLR ; 地址不到地址不到3000H再清零再清零 LOOP: SJMP LOOP 例例5.1 将外部将外部RAM2000H2FFFH的内容清零的内容清零 单片机AT89S52程序相关设计和调 试 12 ORG 0000H MOV R7, #10H ;共要在共要在16个字节中个字节中查找查找 MOV R1, #00H;暂存暂存0的个数的个数 MOV DPTR, #2000H RCMP: MOVX A, DPTR CJNE A, #0, NEXT ;比较取出内容与比较取出内容与00H相等吗相等吗? INC R1 ;相等则相等则0的个数加的个数加1 NEXT:

13、INC DPTR DJNZ R7, RCMP ;未完继续取出下一个数比较未完继续取出下一个数比较 MOV DPTR,#2100H MOV A,R1 MOVX DPTR,A ;相同数个数送相同数个数送2100H SJMP $ 例例5.2 在在2000H-200FH中查出有几个字中查出有几个字 节是零,把个数放在节是零,把个数放在2100H单元中单元中 单片机AT89S52程序相关设计和调 试 13 5.2 C51程序设计程序设计 n5.2.1 C51的程序结构的程序结构 n5.2.2 C51的数据类型与存储类型的数据类型与存储类型 n5.2.3 C51的指针的指针 n5.2.4 C51的函数与中

14、断处理程序的函数与中断处理程序 n5.2.5 C51程序实例程序实例 单片机AT89S52程序相关设计和调 试 14 5.2.1 C51的程序结构的程序结构 与一般与一般C语言的结构相同,以语言的结构相同,以main()函数为程序入函数为程序入 口,程序体中包含若干语句还可以包含若干函数。口,程序体中包含若干语句还可以包含若干函数。 预处理语句预处理语句 类型类型 函数名函数名(参数表参数表) 数据说明部分数据说明部分; 执行语句部分执行语句部分; 由于没有操作系统的支持,由于没有操作系统的支持,main()必须设计成循环必须设计成循环 结构或以循环结束,实际在进入结构或以循环结束,实际在进入

15、main()之前,先执行了之前,先执行了 一个汇编语言的初始化程序一个汇编语言的初始化程序Startup.A51, 完成必须的完成必须的 环境初始化,如片内环境初始化,如片内RAM清零等。清零等。 单片机AT89S52程序相关设计和调 试 15 #include /其中包括其中包括SFR定义,要用到定义,要用到 P1 sbit SQW=P10; /定义定义P1.0引脚引脚 main() while(1)SQW=!SQW;/在在P1.0引脚上产生方波引脚上产生方波 简单例子简单例子1 单片机AT89S52程序相关设计和调 试 16 #include /要用到要用到sfr: P1 void del

16、ay(void);/声明函数声明函数 sbit SQW=P10; main() while(1) /无限循环无限循环 SQW=!SQW; /在在P1.0引脚上产生方波引脚上产生方波 delay(); void delay(void) int i,j ; for(i=0; i1000; i+)for(j=0;j100;j+); 简单例子简单例子2 单片机AT89S52程序相关设计和调 试 17 C语言的关键字共有语言的关键字共有32个,根据关键字的作用,可分四类:个,根据关键字的作用,可分四类: (1)数据类型关键字()数据类型关键字(12个):个):char, double, enum, fl

17、oat, int, long, short, signed, struct, union, unsigned, void; (2)控制语句关键字()控制语句关键字(12个):个):break, case, continue, default, do, else, for, goto, if, return, switch, while; (3)存储类型关键字()存储类型关键字(4个):个):auto, extern, register, static; (4)其它关键字()其它关键字(4个):个):const, sizeof, typedef, volatile。 标准标准(ANSI) C关键

18、字关键字 单片机AT89S52程序相关设计和调 试 18 C51扩展的关键字扩展的关键字 单片机AT89S52程序相关设计和调 试 19 5.2.2 C51的数据类型与存储类型的数据类型与存储类型 1、基本数据类型、基本数据类型 单片机AT89S52程序相关设计和调 试 20 2、C51扩充定义的数据类型扩充定义的数据类型 nsfr : 特殊功能寄存器声明特殊功能寄存器声明 nsfr16 : sfr的的16位数据声明位数据声明 nsbit : 特殊功能位声明特殊功能位声明 nbit : 位变量声明位变量声明 上述扩充定义的数据类型中,只有上述扩充定义的数据类型中,只有bit类型是普通变量类型类

19、型是普通变量类型 与与int、char功能一样,可用于定义变量或函数。其余扩充功能一样,可用于定义变量或函数。其余扩充 类型均与类型均与SFR有关。有关。 sfr SCON = 0X98; sfr16 T2 = 0 xCC; /*T2L0CCH,T2H0CDH*/ sbit OV = PSW2; sbit P1_0=0 x900; bit a,b,c; bit function1(void); b= function1(); if (b) return; 单片机AT89S52程序相关设计和调 试 21 sbit 使用关键字使用关键字sbit可以独立访问可位寻址对象中的某一位,可以独立访问可位寻

20、址对象中的某一位, 这个对象除了这个对象除了SFR外,也可以是外,也可以是bdata区定义的变量。从这区定义的变量。从这 一点也可以看出一点也可以看出bit和和sbit的区别。例如:的区别。例如: bdata int ibase; *在位寻址区定义一个变量在位寻址区定义一个变量* bdata char array 4 *在位寻址区定义在位寻址区定义 一一 个数组个数组* sbit mybit_0 ibase0; sbit mybit_15ibase 15; sbit Ary07array0 7; sbit Ary37array3 7; 采用这种方法定义可位寻址变量时要求基址对象的存采用这种方法

21、定义可位寻址变量时要求基址对象的存 储器类型为储器类型为bdata,操作符,操作符“”后面的位位置的最大值取后面的位位置的最大值取 决于指定的基址类型,对于决于指定的基址类型,对于char来说是来说是07;对于;对于int来说来说 是是015;对于;对于long来说是来说是031。 单片机AT89S52程序相关设计和调 试 22 头文件头文件 n所有特殊功能寄存器的定义都在所有特殊功能寄存器的定义都在C51的头文件中定义,的头文件中定义, 如如reg52.h,使用,使用#include 语句包含需要语句包含需要 的头文件即可直接使用定义完成的特殊功能寄存器或的头文件即可直接使用定义完成的特殊功

22、能寄存器或 位名称;位名称; n参看文件参看文件reg51.h,reg52.h,at89x52.h等,所有头等,所有头 文件在文件在keilC51inc目录下。目录下。 n常用头文件有:常用头文件有:reg51.h math.h ctype.h stdio.h stdlib.h absacc.h。 reg51.h和和 reg52.h 定义特殊功定义特殊功 能寄存器和位寄存器,能寄存器和位寄存器,math.h定义常用数学运算。定义常用数学运算。 单片机AT89S52程序相关设计和调 试 23 3、C51数据的存储类型数据的存储类型 由于由于MCS-51结构的特殊性,结构的特殊性,C51通过存储类

23、型来声明通过存储类型来声明 将变量定义在哪一个存储空间,存储类型如下表:将变量定义在哪一个存储空间,存储类型如下表: 单片机AT89S52程序相关设计和调 试 24 对于非指针的普通变量,定义格式为:对于非指针的普通变量,定义格式为: 存储类型存储类型 数据类型数据类型 变量名;变量名; 也可写为:也可写为: 数据类型数据类型 存储类型存储类型 变量名;变量名; 例如:例如: data char i, j, k; idata unsigned char display16; xdata unsigned int buf100; code unsigned char bcd_seg_tab10=

24、0 x40,0 x7c, 0 x12,0 x18,0 x2c,0 x41,1,0 x5c,0,0 x8; /共阴共阴7段码段码 char data m,n; unsigned int xdata len; float idata x,y,z; 变量的定义方法变量的定义方法 单片机AT89S52程序相关设计和调 试 25 变量的定义方法变量的定义方法 由于大多数情况下使用无符号数,为了书写简便,通常由于大多数情况下使用无符号数,为了书写简便,通常 在文件开头用在文件开头用#define定义几种常用数据类型,如:定义几种常用数据类型,如: #define uchar unsigned char #

25、define uint unsigned int #define ulong unsigned long data uchar i,j, k; idata uint m,n; 如有必要,可以用关键字:如有必要,可以用关键字:_at_ 对变量绝对定位对变量绝对定位 格式:格式: 存储类型存储类型 数据类型数据类型 变量名变量名 _at_ constant; Constant为定位的地址为定位的地址 如:如:data char musich _at_ 0 x29, musicl _at_ 0 x2a; idata char buf8 _at_ 0 x30; 单片机AT89S52程序相关设计和调 试

26、 26 4、C51的存储模式的存储模式 定义定义C51变量时,也可以不用显式声明该变量的存变量时,也可以不用显式声明该变量的存 储类型,如:储类型,如: int i, j, k; unsigned char num; 一般使用小模式(缺省即是),当需要使用一般使用小模式(缺省即是),当需要使用xdata 或或pdata区时,通过显式声明变量的存储类型实现。区时,通过显式声明变量的存储类型实现。 在这种情况下,使用默认的(缺省)的存储类型,在这种情况下,使用默认的(缺省)的存储类型, 而默认的存储类型与而默认的存储类型与C51编译器编译器使用的存储模式有关,使用的存储模式有关, C51定义了三种

27、存储模式,如下表:定义了三种存储模式,如下表: 单片机AT89S52程序相关设计和调 试 27 5.2.3 C51的指针的指针 1、通用指针、通用指针 定义时不用指明指针所指向数据的存储空间,指针定义时不用指明指针所指向数据的存储空间,指针 本身占本身占3个字节。由于指针本身也是一个变量,因此可个字节。由于指针本身也是一个变量,因此可 以声明该变量的存储类型。以声明该变量的存储类型。 定义格式:定义格式: 存储类型存储类型 数据类型数据类型 *指针名;指针名; 例如:例如: char *p; /占占3字节,由存储模式确定存储类型字节,由存储模式确定存储类型 idata int *pm,*pn;

28、 /占占idata区区3字节字节 bdata long *p2; /占占bdata区区3字节字节 xdata unsigned char *px /占占xdata区区3字节字节 data char buf10; p=buf; 单片机AT89S52程序相关设计和调 试 28 2、专用指针、专用指针 定义时要指明指针所指向数据的存储类型,指针本身定义时要指明指针所指向数据的存储类型,指针本身 只占只占1个或个或2个字节。个字节。 定义格式:定义格式: 存储类型存储类型 数据类型数据类型 存储类型存储类型 *指针名;指针名; 例如:例如: char data *p; /占占1字节,由存储模式确定存储

29、类型字节,由存储模式确定存储类型 int xdata *px=0 x2000; /占占2字节,缺省占字节,缺省占data区区 unsigned char code *p1; /占占2字节,缺省占字节,缺省占data区区 int idata *p=0 x30; /占占1字节,缺省占字节,缺省占data区区 idata int xdata *pm,*pn; /占占idata区区2字节字节 bdata long data *p2; /占占bdata区区1字节字节 xdata unsigned char code *px/占占xdata区区2字节字节 单片机AT89S52程序相关设计和调 试 29 比

30、较专用指针和通用指针比较专用指针和通用指针 单片机AT89S52程序相关设计和调 试 30 5.2.4 C51的函数与中断处理程序的函数与中断处理程序 1、 Keil C51函数格式函数格式 return_type function_name(args) small|compact|large reentrant using m nsmall|compact|large:存储模式:存储模式 nreentrant:重入函数(可被多个进程同时调用执行,并:重入函数(可被多个进程同时调用执行,并 且函数自身可以递归调用)且函数自身可以递归调用) nusing m:使用的工作寄存器组。:使用的工作寄存

31、器组。m=0-3 例:例: bit receive(unsigned char *buf, unsigned char len); void delay(void); 单片机AT89S52程序相关设计和调 试 31 2、Keil C51中断处理程序的格式中断处理程序的格式 中断号中断号012345- 中断源中断源 外中断外中断0 T0溢出溢出 外中断外中断1 T1溢出溢出 串行中断串行中断 格式:格式: void function_name( ) small|compact|large interrupt n using m interrupt n:中断号。:中断号。n=0-4,5- usin

32、g m:使用的工作寄存器组。:使用的工作寄存器组。m=0-3 例如:例如: void key(void) interrupt 0 单片机AT89S52程序相关设计和调 试 32 main( ) int i; unsigned char xdata *p=0 x2000; /* 指针指向外部指针指向外部RAM 2000H单元单元 */ for(i=0; i0 x1000; i+) *p+=0; /* 清零清零2000H-2FFFH单元单元 */ while(1);/*以循环结束以循环结束*/ 5.2.5 C51程序实例程序实例 例例5.3 将外部将外部RAM2000H2FFFH的内容清零的内容清

33、零 单片机AT89S52程序相关设计和调 试 33 #define uchar unsigned char main ( ) uchar xdata *p=0 x2000; /*指针指针p指向指向2000H单元单元*/ int n=0,i; for(i=0; i16; i+) if(*p=0) n+; /* 若该单元内容为零,则若该单元内容为零,则n+1 */ p+; /* 指针指向下一单元指针指向下一单元 */ p=0 x2100;/* 指针指针p指向指向2100H单元单元 */ *p=n; /* 把个数放在把个数放在2100H单元中单元中 */ for(;);/*以循环结束以循环结束*/

34、例例5.4 在在2000H-200FH中查出有几个字中查出有几个字 节是零,把个数放在节是零,把个数放在2100H单元中单元中 单片机AT89S52程序相关设计和调 试 34 #include /定义了直接对应汇编语言的函数定义了直接对应汇编语言的函数 #define somenop() _nop_(); _nop_(); _nop_(); _nop_(); unsigned char code sin_tab200=0, 1, , 0 xff, , 1, 0; main () unsigned char i ; unsigned char xdata *p=0 x2000; for(;)/无

35、限循环作为无限循环作为main的结束的结束 for( i=0; i200; i+) *p=sin_tabi; somenop(); /延时延时4个个Tm /end of for(;) /end of main 例子例子5.5 设程序存储区定义了一个大小为设程序存储区定义了一个大小为200字节的字节的 正弦函数表,设外部正弦函数表,设外部RAM地址地址2000H处为处为D/A转换器转换器 端口,试将端口,试将200字节的数据循环复制到字节的数据循环复制到2000H处。处。 方法方法1 单片机AT89S52程序相关设计和调 试 35 #include #include /定义了绝对地址访问的方法定

36、义了绝对地址访问的方法 #define somenop() _nop_(); _nop_(); _nop_(); _nop_(); unsigned char code sin_tab200=0, 1, , 0 xff, , 1, 0; main () unsigned char i ; do for( i=0; i200; i+) XBYTE 0 x2000=sin_tabi; /XBYTE somenop(); /延时延时4个个Tm while(1);/无限循环作为无限循环作为main的结束的结束 方法方法2 单片机AT89S52程序相关设计和调 试 36 #include /定义了直接对

37、应汇编语言的函数定义了直接对应汇编语言的函数 #define somenop() _nop_(); _nop_(); _nop_(); _nop_(); unsigned char code sin_tab200=0, 1, , 0 xff, , 1, 0; main () unsigned char i,*p1, *p2 ; p1=(unsigned char xdata *)0 x2000; /须指出须指出0 x2000类型类型 p2=sin_tab; /p2指向指向code区区 while(1) /无限循环作为无限循环作为main的结束的结束 for( i=0; i200; i+) *p

38、1=*p2+; somenop(); /延时延时4个个Tm p2=sin_tab;/指针回到初值指针回到初值 方法方法3 单片机AT89S52程序相关设计和调 试 37 例例5.6 计算计算RAM 30开始的开始的16字节无符号数的和,若字节无符号数的和,若 为为0,点亮,点亮P1.7接的绿色接的绿色LED,为,为FFH点亮点亮P1.6接的接的 红色红色LED,其它值则点亮,其它值则点亮P1.5接的黄色接的黄色LED。 单片机AT89S52程序相关设计和调 试 38 #include /* 包含对包含对P1等等SFR的定义的定义 */ sbitGreen=P17; sbitRed=P16; s

39、bitYellow=P15; main( ) unsigned char i, sum=0; unsigned char data *p=0 x30; for(i=0; i16; i+) sum+=*p+; if (sum=0) Green=0; Red=1; Yellow=1; else if (sum=0 xff)Green=1; Red=0; Yellow=1; else Green=1; Red=1; Yellow=0; while(1);/*以循环结束以循环结束*/ 编程实现编程实现 单片机AT89S52程序相关设计和调 试 39 5.3 程序调试方法程序调试方法 n5.3.1 单片

40、机开发系统单片机开发系统 n5.3.2 源程序调试源程序调试 n5.3.3 程序下载运行程序下载运行 单片机AT89S52程序相关设计和调 试 40 5.3.1 单片机开发系统单片机开发系统 n单片机开发系统的作用是用来调试目标系统(用户系统)单片机开发系统的作用是用来调试目标系统(用户系统) 的硬件和软件,最终得到硬件和软件都正确的目标系统。的硬件和软件,最终得到硬件和软件都正确的目标系统。 n从硬件上看,单片机开发系统由计算机和仿真器组成,从硬件上看,单片机开发系统由计算机和仿真器组成, 二者之间通过二者之间通过RS-232串口、并口或串口、并口或USB连接,实现双连接,实现双 向通信交互

41、;向通信交互; n从软件上看,单片机开发系统由集成调试环境(从软件上看,单片机开发系统由集成调试环境(IDE) 构成,在该环境下可以进行编辑、汇编、编译、模拟、构成,在该环境下可以进行编辑、汇编、编译、模拟、 仿真、下载等工作;仿真、下载等工作; 单片机AT89S52程序相关设计和调 试 41 单片机开发系统和目标系统连接示意图单片机开发系统和目标系统连接示意图 单片机AT89S52程序相关设计和调 试 42 单片机AT89S52程序相关设计和调 试 43 仿真器与目标系统连接仿真器与目标系统连接 单片机AT89S52程序相关设计和调 试 44 单片机AT89S52程序相关设计和调 试 45

42、单片机AT89S52程序相关设计和调 试 46 使用使用Keil 的开发工具其项目开发周期和任何软件的开发工具其项目开发周期和任何软件 开发项目都大致一样:开发项目都大致一样: 1. 创建创建C 或汇编语言的源程序;或汇编语言的源程序; 2. 编译或汇编源文件;编译或汇编源文件; 3. 纠正源文件中的错误;纠正源文件中的错误; 4. 从编译器和汇编器连接目标文件;从编译器和汇编器连接目标文件; 5. 测试连接的应用程序。测试连接的应用程序。 开发流程开发流程 单片机AT89S52程序相关设计和调 试 47 开发流程示意图开发流程示意图 单片机AT89S52程序相关设计和调 试 48 德国德国K

43、eil 软件公司的软件公司的8051 单片机软件开发工具可用单片机软件开发工具可用 于众多的于众多的8051 派生器件的应用开发,工具清单如下:派生器件的应用开发,工具清单如下: C51 优化优化C 编译器编译器 A51 宏汇编器宏汇编器 8051 工具(连接器工具(连接器/目标文件转换器目标文件转换器/库管理器)库管理器) dScope 源程序级调试器源程序级调试器/模拟器模拟器 Vision 集成开发环境集成开发环境 Keil公司公司8051 单片机软件开发工具单片机软件开发工具 单片机AT89S52程序相关设计和调 试 49 Keil 8051 开发环境开发环境 单片机AT89S52程序

44、相关设计和调 试 50 Vision/51 是一个集成的软件开发平台,包括全功能是一个集成的软件开发平台,包括全功能 编辑器、项目管理器、程序生成工具和环境控制。当用户编辑器、项目管理器、程序生成工具和环境控制。当用户 使用使用Vision/51 时,就不再需要学习任何一个工具的命时,就不再需要学习任何一个工具的命 令语句。令语句。Vision/51 提供以下特性可加速用户的应用开提供以下特性可加速用户的应用开 发:发: 标准标准Windows 用户界面用户界面 所有环境的对话框和开发工具设置所有环境的对话框和开发工具设置 多文件编辑能力多文件编辑能力 用户可自定义密码序列的全功能编辑器用户可

45、自定义密码序列的全功能编辑器 将外部程序加入下拉式菜单的应用管理器将外部程序加入下拉式菜单的应用管理器 创建和保存项目的项目管理器创建和保存项目的项目管理器 从项目中建立目标程序的集成程序生成工具从项目中建立目标程序的集成程序生成工具 在线帮助系统在线帮助系统 Vision/51 单片机AT89S52程序相关设计和调 试 51 dScope-51 是一个源程序级的调试器和模拟器,可调试是一个源程序级的调试器和模拟器,可调试/模模 拟由拟由Keil C51 编译器和编译器和A51 汇编器所创建的程序;汇编器所创建的程序; dScope-51 是一个纯软件产品它可使用户在没有目标硬件的是一个纯软件

46、产品它可使用户在没有目标硬件的 情况下模拟情况下模拟8051 的特性,用户可在硬件准备之前用的特性,用户可在硬件准备之前用dScope-51 调试自己的应用程序;调试自己的应用程序; dScope-51 可模拟许多可模拟许多8051 的外围功能包括内部串行口、的外围功能包括内部串行口、 外部外部I/O 口和定时器口和定时器/计数器;计数器; dScope-51 通过通过Monitor-51目标调试器实现对目标系统(用目标调试器实现对目标系统(用 户应用系统)的在线仿真调试(户应用系统)的在线仿真调试(In-Circuit Emulator);); 调试命令:参看调试命令:参看html在线帮助在

47、线帮助uVision2 Debug Commands, 如如e char d:0 x90=0, d char i:0 x80, d int x:0 xc000等。等。 dScope-51 单片机AT89S52程序相关设计和调 试 52 n C51 编译器和编译器和A51 汇编器汇编器 由由Vision2 IDE 创建的源文件,可以被创建的源文件,可以被 C51 编译器或编译器或 A51 汇编器处理,生成可重定位的汇编器处理,生成可重定位的object 文件。文件。Keil C51 编译器遵照编译器遵照ANSI C 语言标准,支持语言标准,支持C 语言的所有标准特性。语言的所有标准特性。 另外,

48、还增加了几个可以直接支持另外,还增加了几个可以直接支持80C51 结构的特性。结构的特性。Keil A51 宏汇编器支持宏汇编器支持80C51 及其派生系列的所有指令集。及其派生系列的所有指令集。 n LIB51 库管理器库管理器 LIB51库管理器可以从由汇编器和编译器创建的目标文件库管理器可以从由汇编器和编译器创建的目标文件 建立目标库。这些库是按规定格式排列的目标模块,可在以建立目标库。这些库是按规定格式排列的目标模块,可在以 后被链接器所使用。当链接器处理一个库时,仅仅使用了库后被链接器所使用。当链接器处理一个库时,仅仅使用了库 中程序使用了的目标模块而不是全部加以引用。中程序使用了的

49、目标模块而不是全部加以引用。 C51、A51和和 LIB51 单片机AT89S52程序相关设计和调 试 53 n BL51 链接器链接器/定位器定位器 BL51 链接器使用从库中提取出来的目标模块和由编译链接器使用从库中提取出来的目标模块和由编译 器、汇编器生成的目标模块,创建一个绝对地址目标模块。器、汇编器生成的目标模块,创建一个绝对地址目标模块。 绝对地址目标文件或模块包括不可重定位的代码和数据。所绝对地址目标文件或模块包括不可重定位的代码和数据。所 有的代码和数据都被固定在具体的存储器单元中。有的代码和数据都被固定在具体的存储器单元中。 n RTX51 实时操作系统实时操作系统(高级应用

50、,了解)(高级应用,了解) RTX51实时操作系统是针对实时操作系统是针对80C51微控制器系列的一个微控制器系列的一个 多任务内核。多任务内核。RTX51实时内核简化了需要对实时事件进行反实时内核简化了需要对实时事件进行反 应的复杂应用的系统设计、编程和调试。这个内核完全集成应的复杂应用的系统设计、编程和调试。这个内核完全集成 在在C51 编译器中,使用非常简单。任务描述表和操作系统的编译器中,使用非常简单。任务描述表和操作系统的 一致性由一致性由BL51 链接器链接器/定位器自动进行控制。定位器自动进行控制。 BL51和和RTX51 单片机AT89S52程序相关设计和调 试 54 5.3.

51、2 源程序调试源程序调试 n模拟调试(软件模拟)模拟调试(软件模拟) 在纯软件环境下,由在纯软件环境下,由PC机模拟机模拟8051运行,调试用户运行,调试用户 程序。程序。Vision2的调试器的调试器dScope可以配置成软件模拟方可以配置成软件模拟方 式,调试器包括一个高速模拟器,可以模拟整个式,调试器包括一个高速模拟器,可以模拟整个80C51 系统,包括片上外围器件和外部硬件,能进行快速、可系统,包括片上外围器件和外部硬件,能进行快速、可 靠的程序调试。靠的程序调试。 当从器件库选择器件时,这个器件的属当从器件库选择器件时,这个器件的属 性会被自动配置。性会被自动配置。 这种方式快速高效,除了不能直观看到外部引脚控制这种方式快速高效,除了不能直观看到外部引脚控制 结果外,可以实现所有功能模拟,发现软件错误。可以结果外,可以实现所有功能模拟,发现软件错误。可以 在用户系统还没有完成的情况下,提前进行软件设计。在用户系统还没有完成的情况下,提前进行软件设计。 建议所有实验前先预习,用软件模拟排除语法错误、逻建议所有实验前先预习,用软件模拟排除语法错误、逻 辑错误,观察变量结果、存储空间及辑错误,观察变量结果、存储空间及SFR的变化等。的变化等。 单片机AT89S52程序相关设计和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论