试验五外部中断试验急救车与交通灯一.docx
《试验五外部中断试验急救车与交通灯一.docx》由会员分享,可在线阅读,更多相关《试验五外部中断试验急救车与交通灯一.docx(14页珍藏版)》请在冰豆网上搜索。
![试验五外部中断试验急救车与交通灯一.docx](https://file1.bdocx.com/fileroot1/2023-4/20/6b565610-5e9a-4e76-8fe1-b2d310a4d058/6b565610-5e9a-4e76-8fe1-b2d310a4d0581.gif)
试验五外部中断试验急救车与交通灯一
实验五外部中断实验(急救车与交通灯)
一.实验要求
在实验四内容的基础上增加允许急救车优先通过的要求。
有急救车到达时,两向交通信号为全红,以便让急救车通过。
假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。
本实验以按键为中断申请,表示有急救车通过。
二.实验目的
1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
三.实验电路及连线
PO0-PO3接DG1-DG4,PO4-P07接DR1-DR4。
CS273接8300H。
K8接P3.2。
四.实验说明
中断服务程序的关键是:
1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。
2.必须在中断程序中设定是否允许中断重入,即设置EX0位。
本例中使用了INT0中断,一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。
本例的INT0程序保护了PSW,ACC,2等三个寄存器并且在退出前恢复了这三个寄存器。
另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。
本例中没有涉及这种情况。
实验开始时K8应在H(高电平)端,要产生中断时先拨向L(低电平)端再拨回H端。
五.实验程序框图
六.源程序
ORG0000H
LJMPSTART
ORG0003H;INT0中断入口地址
LJMPINT0
ORG0040H
START:
MOVSP,#60H
SETBEX0;INT0中断有效
SETBIT0
SETBEA
LCALLSTATUS0;初始状态(都是红灯)
CIRCLE:
LCALLSTATUS1;南北绿灯,东西红灯
LCALLSTATUS2;南北绿灯闪转黄灯,东西红灯
LCALLSTATUS3;南北红灯,东西绿灯
LCALLSTATUS4;南北红灯,东西绿灯闪转黄灯
LJMPCIRCLE
INT0:
PUSHPSW;保护现场
PUSH2
PUSHACC
MOVDPTR,#8300H
MOVA,#0FH;南北,东西都亮红灯
MOVX@DPTR,A
MOVR2,#100;延时10秒
LCALLDELAY
POPACC;恢复现场
MOVX@DPTR,A
POP2
POPPSW
RETI
STATUS0:
;南北红灯,东西红灯
MOVDPTR,#8300H
MOVA,#0FH
MOVX@DPTR,A
MOVR2,#10;延时1秒
LCALLDELAY
RET
STATUS1:
;南北绿灯,东西红灯
MOVDPTR,#8300H
MOVA,#5AH;南北绿灯,东西红灯
MOVX@DPTR,A
MOVR2,#50;延时5秒
LCALLDELAY
RET
STATUS2:
;南北绿灯闪转黄灯,东西红灯
MOVDPTR,#8300H
MOVR3,#03H;绿灯闪3次
FLASH:
MOVA,#5FH
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
MOVA,#5AH
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
DJNZR3,FLASH
MOVA,#0AH;南北黄灯,东西红灯
MOVX@DPTR,A
MOVR2,#10;延时1秒
LCALLDELAY
RET
STATUS3:
;南北红灯,东西绿灯
MOVDPTR,#8300H
MOVA,#0A5H
MOVX@DPTR,A
MOVR2,#50;延时5秒
LCALLDELAY
RET
STATUS4:
;南北红灯,东西绿灯闪转黄灯
MOVDPTR,#8300H
MOVR3,#03H;绿灯闪3次
FLASH1:
MOVA,#0AFH
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
MOVA,#0A5H
MOVX@DPTR,A
MOVR2,#03H
LCALLDELAY
DJNZR3,FLASH1
MOVA,#05H;南北红灯,东西黄灯
MOVX@DPTR,A
MOVR2,#10;延时1秒
LCALLDELAY
NOP
RET
DELAY:
;延时子程序
PUSH2
PUSH1
PUSH0
DELAY1:
MOV1,#00H
DELAY2:
MOV0,#0B2H
DJNZ0,$
DJNZ1,DELAY2;延时100mS
DJNZ2,DELAY1
POP0
POP1
POP2
RET
END
实验六定时器实验
一.实验要求
由8031内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。
P1口的P1.0-P1.7分别接八个发光二极管。
要求编写程序模拟一时序控制装置。
开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮......一直循环下去。
二.实验目的
1.学习8031内部计数器的使用和编程方法。
2.进一步掌握中断处理程序的编程方法。
三.实验电路及连线
P1.0--P1.7接L1--L8
四.实验说明
1.关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。
内部计数器在单片机中主要有定时器和计数器两个功能。
本实验用的是定时器,有关计数器的说明请查阅实验七。
2.内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
因为实验系统的晶振是11.0592MHz,所以定时常数的设置可按以下方法计算:
机器周期=12÷11.0592MHz=1.0857μS
(65536-定时常数)*1.0857μS=50mS
定时常数=4C00H
3.定时器的有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
TMOD用于设置定时器/计数器的工作方式0~3,并确定用于定时还是用于计数。
TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行
或停止等。
4.在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
五.实验程序框图
程序框图:
六.实验程序
ORG0000H
AJMPSTART
ORG001BH;T1中断入口地址
AJMPINT_T1
ORG0100H
START:
MOVSP,#60H
MOVTMOD,#10H;置T1为方式1
MOVTL1,#00H;延时50mS的时间常数
MOVTH1,#4BH
MOVR0,#00H
MOVR1,#20
SETBTR1
SETBET1
SETBEA;开中断
SJMP$
INT_T1:
;T1中断服务子程序
PUSHACC;保护现场
PUSHPSW
PUSHDPL
PUSHDPH
CLRTR1;关中断
MOVTL1,#00H;延时50mS常数
MOVTH1,#4BH
SETBTR1;开中断
DJNZR1,EXIT
MOVR1,#20;延时一秒的常数
MOVDPTR,#DATA;置常数表基址
MOVA,R0;置常数表偏移量
MOVCA,@A+DPTR;读常数表
MOVP1,A;送P1口显示
INCR0
ANL00,#07H
EXIT:
POPDPH;恢复现场
POPDPL
POPPSW
POPACC
RETI
;LED显示常数表
DATA:
DB0FAH,0F5H,0AFH,05FH,0AAH,55H,00H,0FFH
END
实验七计数器实验
一.实验要求
8031内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。
使用8031的T1作定时器,50ms中断一次,看T0内每0.50ms来了多少脉冲,将其数值按二进制数在74LS273驱动LED灯上显示出来,5秒后再次测试。
二.实验目的
1.学习8031内部定时/计数器使用方法。
2.进一步掌握中断处理编程方法。
三.实验电路及连线
P3.4接一计数脉冲(25模块中的149.06K频率)。
PO0~PO7接L1~L8。
CS273接8300H。
四.实验说明
1.本实验中内部计数器起计数器的作用。
外部事件计数脉冲由P3.4引入定时器T0。
单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。
这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。
同时这就决定了输入波形的频率不能超过机器周期频率。
2.实验时P3.4对应的连线为149.06KHZ孔,0.5ms内来了80次(50H)脉冲。
五.实验程序框图
六.实验程序:
ORG0000H
AJMPSTART
ORG000BH;T0中断入口地址
RETI
ORG001BH;T1中断入口地址
AJMPINT_T1
ORG0040H
START:
MOVSP,#60H
MOVTMOD,#1DH;置T1为方式1
;置T0为方式1,计数方式,
;门控选通位有效
MOVTL0,#0H;计数器清零
MOVTH0,#0H
MOVTL1,#32H;延时0.50mS常数
MOVTH1,#0FEH
MOVR0,#20;延时5秒常数
SETBTR0;启动T0
SETBET0
SETBTR1;启动T1
SETBET1
SETBEA;开中断
SJMP$
INT_T1:
PUSHACC
PUSHPSW
CLRTR1
MOVTL1,#32H;延时0.50mS常数
MOVTH1,#0FEH
MOVR1,TL0;保存计数值
MOVR2,TH0
MOVTL0,#00H;清计数器
MOVTH0,#00H
SETBTR1
DJNZR0,EXIT
MOVR0,#20;延时5秒常数
MOVDPTR,#8300H;LED地址
MOVA,R1
MOVX@DPTR,A;把计数值在LED上显示
EXIT:
POPPSW
POPACC
RETI
END
实验八8255输入、输出实验
一.实验要求
编写程序,使用8255可编程并行口芯片,来检测八位拨动开关的状态,并控制八位发光二极管。
使得八位发光二极管的亮灭变化与八位拨动开关的状态相一致。
实验中用8255PB口作输入,PC口做输出。
二.实验目的
了解8255芯片结构及编程方法。
三.实验电路及连线
8255的PB0~PB7(PB口)接至八位拨动开关K1~K8。
将PC0~PC7(PC口)接至八位发光二极管L1--L8。
CS8255接8500H。
四.实验说明
可编程通用接口芯片8255A有三个八位的并行I/O口,请用户仔细阅读有关书籍掌握其特点和各种用法。
由于8255的A1、A2脚分别接至地址线的A0、A1。
所以相对应8255各口/寄存器的地址分配如下:
PA口:
8500H;PB口:
8502H;PC口:
8504H;控制寄存器地址:
8506H。
本示例程序中使用PB口作输入,检测八位拨动开关的状态;使用PC口作输出,控制八个发光二极管的亮灭。
五.实验程序框图
实验程序流程框图如下:
六.实验程序见:
;---------------------------------------------------------
D8255EQU8506H;8255状态/命令口地址
D8255AEQU8500H;8255PA口地址
D8255BEQU8502H;8255PB口地址
D8255CEQU8504H;8255PC口地址
;---------------------------------------------------------
ORG0000H
LJMPSTART
ORG0100H
START:
LCALLDELAY;延时
MOVDPTR,#D8255
MOVA,#82H;置8255状态
;方式0,PA,PC口输出,PB口输入
MOVX@DPTR,A
ROTATE:
MOVDPTR,#D8255B
MOVXA,@DPTR;读开关状态
MOVDPTR,#D8255C
MOVX@DPTR,A;点亮对应的LED
SJMPROTATE
DELAY:
MOVR0,#0H;延时子程序
DELAY1:
MOVR1,#0H
DJNZR1,$
DJNZR0,DELAY1
RET
END