实验八 IRQ4中断

  • 格式:docx
  • 大小:21.29 KB
  • 文档页数:3

物理与电子科学系实验报告
课程名称单片机原理及应用技术实验班级 B13电子班
实验名称实验十外部中断EXT1,EXT2
学生姓名陈梅学生学号 28
【实验目的】
1. 熟悉IRQ3的中断向量和中断源及外部时钟的触发方式。

2. 掌握中断控制单元P_INT_Ctrl,P_INT_Clear的设置方法。

3. 掌握外部中断EXT1、EXT2的编程方法。

【实验设备】
1. 装有Windows系统和μ’nSP™ IDE集成开发环境的PC机一台,μ’nSP™十六位单片机
实验箱一个。

2. 本实验用到的实验箱硬件模块为:SPCE061A核心及周边电路模块(包含32个I/O口),
发光二极管电路模块,高低电平发生按键电路模块。

【实验要求】
1. 编程要求:编写一个汇编语言程序。

2. 实现功能:利用外部中断来控制8个发光二极管的点亮与熄灭,利用键盘产生外部中
断触发信号。

3. 实验现象:当按S20键时,D8~D11四个发光二极管点亮,当按S21键时,D4~D7四个
发光二极管点亮。

【实验原理】
SPCE061A两个外部中断,为负跳沿触发中断。

两个外部中断源EXT1、EXT2和一个键唤醒中断源IRQ3_KEY对应中断向量IRQ3。

通过设置P_INT_Ctrl来允许中断,程序运行后,外部输入信号端(EXT1、EXT2)产生负跳沿(将IOB2、IOB3接地)触发信号,中断响应后,通过读取P_INT_Ctrl单元,可以判断中断源,转到相应子程序。

本实验要求利用键盘产生负跳沿触发信号,把实验箱中的1*8键盘(高低电平发生按键)的选择开关S28拨到“L”端。

如图1-50,根据键盘的工作原理,在IOB2设置为带上拉电阻的输入口时,当S20键盘按下时,在IOB2口的状态会拉到低电平,抬起键盘时会IOB2口又回到高电平,这样就产生了一个负跳沿的脉冲。

为了防止误操作,可以进行按键抖动处理,利用延时的方法,即当IOB2检测到负沿信号,如果延时一段时间后,比如延时20ms之后IOB2口还检测到低电平,则确认这个键被按下,这样才可以送一个触发信号,否则就判为误操作。

【硬件连接】
如图1-52硬件连接图,IOB2、IOB3分别连接S20、S21,IOA的低八位IOA0~IOA7连接8个发光二极管D4~D11,即用8pin的排线将实验箱J16和J26、J18和J28连接起来(注意一定要把J28的第2号引针、第3号引针依次和J18的第0号、第1号引针依次连接);1*8键盘左边的选择开关S28拨到“L”端。

【实验步骤】
1. 按照程序流程图编写汇编语言程序。

2. Rebuild All。

3. 按照硬件连接图连接电路,注意把实验箱的选择开关S28拨到“L”位置。

4. 下载程序,运行。

实验程序
.DEFINE P_IOA_DATA 0x7000;
.DEFINE P_IOA_DIR 0x7002;
.DEFINE P_IOA_ATTRI 0x7003;
.DEFINE P_IOB_DATA 0x7005;
.DEFINE P_IOB_DIR 0x7007;
.DEFINE P_IOB_ATTRI 0x7008;
.DEFINE P_INT_CTRL 0x7010;
.DEFINE P_INT_CLEAR 0x7011;
.DEFINE P_Feedback 0x7009;
.define p_watchdog_clear 0x7012;
.CODE
.PUBLIC _main
_main:
int off
r1 = 0xffff //设置IOA口为同相低电平输出口;
[P_IOA_ATTRI] = r1
[P_IOA_DIR] = r1
r1=0x0000
[P_IOA_DATA] = r1
r1 = 0x0000; //设置IOB2、IOB3设成带上拉电阻的输入端口[P_IOB_DIR] = r1;
[P_IOB_ATTRI] = r1;
r1 = 0x000c ; //IOB2,IOB3
[P_IOB_DATA] = r1;
R1 = 0x0300; //开中断IRQ3_EXT1、IRQ3_EXT2
[P_INT_CTRL] = r1;
intirq;
L_Loop:
NOP
NOP
NOP
jmpL_Loop
.TEXT
.PUBLIC _IRQ3
_IRQ3:
push r1,r5 to [sp] //压栈保护
r1 = 0x0100
test r1,[P_INT_CTRL] //比较是否为IRQ3_EXT1
jnz L_IRQ3_Ext1 //是,则转至对应程序段;
r1 = 0x0200
test r1,[P_INT_CTRL] //否,则比较是否为IRQ3_EXT2
jnz L_IRQ3_Ext2 //是,则转至对应程序段;
r1 = 0x0200
L_IRQ3_Key: //否,则进入键唤醒中断
r1 = 0x0080
[P_INT_CLEAR] = r1
pop r1,r5 from [sp]
reti
L_IRQ3_Ext2:
r1 = 0xff0f
[P_IOA_DATA] = r1
r1 = 0x0200
[P_INT_CLEAR] = r1
pop r1,r5 from [sp]
reti
L_IRQ3_Ext1:
r1 = 0xfff0
[P_IOA_DATA] = r1
r1 = 0x0100
[P_INT_CLEAR] = r1
r1 = 0x0001 //清看门狗
[p_watchdog_clear] = r1
pop r1,r5 from [sp]
reti
实验结果
按S20键时,D8~D11四个发光二极管点亮,当按S21键时,D4~D7四个发光二极管点亮。