单片机原理与接口技术实验三.docx
《单片机原理与接口技术实验三.docx》由会员分享,可在线阅读,更多相关《单片机原理与接口技术实验三.docx(12页珍藏版)》请在冰豆网上搜索。
单片机原理与接口技术实验三
实验三
(1)中断与定时/计数器实验
一、实验目的
1.了解单片机中断与定时器工作原理,掌握中断与定时器程序结构;
2.掌握在µVision环境中调试中断与定时器程序的方法。
二、实验仪器和设备
Keil软件;THKSCM-2综合实验装置;
三、实验原理及实验内容
1.示例及相关设置
(1)建立一个文件夹:
lx51。
(2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx51.asm文件名存盘到lx51文件夹中。
ORG0000H
LJMPMAIN
ORG0003H
MOVP2,A
RLA
RETI
ORG0040H
MAIN:
MOVSP,#5FH
MOVA,#0FEH
SETBEA
SETBEX0
SETBIT0
SJMP$
END
(3)在lx51文件夹下建立新工程,以文件名lx51存盘(工程的扩展名系统会自动添加)。
(4)在Project菜单的下拉选项中,单击OptionsforTarget‘Target1’,在弹出的窗口中要完成一下设置:
单片机芯片选择AT89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“CopyStartupCodetoProjectFolderandAddFiletoProject?
”,选择“是”。
晶振频率设为11.0592MHz。
Output标签下的CreateHEXFile前小框中要打钩。
在Debug标签选择UseSimulator(软件模拟)。
(5)在Project菜单的下拉选项中,单击buildTarget选项完成汇编,生成目标文件(.HEX)。
按F5运行程序。
(6)在P3窗口的P3.2位单击鼠标(模拟
引脚信号),观察P2窗口变化。
(7)修改程序,使之适合字节数大于8的中断服务情况。
(8)利用单片机最小系统板演示该程序的运行情况。
2.示例及相关设置
(1)建立一个文件夹:
lx52。
(2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx52.asm文件名存盘到lx52文件夹中。
ORG0000H
LJMPMAIN
ORG000BH
MOVP2,A
RLA
RETI
ORG0040H
MAIN:
MOVSP,#5FH
MOVA,#0FEH
MOVTMOD,#06H
MOVTH0,#0FBH;计数值为5
MOVTL0,#0FBH
SETBEA
SETBET0
SETBTR0
SJMP$
END
(3)在lx52文件夹下建立新工程,以文件名lx52存盘(工程的扩展名系统会自动添加)。
(4)在Project菜单的下拉选项中,单击OptionsforTarget‘Target1’,在弹出的窗口中要完成一下设置:
单片机芯片选择AT89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“CopyStartupCodetoProjectFolderandAddFiletoProject?
”,选择“是”。
晶振频率设为11.0592MHz。
Output标签下的CreateHEXFile前小框中要打钩。
在Debug标签选择UseSimulator(软件模拟)。
(5)在Project菜单的下拉选项中,单击buildTarget选项完成汇编,生成目标文件(.HEX)。
按F5运行程序。
(6)在P3窗口的P3.4位单击鼠标(模拟T0引脚信号),观察P2窗口变化。
(7)修改程序,使之适合字节数大于8的中断服务情况。
(8)利用单片机最小系统板演示该程序的运行情况。
四、实验结果和数据分析
问题:
1、完成三中1与2的(5)(6)两步,并写出结果,简要说明程序的功能。
2、完成三中1与2的(7)(8)两步,写出完整程序。
(2)定时/计数器的应用
(一)
一、实验目的
1.了解单片机P0口的功能及使用方法;
2.掌握在µVision环境中设计调试P0口应用程序的方法;
3.学习使用定时/计数器设计延时控制P0口实现P0.0和P0.1之间按1s互相闪烁。
二、实验仪器和设备
Keil软件;Proteus软件;THKSCM-2综合实验装置;
三、实验原理及实验内容
使用定时/计数器设计延时控制时,要求在在两灯P0.0和P0.1之间按1s互相闪烁。
1.硬件设计
在桌面上双击图标
,打开ISIS7Professional窗口。
单击菜单命令“File”→“NewDesign”,新建一个DEFAULT模版,保存文件名为“定时/计数器的应用
(一).DSN”。
在器件选择按钮
中单击“P”按钮,或执行菜单命令“Library”→“PickDevice/Symbol”,添加如表14-1所示的元件。
注意:
在ISIS中,单片机的型号必须与在Keil中选择的型号完全一致。
图14-1定时/计数器的应用
(一)电路图
表14-1定时/计数器的应用
(一)所用的元件
单片机AT89C51
瓷片电容CAP30pF
按钮BUTTON
发光二极管BIGY
电解电容CAP-ELEC
晶振CRYSTAL12MHz
电阻RES
发光二极管BIBY
在ISIS原理图编辑窗口中放置元件,在单击工具箱中的“元件终端”图标
,在对象选择器中单击“POWER”和“GROUND”放置电源和地。
放置好元件后,布好线。
左键双击各元件,设置相应元件参数,完成电路图的设计,如图14-1所示。
2.程序设计
(1)程序流程
定时/计数器的应用
(一)程序流程如图14-2所示。
(2)汇编源程序
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVSP,#60H;初始化堆栈
;给定时器0复制初值
MOVTMOD,#001H;使用16位模式[方式1M1=0M0=1]
MOVTH0,#4CH;初始化定时器0的溢出间隔时间为50ms
MOVTL0,#00H;TH为高位,TL为低位
SETBTR0;启用定时器0
SETBP0.0
CLRP0.1
MOVR7,#00H;用R7计数
LOOP:
JNBTF0,LOOP;当计数溢出时,硬件置位TF0为1,程序向下执行,
;否则调用LOOP
MOVTH0,#4CH;初始化定时器0的溢出间隔时间
MOVTL0,#00H;TH为高位,TL为低位
INCR7
CLRTF0
CJNER7,#14H,LOOP
ACALLLOOP1;20次循环闪烁一次
AJMPLOOP
LOOP1:
MOVR7,#00H
CPLP0.0;让接P0.0的发光二极管按50ms闪烁
CPLP0.1
RET
END
3.调试与仿真
安装VDMServer,使Keil和Protenus能联合调试程序。
打开Keil,执行菜单命令“Project”→“NewProject”创建“定时/计数器的应用
(一)”项目,并选择单片机型号为AT89C51。
执行菜单命令“File”→“New”创建文件,输入汇编源程序,保存为“定时/计数器的应用
(一).ASM”。
在Project菜单的File项目管理窗口中右击文件组,选择“AddFilestoGroup‘SourceGroup1’”将源程序“定时/计数器的应用
(一).ASM”添加到项目中。
执行菜单命令“Project”→“OptionsforTarget‘Target1’”,在弹出的对话框中选择“Output”选项卡,选中“CreateHEXFile”。
在“Debug”选项卡,选中“Use:
ProtenusVSMSimulator”。
执行菜单命令“Project”→“BuildTarget”,编译源程序。
如果编译成功,则在“OutputWindow”窗口中显示没有错误,并创建了“定时/计数器的应用
(一).HEX”文件。
在已绘制好原理图的ProtenusISIS菜单栏中,执行菜单命令“Debug(调试)”→“UseRemoteDebugMonitor(使用远程调试设备)”,将该项选中,使Protenus与Keil真正连接起来,使它们联合调试。
在Keil中执行菜单命令“Debug”→“Start/StopDebugSession”,或直接单击图标
进入Keil调试环境。
同时,在ProtenusISIS窗口中可看出Protenus也进入了程序调试状态。
在Keil代码编辑窗口中设置相应断点,断点的设置方法:
在需要设置断点语句的空白处双击鼠标左键,可设置断点;再次双击,可取消断点。
设置好断点后,在Keil中按F5键运行程序,观察运行结果,可以看出P0.0和P0.1控制两个LED互闪,闪烁间隔时间为1s。
四、实验结果和数据分析
问题:
1、在Keil中按F5键运行程序,观察运行结果?
图14-2定时/计数器的应用
(一)程序流程
(3)中断系统的应用
(二)
一、实验目的
1.了解单片机P0口的功能及使用方法;
2.掌握在µVision环境中设计调试中断系统应用程序的方法;
3.学习使用中断系统控制P0口进行8个LED进行响应状态变换。
二、实验仪器和设备
Keil软件;Proteus软件;THKSCM-2综合实验装置;
三、实验原理及实验内容
P0接8个LED,使8个LED闪烁。
当奇数次按下INT0的按钮时,8个LED每次同时点亮4个,点亮3次,即D0~D3与D4~D7交叉点亮3次。
偶数次按下INT0的按钮时,则D0~D7进行左移和右移2次。
当按下INT1的按钮时,产生报警(INT1优先)。
1.硬件设计
在桌面上双击图标
,打开ISIS7Professional窗口。
单击菜单命令“File”→“NewDesign”,新建一个DEFAULT模版,保存文件名为“中断系统的应用
(二).DSN”。
在器件选择按钮
中单击“P”按钮,或执行菜单命令“Library”→“PickDevice/Symbol”,添加如表17-1所示的元件。
注意:
在ISIS中,单片机的型号必须与在Keil中选择的型号完全一致。
表17-1中断系统的应用
(二)所用的元件
单片机AT89C51
瓷片电容CAP30pF
排阻RESPACK-8
发光二极管LED-YELLOW
按钮BUTTON
电解电容CAP-ELEC
晶振CRYSTAL12MHz
发光二极管LED-BLUE
三极管2N2905
麦克风SOUNDER
发光二极管LED-RED
发光二极管LED-GREEN
电阻RES
在ISIS原理图编辑窗口中放置元件,在单击工具箱中的“元件终端”图标
,在对象选择器中单击“POWER”和“GROUND”放置电源和地。
放置好元件后,布好线。
左键双击各元件,设置相应元件参数,完成电路图的设计,如图17-1所示。
图17-1中断系统的应用
(二)电路图
2.程序设计
本系统中采用了两外部中断
和
,需考虑这两个中断的优先级等问题。
与开关K2相连,作为报警信号的输入端,因此应将
设为高优先级。
控制广告灯亮的方式,因此需判断
按下的次数为奇数还是偶数。
(1)程序流程
中断系统的应用
(二)程序流程如图17-2所示。
(2)汇编源程序
ORG0000H;主程序起始地址设置
AJMPSTART;跳到主程序入口
ORG0003H;中断矢量地址(K1开关按钮)
AJMPINTR0;中断子程序入口
ORG0013H;中断矢量地址(K2开关按钮)
AJMPINTR1;中断子程序入口
START:
MOVIE,#85H;中断使能
MOVIP,#04H;优先级设置
MOVTCON,#00H;电平触发
MOVSP,#60H
MOVP0,#0FFH
MOVP1,#0FFH
MOVR0,#00H;设置K1开关按钮初始值
MOVA,#00H;设置D0~D7初始状态
LP1:
MOVP0,A;将A送至P0口
LCALLDELAY
CPLA;D0~D7闪烁
SJMPLP1;等待按钮按下中断
INTR0:
PUSHAcc;将A压入堆栈暂时保存
PUSHPSW;将PSW压入堆栈暂时保存
SETBRS0;使用工作寄存器组1
INCR0;K1键值加1
MOVA,#00H
ORLA,R0
JNBPSW.0,DOUBLE;PSW的D0=0,即K1键值为偶数,跳转
SINGLE:
MOVP0,#00H;D0~D3、D4~D7交叉点亮程序
MOVA,#0FH
MOVR4,#03H;设定交叉点亮3次
SINGLE1:
MOVP0,A
LCALLDELAY
SWAPA;A高、低字节交换
DJNZR4,SINGLE1
AJMPLP5;交叉次数到,退出
DOUBLE:
MOVP0,#00H;D0~D7进行左移和右移程序
MOVR1,#02H;设定移动2次
DOUBLE1:
MOVA,#01H
MOVR2,#08H;左移8个灯
SETBC
MOVP0,A
LP2:
RLCA
LCALLDELAY
DJNZR2,LP2
MOVA,#01H
MOVR2,#08H;右移8个灯
CLRC
LP3:
MOVP0,A
LCALLDELAY
RRCA
DJNZR2,LP3
DJNZR1,DOUBLE1;判移动次数是否到达,否,继续
LP5:
NOP;退出INT0中断子程序
POPPSW;取回PSW暂时保存的值
POPAcc;取回A暂时保存的值
RETI
INTR1:
PUSHAcc;按下K2时,执行报警子程序
PUSHPSW
CLRP1.0;报警
LCALLDELAY;延时
SETBP1.0
POPPSW
POPAcc
RETI;中断返回
DELAY:
MOVR7,#20;延时0.2s子程序
DELA1:
MOVR6,#20
DELA2:
MOVR5,#248
DJNZR5,$
DJNZR6,DELA2
DJNZR7,DELA1
RET
END
3.调试与仿真
安装VDMServer,使Keil和Protenus能联合调试程序。
打开Keil,执行菜单命令“Project”→“NewProject”创建“中断系统的应用
(二)”项目,并选择单片机型号为AT89C51。
执行菜单命令“File”→“New”创建文件,输入汇编源程序,保存为“中断系统的应用
(二).ASM”。
在Project菜单的File项目管理窗口中右击文件组,选择“AddFilestoGroup‘SourceGroup1’”将源程序“中断系统的应用
(二).ASM”添加到项目中。
执行菜单命令“Project”→“OptionsforTarget‘Target1’”,在弹出的对话框中选择“Output”选项卡,选中“CreateHEXFile”。
在“Debug”选项卡,选中“Use:
ProtenusVSMSimulator”。
执行菜单命令“Project”→“BuildTarget”,编译源程序。
如果编译成功,则在“OutputWindow”窗口中显示没有错误,并创建了“中断系统的应用
(二).HEX”文件。
在已绘制好原理图的ProtenusISIS菜单栏中,执行菜单命令“Debug(调试)”→“UseRemoteDebugMonitor(使用远程调试设备)”,将该项选中,使Protenus与Keil真正连接起来,使它们联合调试。
在Keil中执行菜单命令“Debug”→“Start/StopDebugSession”,或直接单击图标
进入Keil调试环境。
同时,在ProtenusISIS窗口中可看出Protenus也进入了程序调试状态。
在Keil代码编辑窗口中设置相应断点,断点的设置方法:
在需要设置断点语句的空白处双击鼠标左键,可设置断点;再次双击,可取消断点。
设置好断点后,在Keil中按F5键运行程序,观察运行结果,在没有按下INT0和INT1的按钮时,8个LED闪烁。
当奇数次按下INT0的按钮时,8个LED每次同时点亮4个,点亮3次,即D0~D3与D4~D7交叉点亮3次。
偶数次按下INT0的按钮时,则D0~D7进行左移和右移2次。
当按下INT1的按钮时,产生报警(INT1优先)。
四、实验结果和数据分析
问题:
1、在Keil中按F5键运行程序,观察运行结果?
图17-2中断系统的应用
(二)程序流程