南京邮电大学单片机实验一:使用集成开发环境Keil进行程序开发
本次实验以Keil C51集成开发环境为基础,旨在掌握单片机汇编语言和C语言程序设计方法及开发流程。通过完成两个任务——使用汇编语言计算1+2+…+100的值并完成程序调试;使用C51编写程序完成相同功能并通过串口输出结果——熟悉了Keil环境的配置与应用。在编程过程中遇到了一些问题(如汇编代码运行不正确),但通过查阅资料和同学帮助解决了这些问题,并掌握了单片机系统调试技巧及高效编程的重要性。
实验 报 告
| 实验名称 | 使用集成开发环境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<reg51.h>
#include<stdio.h>
#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\n", 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变量一直被赋值而不累加。在此期间,在同学的帮助下(即通过同学指导或寻求帮助),我们发现了问题根源:原来OSC定义与芯片预设频率不一致导致时序失配。随后并及时地完成了相应的设置,并最终观察到了预期的结果数据。
通过初次单步调试操作,得以窥探内存中每个单元的具体变化情况,从中体会到了单片机系统运行过程中的严谨性所在.在对比使用汇编语言与C语言进行程序调试的过程中,认识到汇编语言操作起来相对繁琐,而感受到高级编程语言带来的效率提升.
