课 程:微处理器原理与应用 课 时:4学时 教学环境:单片机实验室
教学方法:讲解相关内容,指导学生实验
实验二 外部中断、定时/计数器实验
一、目的、任务和要求
1.1 实验目的
1. 掌握单片机中断系统的结构及工作原理。 2.掌握外部中断功能程序的一般结构和编程方法。 3.掌握单片机的定时/计数器的结构及工作原理。
4.掌握定时中断应用程序、计数器应用程序的典型结构和编程方法。 1.2 实验任务
1.对8051单片机的外部中断功能和I/O口功能,搭建一个外部中断控制输出的硬件电路,设计和调试通过相应的外部中断功能软件。
2.对8051单片机的定时/计数器功能和I/O口功能,搭建一个(种)或几个(种)应用定时/计数器的硬件电路,设计并调试通过相应的软件。
1.3实验要求
通过完成外部中断功能实验项目,掌握中断初始化的内容和中断子程序的结构,熟悉中断响应的过程和现场保护的意义,会正确运用堆栈指令作现场保护和现场恢复。
通过完成定时/计数器实验项目,掌握正确选择定时/计数器的工作方式和计数模式的方法,掌握定时/计数器的初值计算方法,会编写中断控制寄存器和定时器中断入口地址的初始化程序。
二、设备和器件
2.1实验设备
(1)微型计算机(PC机)(装配相关软件),(2)单片机实验箱或开发板。 2.2电路元器件
本实验采用Protues仿真软件搭建一个简单的单片机系统电路,进行电路仿真分析,不需要实际的元器件。若实验采用万能板(或面包板)搭建电路,则需要如下元器件:
1
- !
LED发光二极管,510Ω限流电阻,小按键、软导线等。 学生可自己在课后搭建电路进行实验,并与仿真实验比较。
三、实验内容及步骤
3.1外部中断控制流水灯的实验内容及步骤
(1)根据实验任务作电路原理图设计、作电路布局设计、通过Protues仿真软件来完成单片机硬件系统的搭建。电路图如3.1所示。
(2) 通过“μVision4”软件编辑外部中断控制流水灯的程序,并将编写好的程序代码进行编译和仿真调试,然后输出*.hex文件。
(3)通过实验板专用的接口将*.hex文件写入到单片机芯片的程序存储器中,然后试运行,察看现象并分析结果。若不成功,则要分析原因,重复有关步骤直至成功。
3.2 定时中断控制流水灯电路的实验内容及步骤
(1) 根据上面已搭建好的外部中断控制流水灯电路完成本任务。
(2) 通过“μVision4”软件编辑定时中断控制流水灯程序,并将编写好的程序代码进行编译和仿真调试,然后输出*.hex文件。
(3)通过实验板专用的接口将*.hex文件写入到单片机芯片的程序存储器中,然后试运行,察看现象并分析结果。若不成功,则要分析原因,重复有关步骤直至成功。
3.3外部脉冲个数计数显示的实验内容及步骤
(1)根据实验任务作电路原理图设计、作电路布局设计、通过Protues仿真软件来完成单片机硬件系统的搭建。电路图如3.2所示。
(2) 通过“μVision4”软件编辑外部中断控制流水灯的程序,并将编写好的程序代码进行编译和仿真调试,然后输出*.hex文件。
(3)通过实验板专用的接口将*.hex文件写入到单片机芯片的程序存储器中,然后试运行,察看现象并分析结果。若不成功,则要分析原因,重复有关步骤直至成功。
说明:单片机实验板使用STC89C51RC-RD+系列单片机,利用RS232串口和STC-ISP V33.exe通信软件(或开发板自带下载软件)来下载*.hex机器程序代码。
3.4 参考电路与程序代码 1参考电路
(1)外部中断控制输出的流水灯电路简图 2
- !
该电路图是在最小系统的基础上,将P1口接LED发光管电路,INT0脚连接外部中断触发开关,如图3.1所示。
图3.1 外部中断控制流水灯电路简图
(2)定时中断控制流水灯的电路简图
可根据外部中断控制流水灯电路图完成任务。如图3.1所示。实验时将K断开,只使用内部定时器功能。
(3)外部脉冲个数计数显示的电路简图
该电路图是在最小系统的基础上,将P1口接LED发光管电路,T0脚连接脉冲按键开关,通过开关K的通/断产生脉冲来进行计数。如图3.2所示。
3
图3.2 外部中断控制流水灯电路简图
K T0 +5V K INT0 … +5V LED 1kΩ P1.0 P1.1 P1.7 8051 LED … 1kΩ P1.0 P1.1 P1.7 8051 - !
2 参考程序代码
(1)外部中断控制的流水灯
1)外部中断控制流水灯参考程序结构
2)外部中断控制的流水灯参考程序代码
ORG 0000H LJMP START
ORG 0003H ;INT0中断源入口
LJMP I001 ;I001是中断子程序的起始地址标号 ORG 0100H ;主程序入口
SETB IT0 ;采用下降沿触发方式 SETB EX0 ;允许INT0中断
SETB EA ;打开中断总允许开关 CLR A ;A存放计数值,初值=0 CPL A ;A内容取反,0和1电平反转
MOV P1, A ;P1口低电平时LED灯亮,即A取反前为1时LED亮 CPL A ;A内容取反,A仍为计数值 LCALL DL0 ;DL0是延时子程序的标号
ADD A,#1 ;加法运算,0~255循环,可用INC A指令 AJMP ST0 ;无条件循环计数 PUSH ACC ;先保护断点现场A PUSH PSW ;后保护断点现场PSW
SETB RS1 ;修改工作寄存器区,保护断点现场Rn MOV A,#0FEH ;流水灯初值
程序地址分配(ORG指令) START:中断初始化 主程序任务 (不断计数显示的循环) (调用延时子程序DL0) I001:现场保护 子程序任务 (16次移位亮灯的子程序) 现场恢复 RETI DL0:延时子程序 RET END START:
ST0:
I001:
4
- !
LOOP:
MOV R3,#16 MOV P1,A RL A LCALL DL0 DJNZ R3,LOOP CLR RS1 POP PSW POP ACC RETI MOV R0,#255 MOV R1,#255 DJNZ R1,DL2 DJNZ R0,DL1 RET END
;循环变量初值 ;流水灯控制输出 ;移位运算
;调用延时子程序 ;流水灯移位共16次 ;恢复现场
;恢复现场按照堆栈操作“先进后出”原则编程 ;不可以先POP ACC再POP PSW。 ;中断返回,返回到主程序断点处
DL0: DL1: DL2:
3)深入实验问题(要求学生完成)
(1)只去掉PUSH ACC和POP ACC指令,再仔细查看并解释运行现象。 (3)将SETB IT0改成CLR IT0,较长时间按下按键,查看并解释运行现象。 (4)只改RETI为RET,仔细查看并解释运行现象。
(5)设置INT0、INT1两个外部中断,分别为高级和低级中断。试编程;分别在两个中断
同时请求、低级中断先请求和高级中断先请求这三种情况下观察并解释运行现象。
(2)定时中断控制的流水灯
1)定时中断控制的流水灯参考程序结构
程序地址分配(ORG) MAIN:定时器T0初始化 (工作方式、计数初值和启动计数器) 定时器T0开中断 设置流水灯显示初值 自循环(等待中断) CIT0:中断子程序 (计数初值重装 流水灯移位一次) RET END 5
- !
2)定时中断控制的流水灯参考程序代码 ORG 0000H LJMP MAIN
ORG 0BH LJMP CIT0
ORG 0100H
MAIN: MOV TMOD,#01H MOV TH0,#3CH
MOV TL0,#0B0H SETB ET0 SETB EA
SETB TR0 MOV A,#0FEH SJMP $ CIT0: MOV TH0,#3CH MOV TL0,#0B0H
RL A MOV P1, A RETI END
;中断源T0的入口地址
;设置内部定时16位计数方式
;6M晶振100ms/2µ=C350H,初值=3CB0H ;计数器初值低8位 ;中断初始化
;启动TO开始计数
;LED灯初值是最低位灯亮 ;自循环,等待中断 ;重装计数器初值
;每中断一次移位一次
;在中断响应子程序中输出 ;中断返回,返回到断点
3)深入实验问题(要求学生完成)
(1)对于定时中断控制的流水灯程序,将TH0,TL0初值设为00H,查看并解释运行现象。
(2)对于定时中断控制的流水灯程序,试修改流水灯速度,使其1秒才移动1位? (3)对于定时中断控制的流水灯程序,试修改程序使之作“每秒加1”计数? (4)对于定时中断控制的流水灯程序,试修改问题3程序,使得子程序的主要任务(即移位和输出指令的功能)放在主程序中执行而运行现象完全不变?(思路提示:利用标志位和位控制转移指令的功能,在主程序上加入一个分支结构程序段)
(3)脉冲个数计数显示
1)脉冲个数计数显示的参考程序结构 6
程序地址分配(ORG) MAIN: 定时器T0初始化 启动T0计数 TL0值送显示(循环) END - !
2)脉冲个数计数显示的参考程序代码
ORG 0000H LJMP MAIN ORG 100H
MAIN: MOV TMOD,#06H ;设置外部时钟,8位重装计数方式 MOV TL0,#00H ;计数器初值=00H MOV TH0,#00H ;溢出重装数值=00H SETB TR0 ;启动T0计数 LOOP: MOV A,TL0 ;读TL0计数值
CPL A
;或XRL A,#0FFH,使“1”表示灯亮
MOV P1,A ;P1口LED灯显示TL0的数值 SJMP LOOP ;读TL0送显示循环 END
3)深入实验问题(要求学生完成)
(1)若利用定时器T0来产生一个周期为10ms的方波,在P1.0脚输出,如何编写程序?
(要求:先画出程序流程图或画出程序结构图)
(2)若对周期为10ms的一个方波,用定时器T1来测量其正脉冲宽度,如何进行电路连
接和编写程序?(要求:先画出程序流程图或画出程序结构图)
(3)试编程使P1.0引脚上的LED显示灯每秒闪烁1次,即1秒内LED灯亮300ms、灭700ms(提示:可以使用两个定时器)。
四、实验报告要求与考核标准
1、 实验报告要求
(1)给出运行成功的单片机系统电路图、程序流程图、操作步骤和运行结果,并编写深入实验的程序代码。电路图和流程图要尽量详尽,程序代码要书写规范,操作步骤和运行结果要具体求实。
(2) 写成深入实验问题的内容。
(3)分析实验过程中的现象,得出结论。 7
- !
2、实验考核标准 实验考核标准如下表: 序号 考核内容 权重 评分摘要 画错接线 软件仿真电路(20分) 画错元件 1 电路设计 仿真出错 实际电路连线(15分) 接线错误 程序编辑(10分) 2 软件设计 程序编译(10分) 功能完整(15分) 安全操作(15分) 3 4 5
安全与纪律 实验纪律(10分) 综合考核 综合(5分) 违纪 5分/ 次 编辑不规范 编译出错 功能出错 违规操作 3分/个 3分/个 2分/个 2分/个 3分/个 5分/ 次 扣分标准 2分/个 2分/个 得分 8
因篇幅问题不能全部显示,请点此查看更多更全内容