单片机实验proteus版(2015) - 图文 下载本文

2.2 流水灯实验

一、实验目的

1.了解单片机I/O口的基本输出功能。 2.掌握用P1口实现简单控制的方法。

3. 掌握用Proteus实现单片机系统仿真的方法。

二、实验预备知识

循环程序是最常见的程序之一。在程序设计时,对需要多次重复执行的某段程序使用循环程序设计,这样不仅可优化程序结构,而且可以简化程序。循环程序的结构一般包括以下几部分。

1. 循环初始化

循环初始化是进入循环处理前必须要有的一个环节,用于完成循环前的准备工作。循环初始化包括给工作寄存器(或其他存储单元)设置计数初值、地址指针、数据块长度等。

2. 循环处理

循环处理是需要多次重复执行的程序段。循环处理是循环程序的核心,用于完成主要的计算和操作任务。

3. 循环控制

循环控制是用条件转移指令控制循环是否继续。每循环一次,根据循环结束条件进行一次判断;当满足条件时,停止循环,继续执行其他程序;否则,再作循环。

4. 循环结束

循环结束用于存放循环程序的执行结果,同时恢复相关工作单元的初值。

循环程序一般有两种编写方法。一种是先循环控制后循环处理(即先判断后处理),其流程如图3-1(a)所示;另一种是先循环处理后循环控制(即先处理后判断),其流程如图3-1(b)所示。

循环程序的循环体内包含有其他循环程序,称为多重循环程序,又称为循环嵌套。 多重循环程序中的各重循环不能有交叉,不能从外循环跳入内循环,只能外循环内嵌套内循环。两重循环程序流程如图3-2所示。

本实验中参考程序1的延时子程序采用两重循环结构,延时0.36秒。若晶振频率为6MHz,则机器周期为2?s,延时程序的延时时间计算方法如下:

[1+(1+(1+2)×249+2)×240+2]×2?s=360006?s=0.360006s

三、实验内容

利用P1口的通用I/O口功能, P1口做输出口,通过程序向P1口传送数据,用八只发光二极管分别显示P1.7~P1.0各管脚的电平状态。编写程序,控制八只发光二极管按一定的规律循环点亮。晶振频率6MHz。

开始 循环初始化1 循环处理1 循环初始化2 循环处理2 开始 循环初始化 循环控制 N 循环处理 循环控制2 N 条件满足? Y 循环控制1 条件满足? Y 循环结束 结束 条件满足? 循环结束 结束 N

(a) (b)

图3-1 循环程序流程图 图3-2 两重循环程序流程图

四、实验参考电路

P1口接发光二极管的阴极,P1口的管脚输出低电平时对应的发光二极管点亮,实验电路图如图3-3所示。

C130pFX1C230pF19U1XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617C310uFR9CRYSTAL10k18XTAL29RSTR1330R2330R3330R4330R5330R6330R7330R8330293031PSENALEEAD1D2D3D4D5D6D7D8LED-RED12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51 图3-3 流水灯实验电路

五、实验参考程序

参考程序1:八只发光二极管同时交替亮灭。

地址 0000H 0003H 0005H 0008H 000AH 000CH 000EH 0010H 0011H 0013H 0015H 地址 0000H 1000H 1002H 1004H 1007H 1008H 100AH 100CH 100EH 1010H 1012H 机器码 75 90 00 11 0C 75 90 FF 11 0C 80 F4 7B F0 7C F9 00 DC FD DB F9 22 机器码 02 10 00 74 7F F5 90 12 10 0A 03 80 F8 78 80 79 00 D9 FE D8 FA 22 源程序 ORG 0000H START: MOV P1,#00H ACALL DELAY MOV P1,#0FFH ACALL DELAY SJMP START DELAY: MOV R3,#240 DEL2: MOV R4,#249 DEL1: NOP DJNZ R4,DEL1 DJNZ R3,DEL2 RET END 源程序 ORG 0000H LJMP MAIN ORG 1000H MAIN: MOV A,#7FH L1: MOV P1,A LCALL DELAY RR A SJMP L1 DELAY: MOV R0,#80H DELAY1: MOV R1,#00H DELAY2: DJNZ R1,DELAY2 DJNZ R0,DELAY1 RET END 注释 ;表示程序从地址0000H存放 ;将P1口8个管脚置0 ;调用延时子程序 ;将P1口8个管脚置1 ;调用延时子程序 ;返回,从START开始重复 ;延时子程序 ;子程序返回 ;程序结束 注释 ;表示程序从地址0000H存放 ;表示程序从地址1000H存放 ;将A的内容通过P1口输出 ;调用延时子程序 ;A右移一位 ;延时子程序 ;子程序返回 ;程序结束 参考程序2:八只发光二极管循环点亮。 六、实验步骤

1. 新建设计文件、设置图纸尺寸、设置网格、保存设计文件。文件名为“lamp”。 2. 选取元器件。从Proteus元器件库中选取元器件:AT89C51(单片机)、CRYSTAL(晶振)、CAP(电容)、CAP-ELEC(电解电容)、RES(电阻)、LED-RED(红色发光二极管)。

3. 放置元器件、编辑元器件、放置终端、连线。按图3-3所示放置元器件并连线。 4. 属性设置。先右击后单击元器件电容C1,在弹出的“Edit Component”对话框中将电容量改为30pF, 单击“OK”完成元器件电容C1属性编辑。同样方法编辑其他元器件属性。

5. 电气规则检测。单击“工具”→“电气规则检查”,弹出检查结果窗口,完成电气检测。若检测出错,根据提示修改电路图并保存,直至检测成功。电气规则检查窗口如图3-4所示。

图3-4 电气规则检查窗口 图3-5 添加项目对话框

6. 添加源程序、编辑源程序、编译源程序。源文件名为“lamp.asm”。 7. 加载目标代码文件。 “Clock Frequency”栏中的频率要设为6MHz。

8. 仿真。单击仿真工具栏“运行”按钮,单片机全速运行程序。单击“调试”→“Watch Windows”,单击“调试”→“8051 CPU Source Code”,分别打开观察窗口和源代码调试窗口。

在观察窗口右击弹出快捷菜单,单击“添加项目(By地址)”弹出“Add Memory Item”对话框,在“Name”栏输入R3,“Address”栏输入0x03,单击“Add”将工作寄存器R3添加到在观察窗口中;同样将R4也添加到在观察窗口中。添加项目对话框如图3-5所示。