1、1实验一 KEIL 51 软件实验 实验目的:1、掌握 KEIL 集成开发环境的使用2、掌握算术运算程序实验设备:计算机、KEIL51 软件实验内容:编程实现把片人 RAM30H 单元和 40H 单元两个 16 字节数相加,结果放于 30H 单元开始的位置处。在KEIL51 编译、连接、仿真调试。实验步骤:一、运行 KEIL51 软件,出现图 1 所示 KEIL 51 主界面。图 1 KEIL 51 主界面首先用 Project 菜单下的 New Project 命令建立项目文件, 过程如下。(1) 选择 Project 菜单下的 New Project 命令,弹出如图 2 所示的 Creat
2、e new Project 对话框。图 2 Create New Project 对话框(2) 在 Create New Project 对话框中选择新建项目文件的位置(最好一个项目建立一个文件夹如E:project) ,输入新建项目文件的名称,例如,项目文件名为 example,单击【保存】按钮将弹出如图 3 所示的 Select Device for Target Target 1对话框,用户可以根据使用情况选择单片机型号。 Keil 2uVision2 IDE 几乎支持所有的 51 核心的单片机,并以列表的形式给出。选中芯片后,在右边的描述框中将同时显示选中的芯片的相关信息以供用户参考。
3、图 3 Select Device for Target Target 1对话框(3) 这里选择 atmel 公司的 AT89c51。单击【确定】按钮,这时弹出如图 4 所示的 Copy Standard 8051 Startup Code to Project Folder and Add File to Project 确认框, C 语言开发选择【是】 ,汇编语言开发选择【否】 。单击后,项目文件就创建好了。项目文件创建后,在主界面的左侧的项目窗口可以看到项目文件的内容。这时只有一个框架,紧接着需向项目文件中添加程序文件内容。图 4 Copy Standard 8051 Startup C
4、ode to Project Folder and Add File to Project 确认框二、给项目添加程序文件当项目文件建立好后,就可以给项目文件加入程序文件了,Keil uVision2 支持 C 语言程序,也支持汇编语言程序。这些程序文件可以是已经建立好了的程序文件,也可以是新建的程序文件,这里我们新建的汇编程序文件后再添加。(1) 选择文件菜单上的 new 命令,出现新建文本窗口,如图 5 所示。3图 5 新建文本窗口在文本编辑窗口中输入加法程序。存盘,假设文件名为 add16.asm。注意汇编程序文件扩展名为.asm,这时默认路径为工程文件夹。参考程序如下:ORG 0000H
5、LJMP MAINORG 1000HMAIN:MOV R0,#30HMOV R1,#40HMOV R2,#16CLR CLOOP: MOV A,R0ADDC A, R1MOV R0,AINC R0INC R1DJNZ R2,LOOPSJMP $END(2) 添加文件到项目中。在项目管理器窗口中,展开 Target1 项,可以看到 Source Group1 子项。右击 Source Group1,在出现菜单中选择 Add Files to Group Source Group1命令。出现添加文件的窗口,加程序add16.asm 如到项目中。如图 6 所示。注意文件类型要选择为*.a*。4图 5
6、 添加程序文件到项目三、编译、连接项目,形成目标文件当把程序文件添加到项目文件中,并且程序文件已经建立好存盘后,就可以进行编译、连接,形成 HEX 目标文件(只在 keil 51 中软件仿真可以不形成目标文件)(1)选择 Project 菜单下的 Built Target 命令(或快捷键 F7) 编译、连接当前项目,编译、连接时,如果程序有错,则编译不成功,并在下面的信息窗口给出相应的出错提示信息,以便用户进行修改,修改后再编译、连接,这个过程可能会重复多次。如果没有错误,则编译、连接成功,并且在信息窗口给出提示信息。如图 6 所示。图 6 编译、连接后的显示图(2)如果要做硬件下载可硬件仿真
7、,则要形成 HEX 目标文件,须先对输出选项进行相应的设置,设置后再进行编译连接。方法如下:右击项目管理器窗口的 Target1 项,在右键菜单中选择下面的 Options for Target Target 1命令,在 Options for Target Target 1对话框选择 Output 选项卡,在该选项卡选中 Create HEX File 选项,选择生成 HEX 文件。如图 7 所示。5图 7 Options for Target Target 1 对话框四、运行调试观察结果当项目编译、连接成功后,就可以运行它来观察结果,运行调试过程如下。先用 Debug 菜单下的 Start
8、/Stop Debug Session 命令(快捷键 Ctrl+F5)启动调试过程,启动后可用 Debug 菜单下Go 连续运行命令、Step 单步运行、Stop running 停止运行命令等运行程序观察结果。本实验中进入启动调试后,先用 View 菜单下的 memory window 打开存储器窗口,在 address 框输入 d:0x30,在存储器窗口中显示片内数据存储器 30h 单元开始的数据。如图 8 所示。图 8 启动调试过程结果图在片内数据存储器窗口中右击 30h 单元,在右键菜单中选择 modify memory at D:0x30,从 30h 单元开始修改数据,在弹出的窗口中
9、输入 30h3fh 单元的数据,如图 9 和图 10 所示。Memory window窗口6图 9 修改片内数据存储器的内容图 10 输入 30h3fh 单元的数据用相同的方法修改 40h4fh 单元的数据。修改后选择 run 命令运行,运行后在存储器窗口可看到该程序运行的结果。在存储器窗口的 address 框中还可输入 c:0x 地址显示程序存储器,x:0x 地址显示片外数据存储器。另外,可用 View 菜单下的 symbols window 命令查看特殊功能寄存器,用 peripherals 菜单下面的命令来查看并口、串口、定时/计数器和中断的相关内容。实验结论与问题:简要介绍 KEIL
10、 51 使用过程。7实验二 内存块移动实验目的:1、掌握 KEIL 集成开发环境的使用2、掌握数据块移动程序实验设备:计算机、KEIL51 软件 实验内容:编程实现将内存数据块移动,在 KEIL51 编译、连接、仿真调试汇编语言源程序:ORG 00HSTART: MOV R0, #30HMOV R1, #00H ;设置源地址MOV R2, #40H MOV R3, #00H ;设置目标地址MOV R7, #0 ;设置计数值LOOP: MOV DPH, R0MOV DPL, R1 ;将源地址(3000H)赋DPTRMOVX A, DPTR ;取源地址中的数据MOV DPH, R2MOV DPL,
11、 R3 ;将目标地址(4000H)赋DPTRMOVX DPTR, A ;将源地址中的数据送到目标地址INC R1 ;源地址加1INC R3 ;目标地址加1DJNZ R7, LOOPLJMP $END输入源程序,编译无误后,用单步执行的方法,观察各个相应存储单元和寄存器中内容的变化。实验三 乘法运算实验实验目的:1、掌握 KEIL 集成开发环境的使用2、掌握多字节乘法运算程序实验设备:计算机、KEIL51 软件 实验内容:编程实现把 R2R1(R2 为高字节, R1 为低字节)和 R0 中的无符号数相乘,结果放于 R7R6R5(R7 为最高位) 。在 KEIL51 编译、连接、仿真调试8实验步骤
12、:ORG 0000HLJMP MAINORG 0030HMAIN: MOV R1,#0FFHMOV R2,#0FFHMOV R0,#11HMOV A,R1MOV B,R0MUL ABMOV R6,BMOV R5,ACLR CMOV A,R2MOV B,R0MUL ABMOV R7,BADDC A,R6MOV R6,AMOV A,R7ADDC A,#00HMOV R7,ASJMP $END实验结论及问题:给 R2R1 和 R0 赋值方法有哪些 ?MOV Rn,AMOV Rn,01H 立即数寻址MOV Rn,#01H 直接赋值。三种情况实验四 并行接口实验实验目的:1、掌握 KEIL 集成开发环境
13、的使用2、掌握 Proteus 仿真软件的使用3、学会使用 Proteus 和 KEIL 软件进行系统仿真调试4、掌握单片机并行接口的结构与使用实验设备:计算机、KEIL51 软件、PROTEUS 软件实验内容:在 80C51 单片机的 P2 口连接 8 个发光二极管指示灯,编程实现流水灯的控制,轮流点亮指示灯。在 KEIL 51中编程序,形成 HEX 文件,在 PROTEUS 中设计硬件,下载程序,运行看结果。9实验步骤:一、打开 PROTEUS 的 ISIS 软件,如图 10 所示。新建电路图文件,设文件保存到 e:projectio 下面,文件基本名为 io,扩展名默认。图 10 ISI
14、S 窗口图二、在 component mode 模式下单击选择元件按钮 P,打开元件选择对话框,如图 11 所示。图 11 元件选择窗口选择元件10在元件选择对话框的 keywords 窗口中输入元件关键字可换搜索元件,找到元件后,双击元件则可选中元件,添加元件到图 10 的 device 列表栏。在这里依次添加元件单片机 80c51、电阻 RES、电容 CAP、按键 BUTTON、晶振 CRYSTAL、发光二极管 LED-RED。如图 12 所示。图 12 添加元件的 device 列表栏三、选择 devices 元件列表中的元件放到工作窗口,注意放置在工作窗口合适的位置,在元件放置时可对元
15、件进行移动、旋转等操作。电源与地在工具按钮的 Terminals mode 中选取。如图 13 所示。图 13 放置元件图四、连接导线,如图 14 所示。连接后存盘。11图 14 连接元件图五、在 keil 51 中设计软件程序,形成 HEX 文件。保存软件项目到电路文件相同的文件夹 e:projectio 。设计软件程序如内容一,过程略。参考程序如下:ORG 0000HLJMP MAINORG 0100HMAIN:MOV A,#01HLOOP:MOV P2,ALCALL DELAYRL ASJMP LOOPSJMP $DELAY:MOV R2,#10HDELAY1:MOV R3,#0FFHD
16、JNZ R3,$DJNZ R2,DELAY1RETEND六、在 PROTEUS 电路图中,单击单片机 80C51 芯片,选中 ,再次单击打开单片机 80C51 的属性对话框,在属性对话框中的 program file 框中选择下载到 80C51 芯片中的程序。这里是同一个文件夹下面的io.hex 文件。如图 14 所示。12图 14 下载程序到单片机七、单击仿真运行按钮 play,运行程序。可通过 LED 二极管看到相应的结果。如图 15 所示。图 15 仿真结果图实验结论与问题:如果要改变 LED 显示的循序,该怎么办?13实验五 多路开关指示实验目的:1、掌握 KEIL 集成开发环境的使用
17、2、掌握 Proteus 仿真软件的使用3、学会使用 Proteus 和 KEIL 软件进行系统仿真调试4、掌握单片机并行接口的结构与使用实验设备:计算机、KEIL51 软件、PROTEUS 软件实验内容:AT89C51 单片机的 P1.0P1.3 接 4 个二极管,P1.4P1.7 接 4 个开关,编程读取开关状态,使得对应的发光二极管反映开关状态(开关闭合,对应的灯亮) 。Porteus 模型为 Multi Switch.DSN 如下图所示。程序设计:开关状态检测,对于单片机来说,是检测其I/O口的输入。可以轮流检测每个开关状态。根据每个开关的状态让相应的发光二极管指示。汇编语言源程序:O
18、RG 00HSTART: MOV A,P1 ;读取P1口数据ANL A,#0F0H ;交换A中高四位与低四位的位置OR1 A,#0F0H ;与0F0H相或MOV P1,A ;将开关状态送LED显示SJMP START ;转移到STARTEND14实验六 外部中断实验目的:1、掌握 KEIL 集成开发环境的使用2、掌握 Proteus 仿真软件的使用3、学会使用 Proteus 和 KEIL 软件进行系统仿真调试4、掌握单片机的功能模块中断的设置和应用中断的结构与使用实验设备:计算机、KEIL51 软件、PROTEUS 软件实验内容:AT89C51 单片机的 P3.2/INT0 引脚接一个开关,
19、模拟外部中断源,编写程序,当外部中断发生时,对其作出响应(以发光二极管的亮/ 灭来指示) 。程序设计:外部中断的初始化设置共有三项内容:中断总允许即 EA=“1”,外部中断允许即 EXi=“1”,中断方式设置。中断方式设置一般有两种方式,即电平方式和脉冲方式,这里采用脉冲方式,当前一次为高电平后一次为低电平时为有效中断请求。因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚 INT0(P3.2)和INT1(P3.3)引入。Proteus 模型为 External Interrupt.DSN。汇编语言源程序:LED BIT P1.0LEDBUF EQU 30HORG 00HLJMP
20、STARTORG 000BH ;中断入口地址LJMP INTERRUPT ;中断处理指令START: CLR LEDBUFCLR LED15MOV TCON,#01H ;外部中断0下降沿触发MOV IE,#81H ;打开外部中断允许位(EX0)及总中断允许位(EA)LJMP $ ;等待中断INTERRUPT:PUSH PSW ;保护现场CPL LEDBUF ;取反LEDMOV C,LEDBUFMOV LED,CPOP PSW ;恢复现场RETIEND实验七 单片机定时/计数器实验实验目的:1、了解定时/计数器的结构2、熟练掌握定时/计数器的使用方法3、掌握利用定时/计数器产生方波的方法4、掌握
21、中断的使用实验设备:计算机、KEIL51 软件、PROTEUS 软件1.定时器实验内容:T89C51 单片机的实验电路如图所示, P1.0 口接一个发光二极管,编写程序,控制发光二极管闪烁,时间间隔 1s,要求采用 AT89C51 单片机的内部定时器计时,用中断方式,采用工作方式 2。Porteus 模型为 External Interrupt.DSN 如下图所示。程序设计要求:设置内部计数器用作定时器, 是对机器周期数计数。每个机器周期的长度是 12 个振荡器振荡周期。单片16机晶振用 12MHz,工作方式 2,即 8 位自动重装方式定时器,定时 100 微秒中断一次,通过计算,得到定时常数
22、=156,然后对 100 微秒中断次数计数 10000 次,就是 1s。汇编语言源程序:ORG 00HTICK EQU 10000 ;10000100us=1sT100us EQU 256-100 ;100us时间常数( 12M)C100us EQU 30H ;100us计数单元LEDBUF EQU 40H LED BIT P1.0ORG START ;跳至主程序ORG 000BH ;中断服务子程序起始地址T0INT: PUSH PSW ;状态保护MOV A,C100us+1JNZ GOONDEC C100us ;秒计数值减1GOON: DEC C100us+1MOV A,C100usORL
23、A,C100us+1JNZ EXIT ;100us计数器不为0,返回MOV C100us,#HIGH(TICK) ;100us计数器为0,重置计数器MOV C100us+1,#LOW(TICK)CPL LEDBUF ;取反LEDEXIT: POP PSWRETI ;中断返回START: MOV TMOD, #02H ;方式2,定时器MOV THO, #T100us ;置定时器初值MOV TLO,#T100us MOV IE,#10000010B ;开中断:EI=1,ITO=1SETB TRO ;开始定时CLR LEDBUFCLR LEDMOV C100us,#HIGH(TICK) ;设置100
24、00次计数值MOV C100us+1,#LOW(TICK)LOOP: MOV C,LEDBUFMOV LED,CLJMP LOOPEND2.计数器实验内容从 AT89C51 单片机的 P3.4 口输入外部时钟,编写程序,对外部脉冲个数进行计数,并将计数值用 8 位发光二极管以二进制数显示出来。程序设计要求:AT89C51 内部定时/计数器用作计数器,外部时间计数脉冲由 P3.4 引入定时器 T0,单片机在每个机器周期采样一次 T0 引脚的输入波形,如果有跳变,则计数值自动加 1。Proteus 模型为 Counter Design.DSN,如下图所示。17汇编语言源程序:ORG 0000HMOV TMOD,#00000101B ;置T0计数器方式1MOV TH0,#0 ;置T0初值MOV TL0,#0SETB TR0 ;T0运行LOOP: MOV P1,TL0 ;记录P1口脉冲个数LJMP LOOP ;返回END