实验 报 告
实验名称
使用集成开发环境Keil进行程序开发
指导教师
倪晓军
实验类型
课内实验
实验学时
2
实验时间
2017.10.19
一、 实验目的和要求
1. 了解汇编语言程序的设计方法,熟悉单片机汇编语言程序设计过程;
2. 了解C语言程序的设计方法,熟悉单片机C语言程序设计过程;
3. 掌握使用集成开发环境Keil进行单片机程序开发的方法;
4. 掌握使用集成开发环境Keil进行单片机程序跟踪调试的方法。
二、 实验要求
1. 使用汇编语言编写程序,完成1+2+3+…+100的计算;
2. 使用C51编写程序,完成1+2+3+…+100的计算,并通过串口输出计算结果;
三、 实验环境(实验设备)
PC机,Keil C51集成开发环境
四、 实验原理及内容
1.编译,链接,调试汇编代码
汇编代码清单:
Sum 1 to 100
HB EQU 30H
LB EQU 31H
LP EQU 32H
ORG 0
JMP main
ORG 30H
main: MOV A,#60H
MOV SP,A
CLR A
MOV HB,A
INC A
MOV LB,A
MOV LP,#2
loop: MOV R7,HB
MOV R6,LB
MOV R5,#0
MOV R4,LP
CALL add16
MOV HB,R7
MOV LB,R6
INC LP
MOV R0,LP
CJNE R0,#101,loop
JMP $
ORG 0060H
add16:
CLR C
MOV A,R4
ADD A,R6
MOV R6,A
MOV A,R5
ADDC A,R7
MOV R7,A
RET
END main
① 建立目标,选择Atmel>AT89C52设备
② 设置参数
I.设置芯片频率为11.0592 MHz并勾选Use On-chip Rom(0x0-0x1FFF)
II.勾选Output中的 Create HEX file
③ .添加源程序到 Source Group
④ .编译链接查看结果
⑤ .调试
⑥ .查看内存
2.编译,链接,调试C语言代码:
C语言代码清单:
#include
#include
#define OSC11059200
#define BAUD9600
int main(void)
{
int i, result = 0;
SCON = 0x50;
TMOD = 0x20;
TH1 = TL1 = 256 - (OSC / 12 / 16 / BAUD);
TR1 = 1;
TI = 1;
for (i = 1; i <= 100; i++)
{
result += i;
}
printf("%d
", result);
while (1);
}
① 建立目标,选择Atmel>AT89S51设备
② 设置参数
I.设置芯片频率为11.0592MHz,并勾选Use On-chip ROM(0x0-0xFFF)
II.勾选Output中的Create HEX file
③ 添加STARTUP.A51和C语言代码程序
④ 编译运行结果
⑤ 调试并查看变量变化情况
五、 实验小结(包括问题和解决方法、心得体会、意见与建议等)
这次实验学习使用了Keli µVision软件开发单片机程序,由于之前没有使用过,所有不大熟悉,也出了很多的问题。调试C语言程序的时候,发现result的值一直是把变量i的值附上而没有累加。在同学的帮助下,发现是OSC定义没有和之前设置的芯片频率一致,导致不同步,改成了芯片频率之后终于看到了预期的结果。
第一次尝试单步调试,能观察到内存中每一个单元的变化,感到单片机系统复杂中的严谨。在汇编语言调试和C语言调试的对比中,体会到汇编的繁琐和高级编程语言对编程效率的提高。