单片机原理及接口技术实验指导书
主编 段文燕 廉志凯
秦 皇 岛 职 业 技 术 学 院
机 电 工 程 系
1
前 言
本书适用于高职、高专电类及相关专业的与《单片机原理及接口技术》相配套的实验指导书,该指导书是编者根据高职、高专的实验教学特点,以及在多年实践教学经验的基础上总结编写的。
全书共有五个实验课题,需要总课时数10个学时。按照理论教学顺序编排。
在编写该书的过程中,得到了学院各级领导和机电系许多专业教师的大力支持。此次再编由段文燕老师和廉志凯老师共同完成,我系许多老师对该指导书的内容和编排上提出很多宝贵的意见,在此表示由衷的感谢。
因编者水平有限,错误或不当之处在所难免,殷切期望读者批评指正。
编者
2007年2月
2
目 录
绪论 ···················································································· 1 实验一 单片机应用系统的开发演示 ········································· 2 实验二 简单流水灯设计···························································· 6 实验三 定时/计数器的应用 ····································································· 8 实验四 数码管00~99循环计数·············································· 11 实验五 中断系统的应用··························································· 13 附图1 ······················································································ 16 附图2 ······················································································ 17
3
绪 论
AT89S52单片机实验板
一、设备简介
以AT89S52为控制器,由发光二极管模块、七段数码管显示模块、矩阵键盘模块、A/D与D/A转换模块、串行通信模 块、存储模块、LCD显示模块组成。通过并行下载线烧写程序,供电电压为9V。AT89S52单片机开发板设计原则符合教学大纲的要求,使用模块化设计,用于课内实验、实训教学,学生的课程设计、毕业设计,以及单片机比赛。
二、使用注意事项
1、 将AT89S52单片机实验板附带的程序下载线插到实验板的插座上(另一端已经和计算机连接好)。
2、 将电源插头插到实验板上。
3、 使用过程中切记不要拔下电源插头和下载线插头。
4、 使用完毕后,先拔下电源插头;然后拔下下载线的插头。
5、 使用过程中出现故障和异常现象应立即向实验指导教师报告,不要擅自处理。
1
实验一 单片机应用系统的开发演示
一、 实验目的
1、 掌握AT89S52实验板的使用方法及注意事项。
2、 掌握uVision软件的使用方法及目标文件的获得方法。 3、 掌握双龙程序烧写软件的使用方法。
二、 实验说明
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码(即目标文件)有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。Keil软件是目前最流行开发MCS-51系列单片机的软件。Keil提供了包括C编译器、汇编器、连接器、库管理和一和功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要Pentium或Pentium以上的CPU,16MB或者更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51 系列单片机的爱好者来说是十分必要的,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
此外,当我们得到机器码(即目标文件)后,还有一个工作—把机器码(即目标文件)烧写到单片机中。这时我们需要一个烧写的软件,目前这样的软件有很多,我们经过测试从中选择了双龙程序烧写软件。下面我们将学习并练习上述两种软件的使用方法。
三、 实验内容和步骤
(一)应用uVision软件编辑、编译程序 1、 工程的建立
首先启动Keil 软件的集成开发环境,可以从桌面上直接双击uVision的图标以启动该软件。uVison 启动后,程序窗口的左边有一个工程管理窗口,该窗口有3 个标签,分别是Files 、Regs 、和Books ,这三个标签页分别显示当前项目的文件结构、CPU的寄存器及部份特殊功能寄存器的值(调试时才出现)和所选CPU 的附加说明文件,如果是第一次启动Keil , 那么这三个标签页全是空的。
(1)源文件的建立
使用菜单“File → New ”或者点击工具栏的新建文件按钮,即可在项目窗口的右侧打开一个新的文本编缉窗口,在该窗口中将实验程序0000.ASM中的内容粘贴进去。 保存该文件,注意必须加上扩展名(汇编语言源程序一般用asm或a51为扩展名),这里假定将文件保存为exam1.asm。需要说明的是,源文件就是一般的文本文件,不一定使用Keil 软件编写,可以使用任意文本编缉器编写。
(2)建立工程文件 点击“Project→New Project...”菜单,出现一个对话框,要求给将要建立的工程起一个名字,你可以在编缉框中输入一个名字(设为exam1 ) ,不需要扩展名。点击“保存”按钮,出现第二个对话框,如图1所示,这个对话框要求选择目标CPU (即你所用
2
芯片的型号), Keil 支持的CPU 很多,我们选择ATMEL 公司的89S52 芯片。点击ATMEL前面的“+”号,展开该层,点击其中的89S52,然后再点击“确定”按钮,回到主界面。此时,在工程窗口的文件页中,出现了“Target 1”,前面有“+ ”号,点击“+ ”号展开,可以看到下一层的“Source Group1”,这时的工程还是一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“Source Group1”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,如图2所示。选中其中的“Add file to Group” “Source Group1”,出现一个对话框,要求寻找源文件,注意,该对话框下面的“文件类型”默认为C source fi1e(*.c),也就是以C 为扩展名的文
件,而我们的文件是以asm 为扩展名的,所以在列表框中找不到exam1.asm,要将文件类型改掉,点击对话框中“文件类型”后的下拉列表,找到并选中“Asm Source File (*.a51,*.asm),这样,在列表框中就可以找到exam1.asm文件了。 双击exam1. asm 文件,将文件加入项目。注意,在文件加入项目后,该对话框并不消失,等待继续加入其它文件,但初学时常会误认为操作没有成功而再次双击同一文件,这时会出现一个对话框,提示你所选文件己在列表中,此时应点击“确定”,返回前一对话框,然后点击“Close”即可返回主界面。返回后,点击“Sorce Group 1 ”前的加号,会发现examl.asm 文件已在其中。双击文件名,即打开该源程序。
2、工程的详细设置
首先点击左边Project 窗门的
Target l ,然后使用菜单“Project→Option for target‘targetl ’”。即出现对工程设置的对话框,这个对话框可谓非常复杂,共有8个页面,要全部搞清可不容易,好在绝大部份设置项取默认值即可。
设置对话框中的Target页面,如图3所示,Xtal 后面的数值是晶振频率值,默认值
3
是所选目标CPU 的最高可用频率值,对于我们所选的AT89S52 而言是12M。 设置对话框中的Output页面,如图4所示,这里面也有多个选择项,其中Creat Hex file 用于生成可执行代码文件(可以用编程器写入单片机芯片的HEX 格式文件,文件的扩展名为.HEX ) ,默认情况下该项未被选中,如果要写片(向单片机烧写程序)做硬件实验,就必须选中该项,这点是初学者易疏忽的,在此特别提醒注意。选中Debug information 将会产生调试信息,这些信息用于调试,如果需要对程序进行调试,应当选中该项。Browse information是产生浏览信息,该信息可以用菜单view →Browse 来查看,这里取默认值。按钮“select Folder for objects \" 是用来选择最终的目标文件所在的文件夹,默认是与工程文件在同一个文件夹中。Name of Executable用于指定最终生成的目标文件的名字,默认与工程的名字相同,这两项一般不需要更改。
4
设置完成后按确认返回主界面,工程文件建立、设置完毕。
3、编译、连接
在设置好工程后,即可进行编译、连接。选择菜单Project→Build target ,对当前工程进行连接,如果当前文件己修改,软件会先对该文件进行编译,然后再连接以产生目标代码:
如果选择Rebuild All target files将会对当前工程中的所有文件重新进行编译然后再连接,确保最终生产的目标代码是最新的,而Translate...项则仅对该文件进行编译,不进行连接。
以上操作也可以通过工具栏按钮直接进行。图5是有关编译、设置的工具栏按钮,从左到右分别是:编译、编译连接、全部重建、停止编译和对工程进行设置。
编译过程中的信息将出现在输出窗口中的Build 页中,如果源程序中有语法错误,会有错误报告出现,双击该行,可以定位到出错的位置,对源程序反复修改之后,最终会得到如图6所示的结果,提示获得了名为exam1. hex 的文件,该文件即可被编程器读入并写到芯片中,同时还产生了一些其它相关的文件,可被用于Keil 的仿真与调试,这时.可以进入下一步调试的工作。
(二)应用双龙程序烧写软件将程序烧写到单片机
1、在“通信参数设置及器件选择”中分别设置成“LPT1、FAST、AT89S52”。 2、在“FLASH存储器”中点击“文件”查找源程序(.asm文件)的保存路径,找到与源程序文件名相同的可执行文件(.hex文件)并打开。
3、装载成功后,先“擦除”。 4、擦除成功后点击“编程”,即可观察到实验现象。 四、 预习要求
认真阅读实验指导书,领会实验目的。
五、 实验报告要求
1、 写出如何使用AT89S52单片机实验板。
2、 写出应用uVision软件编辑、编译程序的步骤。
3、 写出应用双龙程序烧写软件将程序烧写到单片机的步骤。
5
实验二 简单流水灯设计
一、实验目的
1、进一步掌握程序计数器、单片机时序、指令的字长等概念。 2、掌握子程序的功能和使用方法。
二、实验说明
当8255的PA口有低电平输出时,相应的发光二极管就会点亮。应用这一原理我们可以容易的点亮一个数码管,例如令PA口输出0111 1111时D1就会点亮。若再把0111 1111向右循环一位,利用PA口输出,就会点亮D2。在发光二极管两次点亮的间隔中加延时程序,让每次点亮停留一段时间,像这样人眼就可以看到“流水”的现象。
三、实验内容和步骤
(一)在AT89S52实验板上实现8个发光LED“流水”的现象,并通过编写程序控制流水现象。
(二)独立编程实现两个不同样式的“流水灯”,并可以加快“流水灯”的速度。
四、实验原理图
见附图1
五、实验参考程序
ORG 1000H
MOV A,#80H
MOV DPTR,#0FFFFH MOVX @DPTR,A MOV A,#7FH
LOOP: MOV DPTR,#0FFFCH ;2个机器周期 MOVX @DPTR,A ;2个机器周期 LCALL DELAY ;2个机器周期 RL A ;1个机器周期 SJMP LOOP ;2个机器周期 DELAY:MOV R6,#125 ;1个机器周期 D1:MOV R7,#200 ;1个机器周期 D2:DJNZ R7,D2 ;2个机器周期 DJNZ R6,D1 ;2个机器周期 RET ;2个机器周期
END
六、预习要求
1、认真阅读实验指导书,领会实验目的。
2、阅读并理解本实验的原理图及参考程序。
3、复习程序计数器、单片机时序、指令的字长等相关知识。
6
七、实验报告要求
1、写出实验内容(一)中的“流水”间隔时间的计算公式。 2、根据实验参考程序填写下表。 步数 机器码 指令 字长 指令周期 0 1 2 3 4 5 6 7 8 9 210 7
实验三 定时/计数器的应用
一、实验目的
1、掌握定时/计数器定时功能的应用及程序设计方法。 2、掌握定时/计数器计数功能的应用及程序设计方法。 3、提高上机调试、修改程序的能力。
二、实验说明
1、 定时功能应用:T0、T1的定时功能是通过对内部时钟脉冲计数实现的,每个机器周期使计数器的值增1。计数值乘以单片机的机器周期就是定时时间。每隔一个定时时间改变一次P1.0引脚的电平,就会在P1.0引脚上输出一个方波。
2、 计数功能应用:所谓计数,是对外部事件进行计数。计数脉冲来自相应的外部引脚T0或T1。当输入信号发生由1到0的负跳变时,计数器T0或T1的值就增1。需要注意的是这一电平至少要保持一个机器周期。我们可以把计数值放在某个寄存器中然后通过外部的显示接口电路显示出来。在本实验中我们可以采用DVCC实验箱的“单脉冲发生模块”作为外部脉冲。
三、实验内容和步骤
(一)定时功能应用:利用定时/计数器的定时功能,按要求在P1.0引脚上输出一个方波。
1、参考实验程序,编辑源程序,并通过双龙烧写软件将程序烧写到AT89S52中。 2、用示波器观察P1.0引脚发出的波形(用红色的表笔接触P1.0)。 3、参考实验程序编程,得到一个周期为40ms的方波。
(二)计数功能应用:利用定时/计数器的计数功能,记录外部脉冲的个数。 1、参考实验程序,编辑源程序,并通过双龙烧写软件将程序烧写到AT89S52中。 2、用单脉冲发生器发出信号,并与单片机的P3.5引脚接触,观察实验现象。 3、参考实验程序编程,得到一个周期为40ms的方波
四、实验参考程序
1、 定时功能应用
ORG 0000H
MOV TMOD,#01H SETB TR0 LOOP:MOV TH0,#0D8H
MOV TL0,#0F0H
JNB TF0,$ CLR TF0 CPL P1.0 SJMP LOOP END
8
2、 计数功能应用
ORG 0000H
MOV TMOD,#60H MOV TH1,#0FFH MOV TL1,#0FFH SETB TR1 MAIN:MOV A,#80H
MOV DPTR,#0FFFFH
MOVX @DPTR,A MOV R3,#100 MOV R0,#00H MOV R1,#10 MOV R7,#06H L1:MOV A,R0
MOV B,#0AH DIV AB MOV R2,#0FEH CALL DISP MOV A,B MOV R2,#0FDH
CALL DISP DJNZ R1,L1 DEL:JBC TF1, LOOP AJMP DEL LOOP: INC A
MOV R0,A DJNZ R3,L1 DJNZ R7,MAIN DISP:MOV DPTR,#TABLE
MOVC A,@A+DPTR MOV DPTR,#0EFFCH
MOVX @DPTR,A MOV A,R2 INC DPTR MOVX @DPTR,A CALL DELAY RET
DELAY:MOV R5,#10
9
L3:MOV R6,#24
DJNZ R6,$ DJNZ R5,L3
RET
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
五、预习要求
1、 认真阅读实验指导书,领会实验要求。 2、 阅读并理解本实验的参考程序。
六、实验报告要求
1、在两个实验中,为什么初始化时要对TH1和TL1进行赋值?
2、利用定时功能输出40ms方波时,定时初值是如何计算的?写出计算公式。
10
实验四 数码管00~99循环计数
一、实验目的
1、熟练掌握8255扩展功能的应用。
2、掌握七段数码管与单片机接口、应用的方法。 3、掌握七段数码管的动态扫描显示方法。
二、实验说明
七段数码管的显示方式分为静态显示和动态显示。所谓动态显示就是一位一位地轮流点亮显示器的各个位,对于显示器的每一位而言,每隔一段时间点亮一次。
三、实验内容
(一)在七段数码上管实现00~99循环计数。 (二)在七段数码上管实现88~11的减法计数。
四、实验原理图
见附图2
五、实验参考程序
ORG 0000H MAIN:MOV A,#80H
MOV DPTR,#0FFFFH
MOVX @DPTR,A MOV R3,#100 MOV R0,#00H MOV R1,#10
L1:MOV A,R0 MOV B,#0AH DIV AB
MOV R2,#0FEH
CALL DISP
MOV A,B
MOV R2,#0FDH
CALL DISP DJNZ R1,L1 INC R0 DJNZ R3,L1 SJMP MAIN
DISP:MOV DPTR,#TABLE
MOVC A,@A+DPTR MOV DPTR,#0EFFCH
11
MOVX @DPTR,A MOV A,R2 INC DPTR MOVX @DPTR,A CALL DELAY RET
DELAY:MOV R5,#10 L3:MOV R6,#24
DJNZ R6,$ DJNZ R5,L3 RET
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
六、预习要求
1、认真阅读实验指导书,领会实验目的。 2、阅读并理解本实验的原理图及参考程序。 3、复习单片机与七段数码管的接口技术。
七、实验报告要求
1、 在参考程序中“DISP”的功能是什么?
2、 如果去掉“DJNZ R1,L1”或者“DJNZ R3,L1”会出现什么现象? 3、 指令“INC DPTR”的功能是什么?
4、 本实验板采用的七段数码管是共阳极还是共阴极?如果换成另外一种,那么TABLE中的值应该为多少?
12
实验五 中断系统的应用
一、实验目的
1、掌握利用外部中断源进行中断的方法。 2、掌握中断处理过程的程序设计方法。
二、实验说明
MCS-51单片机有五个中断源,外部中断源有两个。首先,通过TCON设置中断信号类型;通过IE来打开相关的中断允许。这样可以使中断信号在随机的时间产生,完成中断相应。其次,在中断处理过程中,用压栈的方法保护现场再处理中断源的请求。最后,在软件中用RETI指令执行中断返回。
三、实验内容和步骤
(一)单一外部中断源:主程序设计成发光二极管顺向流水,中断时使8个LED闪烁8次。
1、DVCC实验箱的联机准备:打开电源开关,按复位键,然后按“PCDBG”。此时实验箱已经准备好与计算机进行连接。
2、 PC机的联机准备:在桌面上运行快捷方式“dv52196”,并在工具栏中点击“联接”。如果出现“寄存器窗口”和“反汇编窗口”说明联接成功。进行步骤“4”。如果没有出现“寄存器窗口”和“反汇编窗口”则进行步骤“3”。 3、联接失败的处理方法:重复步骤“1”、“2”,直到出现“寄存器窗口”和“反汇编窗口”。
4、源程序的编译、连接、传送
(1)在DVCC软件平台上,参考实验程序,编辑源程序。
(2)保存后,在菜单栏中选择“编译”,然后选择“编译连接传送文件”。此时新生成一个窗口“Message”
(3)如果“Message”显示如图<4-1>所示。则点击运行。此时在屏幕上出现图<4-2>所示的现象,说明程序运行成功。观察实验现象。
图<4-1> 图<4-2>
5、 用开关量输入的方式给INT0一个中断信号,观察实验现象。
6、 用开关量输入的方式持续的给INT0一个中断信号,再次观察实验现象。
13
7、 程序的终止 (1)按复位键。
(2)按“PCDBG”键。
(3)点击图<4-2>所示窗口中的“OK”。
(二)根据参考程序独立编写程序,实现第二个实验内容的现象。
四、实验参考程序
ORG 0000H AJMP START ORG 0003H AJMP EXT0
START:MOV IE,#81H
MOV TCON,#01H MOV SP,#20H LOOP:MOV A,#01H LOOP1:MOV P1,A
LCALL DELAY
RR A SJMP LOOP1 EXT0:PUSH PSW
PUSH ACC SETB RS0 CLR RS1 MOV A,#00H MOV R2,#10H LOOP3:MOV P1,A
LCALL DELAY CPL A
DJNZ R2,LOOP3 POP PSW POP ACC MOV A,#01H RETI
DELAY:MOV R5,#10H D1:MOV R6,#20 D2:MOV R7,#248
DJNZ R7,$
DJNZ R6,D2 DJNZ R5,D1
14
RET END
五、预习要求
1、认真阅读实验指导书,领会实验目的。 2、阅读并理解本实验的参考程序。
3、复习相关知识并写出第二个实验内容的程序。
六、实验报告要求
1、为什么第(一)个实验步骤中第5和第6个实验步骤的现象不一致?2、为什么在压栈时不仅保护ACC,而且还保护PSW? 3、画出参考程序的程序流程图。
15
附图1
16
附图2
17
因篇幅问题不能全部显示,请点此查看更多更全内容