1、单片机实验指导书 - 1 - 单片微型计算机原理 实验指导书 南京邮电大学自动化学院 电气工程系 张腾飞 2011 年 10 月 若发现有错误请联系: 单片机实验指导书 Keil C 软件的使用 Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和 C 语言的程序设计,界面友好,易学易用。 下面介绍 Keil C51 软件的使用方法 进入 Keil C51 后,屏幕如下图所示。几秒钟后出现编辑界 启动 Keil C51 时的屏幕 进入 Keil C51 后的编辑界面 - 2 - 单片机实验指导书 简单程序的调试 学习程序设计语言、学习某
2、种程序软件,最好的方法是直接操作实践。下面通过简单的编程、调试,引导大家学习 Keil C51 软件的基本使用方法和基本的调试技巧。 1)建立一个新工程 单击 Project 菜单,在弹出的下拉菜单中选中 New Project 选项 2)然后选择你要保存的路径,输入工程文件的名字,比如保存到 C51 目录里,工程文件的名字为 C51,如下图所示,然后点击保存. 3)这时会弹出一个对话框,要求你选择单片机的型号,可以根据你使用的单片机来选择,keil c51 几乎支持所有的 51 核的单片机, 这里还是以用的比较多的 Atmel 的 89C51 来说明,如下图所示,选择 89C51 之后,右边
3、栏是对这个单片机的基本的说明,然后点击确定. - 3 - 单片机实验指导书 4)完成上一步骤后,屏幕如下图所示 到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。 - 4 - 单片机实验指导书 5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项 新建文件后屏幕如下图所示 此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但这里建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。 注意,如果用语言编写程序,则扩展名为(.
4、c);如果用汇编语言编写程序,则扩展名必须为(.asm)。然后,单击“保存”按钮。 - 5 - 单片机实验指导书 6)回到编辑界面后,单击“Target 1”前面的“”号,然后在“Source Group 1”上单击右键,弹出如下菜单 然后单击“Add File to Group Source Group 1” 屏幕如下图所示 - 6 - 单片机实验指导书 选中 Test.c,然后单击“Add”屏幕如下图所示 注意到“Source Group 1”文件夹中多了一个子项“Text1.c”了吗?子项的多少与所增加的源程序的多少相同 7)现在,请输入如下的 C 语言源程序: #include /包含
5、文件 #include void main(void) /主函数 SCON=0x52; TMOD=0x20; TH1=0xf3; TR1=1; /此行及以上 3 行为 PRINTF 函数所必须 printf(“Hello I am KEIL. n”); /打印程序执行的信息 printf(“I will be your friend.n”); while(1); - 7 - 单片机实验指导书 在输入上述程序时, Keil c51 会自动识别关键字, 并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。程序输入完毕后,如下图所示 8)在上图中,单击“Project”菜单,再
6、在下拉菜单中单击“B uilt Target”选项(或者使用快捷键 F7),编译成功后,再单击“Project ”菜单,在下拉菜单中单击“Start/Stop Debug Session”(或者使用快捷键 Ctrl+F5),屏幕如下所示 - 8 - 单片机实验指导书 9)调试程序:在上图中,单击“Debug”菜单,在下拉菜单中单击“Go”选项,(或者使用快捷键 F5),然后再单击“Debug”菜单,在下拉菜单中单击“Stop Running”选项(或者使用快捷键 Esc);再单击“View”菜单,再在下拉菜单中单击“S erial Windows #1”选项,就可以看到程序运行后的结果,其结果
7、如下图所示 至此,我们在 Keil C51 上做了一个完整工程的全过程。但这只是纯软件的开发过程,如何使用程序下载器看一看程序运行的结果呢? 10)单击“Project”菜单,再在下拉菜单中单击“ ” 在下图中,单击“Output”中单击“Create HEX File”选项,使程序编译后产生 HEX 代码,供下载器软件使用。把程序下载到单片机中。 - 9 - 单片机实验指导书 单片机下载器软件使用 单片机下载器软件有不同的版本和实用的芯片,但基本功能大同小异, 这里以 AT89S51单片机下载器软件为例进行说明。 AT89S51 单片机下载器是专门用于下载程序到单片机系统中,该软件使用方便。
8、启动软件之后进入下面的界面(如图 3.1 所示): 图3.1 在上图中: 1 区域 1 为程序代码显示区; 2 区域 2 为下载芯片选择区,该软件支持多种芯片的程序在线下载,对系统板上的单片机 AT89S51 是其中一种,软件默认情况下为 AT89S51 单片机。 3 区域 3 为在线下载的操作区,它可以提供如下的操作 1) 初始化:启动 AT89S51 单片机进入 ISP 下载状态,点击一下,若启动成功,则操作区后的操作按钮就会变成如图 3.2 所示的状态。否则,不成功会有“初始化失败”的红色字样提示。 图3.2 2) 特征字:点击一下,会读出单片机的芯片的特征字,对于 AT89S51 单片
9、机的特征字为:1E 51 06,出现的提示框如图 3.3 所示 - 10 - 单片机实验指导书 图3.3 3) 查空:是检查单片机是否已经被擦除干净。 4) 擦除:是把单片机的内容擦除干净,即单片机内部 ROM 的内容全为 FFH。 5) 编程:把代码区中的程序代码下载到单片机的内部 ROM 中。注意在编程之前,要对单片机芯片进行擦除操作。 6) 检验:是经过编程之后,对下载到单片机内部 ROM 中的内容与代码区的内容相比较,若程序下载过程中完全正确,则提示校验正确,否则提示出现错误。那就得需要重新下载程序到 ROM 中。 7) 自动:提供了从内部 ROM 从擦除到编程,最后到校验这三个过程。
10、 8) 读取:从单片机内部 ROM 中读取内容到代码显示区中。 4 区域 4 中,有“装载”、“设置”、“保存”和“退出”四个功能。 1) 装载:是把经过 KEIL C 软件转化成 HEX 格式的文件装入区域 1 中,当单击“装载”按钮时,出现如图 3.4 所示的对话框。 图3.4 在这里选择以 HEX 为后缀的文件,选中它并点击“打开”按钮,即把程序代码装入到代码显示区 1 中。装载之后如图 3.5 所示。我们就可以把代码显示区域 1 中的代码通过 ISP下载线下载到 AT89S51 单片机中。 - 11 - 单片机实验指导书 - 12 - 图3.5 2) 设置:对该软件一些操作方式进行设置
11、,点击按钮之后,出现图 3.6 所示的界面: 图3.6 在这里可以进行通信端口的设置,共设置的 4 个串行通信端口,COM1、COM2、COM3、COM4,根据计算机的硬件特点来决定,默认情况下为 COM1,即串行通信口 1。 另外,还可以对芯片的加密位进行设置,共有 4 种选择: “不加密”对芯片的程序不进行加密保护 “锁定位 1”对芯片的程序进行一级加密保护 “锁定位 2”对芯片的程序进行二级加密保护 “锁定位 1,2”对芯片的程序进行三级加密保护 3) 保存:是把从单片机的芯片 ROM 中的程序读取出来到代码显示区域 1 中,点击“保存”按钮,即可保存为 HEX 格式的文件。 4) 退出
12、:退出该软件系统。 在进行程序调试的时候,我们一般通过 KEIL C 软件把编译好的程序转化成 HEX 格式文件,通过上面的方法,装载程序之后,点击“自动”按钮,程序就下载到单片机内部ROM 芯片中,最后点击“运行”,即可以看到程序的结果。注意,每次重新更新程序的时候,要点击“初始化”按钮,才可以相应的操作。 单片机实验指导书 - 13 - 实验步骤及相关说明 1. 新的工程:ProjectNew Project 创建新的工程,给文件赋文件名 2. FileNew 编辑新的文件,编辑好了,保存,以.ASM 为后缀名 3. 工程窗口,Target 1Source group 1 鼠标右键,第三大
13、栏第一项:Add files to group Source Group 1,将刚才编辑的文件或者事先编辑好的文件加入该源程序组,注意选择文件类型为 Assembly language file 4. ProjectBuild target 汇编,创建目标文件。如果报错,修改错误。 5. 工程窗口,Target 1 鼠标右键,第一大栏第二项:options for Target 1 , Debug 页,选择 Use Simulator, 确定 6. 调试:Debug 第一项 Start/Stop Debug Session 开始仿真 7. 进入仿真: ViewMemory Window, 右下
14、角会出现存储器窗口,在 Address 窗口中输入:d:00h 显示内部数据存储器从 00h 开始的单元; x:1000h 显示外部数据存储器从1000h 开始的单元; c:0000H 显示程序存储器内容 8. 运行程序: Debug 菜单栏中: go 全速运行程序,需要选择 debugstop running 才能将程序退出运行状态; step 单步跟踪,会跟踪进子程序,依次执行子程序中一条一条指令; step over 单步运行,一次执行一条指令,碰到子程序调用,执行一次会将子程序运行完; stop out of current function运行出当前子程序; Run to curso
15、r line 运行到当前光标所在行, pc 指向光标所在行,程序执行完该行上一条指令; stop running退出运行 9. 仿真时,左上为寄存器窗口,可以在此窗口直接修改寄存器的值;左下为命令窗口,可以在此以表达式方式给寄存器赋值;右上为程序窗口,显示根据机器码反汇编出来的程序指令 10. 调试过程中发现错误,需要退出仿真状态,进入编辑状态修改完再重新汇编链接调试。 单片机实验指导书 - 14 - 实验一、MCS51 单片机基本开发环境 1 实验目的: 1) 熟悉软件的集成开发环境 2) 掌握单片机软件设计流程 3) 掌握单片机存贮器结构及各窗口之间的联系 2 实验内容: 1) 用三种方法
16、实现将累加器 A 内容改为 20H 2) 将 58H 位单元置为 1,观察内部 RAM 中 2BH 内容的变化 3) 如果当前状态为有进位、工作寄存器使用区 2,请用 3 种方法设置这种状态 4) 编一个小程序将内部 RAM 中的 20H 单元的内容送到 21H 单元并调试 5) 用程序将堆栈指针指向 60H,然后在堆栈中依次压入 01,02,03,04, 05 五个数,观察哪些单元内容发生了变化,各变为多少?从哪些窗口可以发现这些变化?顺序将堆栈中的五个数放入 30H34H五个单元中,编程实现之。 6) 将外部数据存贮器 1000H100FH 16 个单元中存放 00H0FH 7) 若要求程
17、序从 0010H 单元开始运行,可用两种方法实现? 3 选做实验内容:数据传送 目的: 1) 掌握 8051 单片机内部数据存贮器、外部数据存贮器的数据传送特点和应用 2) 掌握 MOV,MOVX 和 MOVC 类指令的用法及区别 内容: 1) 将片内 RAM 数据区 20H 为首地址的十六个字节传送到 30H 为首地址的数据区,即:20H 2FH 送 30H3FH 2) 将外部数据存储器 2000H200FH单元的十六个数传送至内部数据存储器的 30H3FH 3) 将外部数据存贮器中首地址为 1000H 的连续存放的八个数与首地址为 1010H 的间隔存放的八个数进行交换。 1000 100
18、1 1002 1003 1004 1005 1006 1007 1010 1012 1014 1016 1018 101A 101C 101E 4) 建立一个数字 09 的 ASCII 码表,表格放在程序存储器区首地址为1000H 的十个单元内,编程根据 R0 中的内容来查表,所得结果存放在寄存器 B 中,注意 R0 中的内容不在 09 范围时的处理。 单片机实验指导书 - 15 - 实验二、加、减法实验 1 实验目的 1) 正确使用单片机的加减运算指令 2) 掌握不同指令对于程序状态字的影响及程序状态字的意义、用处 3) 掌握 ADD,ADDC , SUBB 和 DA A 等指令的用法 4)
19、 学习模块化程序设计方法 2 实验内容 1) 编写 3 字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性。需考虑有进位和无进位情况。 程序入口为: 加数:22H ,21H ,20H 三字节,22H 为最高位 被加数:32H ,31H ,30H 三字节,32H 为最高位 程序出口为: 23H ,22H ,21H ,20H 四字节,23H 为最高位 例如:地址:23 22 21 20 32 31 30 执行前数据: 01 23 45 FF 01 01 执行后数据:01 00 24 46 2) 编写三字节二进制减法子程序 入口:被减数: 52H ,51H ,50H, 50
20、H 为最低位 减数: 42H ,41H ,40H, 40H 为最低位 出口:差:外部数据存贮器 2003H2000H (2000H 为最低位) 用主程序调用多组数据来调试,需考虑无借位和有借位两种情况。 例如: 执行前:地址: 52 51 50 42 41 40 数据: 90 80 70 10 10 10 执行后:地址: 2003 2002 2001 2000 数据: 00 80 70 60 3) 编写 10 位十进制加法子程序(十进制数采用压缩 BCD 码存放) 入口: 加数:24H 20H ,低地址放低字节 被加数:29H 25H ,低地址放低字节 出口 和:4005H 4000H ,低地
21、址放低字节 要求调用多组数据调试,注意观察 PSW 的变化,理解 DA A 指令的含义。例如: 执行前地址: 24 23 22 21 20 29 28 27 26 25 数据: 12 34 56 78 90 88 99 33 12 74 执行后地址:4005 4004 4003 4002 4001 4000 数据: 01 01 33 89 91 64 单片机实验指导书 - 16 - 实验三、代码转换与逻辑运算实验 一、代码转换 1 实验目的: 1) 掌握代码转换的方法 2) 进一步熟悉 51 单片机指令系统 1 实验内容: 1) 将内部 RAM 30H37H 单元中的 16 个拼装 4 位二进
22、制数 0F ,转换成 ASC码,并存入内部数据 RAM 以 40H 为首地址的区域中。 转换前:地址:30 31 32 33 34 35 36 37 数据:01 23 45 67 89 AB CD EF 转换后: 地址:40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F ASC码:30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 2) 将 R0 中的 8 位二进制数转换成 3 位 BCD 码数,结果存入外部 RAM的 7002H7000H (从高位到低位)单元中。 例如:地址:R0 执行后:7002 70
23、01 7000 数据:80H 01 02 08 二、逻辑运算和位操作 2 实验目的: 1) 掌握位操作指令 2) 掌握字节逻辑运算和位逻辑运算的区别 3 实验内容 1) 有布尔表达式为 Y=A(B+/C)+D(E+/F) z 设 A 为累加器 ACC, B 为寄存器 B, C 为 R0, D 为 R1, E 为 R2,F 为 R3, Y 为 R7。编程实现并调试。 z 设 A 为 P1.0, B 为 P1.4, C 为 TF1, D、 E、 F 分别为 20H.0、 20H.3和 20H.5,Y 为 P1.5。编程实现并调试。 2) 读程序:先自己人工读程序,看看程序执行完成后,各单元的变化,再通过编程调试来验证。 单片机实验指导书 - 17 - MOV R0,20H MOV A, #21H MOV R0,A POP 30H PUSH 22H CPL C MOV 20H,C POP PSW 寄存器 程序执行前 程序执行后SP 21H A 1FH 1FH 22H 20H 1FH 21H 20H 22H 24H 23H 24H 24H 22H 30H 24H PSW 01H