搜索
您的当前位置:首页正文

单片机实验二 中断程序

来源:二三娱乐


实验二:中断

一、实验要求

实验目的:学会使用 uVision 4和Proteus软件进行单片机汇编语言和C语言程序设计与开发;了解和掌握MCS-51单片机的中段组成、中断控制工作原理、中断处理过程、外部中断的中断触发方式,掌握中断功能的编程方法。

实验内容:单片机的P1.0引脚接LED指示灯D0;P3.2接按键开关K作为中断源可每次案件都会触发INT0中断;在INT0中断服务程序中将P1.0端口的信号取反,是LED指示灯D0在点亮和熄灭两种状态间切换,产生LED指示灯由按键K控制的效果。

二、实验原理

中断服务程序的设计主要包括两部分:初始化程序和中断服务程序。

初始化程序主要完成为响应中断而进行的初始化工作。这些工作主要有:中断源的设置、中断服务程序中有关工作单元的初始化和中断控制的设置等。

中断源的设置与硬件设计有关,各中断请求标志由存储器TCON和SCON中有关标志位来表示,所以中断源的初试化工作主等要有初试化各中断请求标志和请求外部中断信号的类型。

中断服务程序通常由现场保护、总段处理和恢复现场三个部分组成。MSC-51单片机所做的断电保护工作是很有限的,只保护了一个端点地址。所以如果在主程序中用到如A、

1 / 6

PSW、DPTR和R0~R7等寄存器,而在中观程序中又要用他们,这就要保证回到主程序后,这些寄存器还要回复到未执行中断前的内容。在运行中断处理程序前,将中断处理程序中用到的寄存器内容先保存起来,这就是所谓的“现场保护”。好糊A、PSW、DPTR等内容,通常可用压入堆栈命令(PUSH)指令,对保护R0~R7等寄存器可用改变工作寄存器区的方法。

中断处理结束后,将中断处理程序中用到的寄存器内容恢复到中断前的内容,即“恢复现场”。恢复现场要与保护现场操作配合使用。

三、程序设计

1、程序流程图

开始初始化设置堆栈SP ←40H开中断改变灯状态返回中断结束 图 1 中断程序流程图

2 / 6

2、程序代码

ORG 0000H

AJMP MAIN

ORG 0003H

AJMP EX_INT0

ORG 0100H

MAIN: MOV SP, #40H

SETB IT0

SETB EA

SETB EX0

SJMP $

ORG 0200H

EX_INT0: CPL P1.0

3 / 6

RETI

END

设计思路:MCS—51上电复位后,CPU将从0001H单元开始执行程序,用“AJMP MAIN”指令转入之程序,执行中断初始化程序后,便可处理其他事务(用原地踏步指令代替)。当按键被按下时,INT0出现负跳变,发出中断请求信号。CPU响应中断,停止其他工作,跳转到INT0中断入口地址0003H单元,转入EX_INT0执行中断服务程序,当执行到中断返回指令RETI时,使CPU返回断点处,继续处理其他工作(原地踏步指令)。

四、程序验证

1、 在Proteus中连接电路图如下:

C230pX112Mhz19U1XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617C330p18XTAL2R310k9RSTC11uVCC293031PSENALEEAR2100R1100D1LED-YELLOW12345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52VCC 图 2 中断程序电路图

4 / 6

将程序导入AT89C52

按键观察电路中二极管的状态:

C230pX112MhzU1C319XTAL1P0.0/AD039P0.1/AD13818P0.2/AD23730pXTAL2P0.3/AD336P0.4/AD435P0.5/AD534R39P0.6/AD633RSTP0.7/AD73210kP2.0/A821C1P2.1/A922VCC29P2.2/A102330PSENP2.3/A11241u31ALEP2.4/A1225EAP2.5/A1326P2.6/A1427P2.7/A1528R21P1.0/T2P3.0/RXD101002P3.1/TXD113P1.1/T2EXP3.2/INT0124P1.2P3.3/INT1135P1.3P3.4/T014R1D16P1.4P3.5/T1157P1.5P3.6/WR161008P1.6P3.7/RD17LED-YELLOWP1.7AT89C52VCC图 3 开关按一次后D1亮

C230pX112MhzU1C319XTAL1P0.0/AD039P0.1/AD13818P0.2/AD23730pXTAL2P0.3/AD336P0.4/AD435P0.5/AD534R39P0.6/AD633RSTP0.7/AD73210kP2.0/A821C1P2.1/A922VCC29P2.2/A102330PSENP2.3/A11241u31ALEP2.4/A1225EAP2.5/A1326P2.6/A1427P2.7/A1528R21P1.0/T2P3.0/RXD101002P3.1/TXD113P1.1/T2EXP3.2/INT0124P1.2P3.3/INT1135P1.3P3.4/T014R1D16P1.4P3.5/T1157P1.5P3.6/WR161008P1.6P3.7/RD17LED-YELLOWP1.7AT89C52VCC 5 / 62、 3、

图 4再按一次D1灭

结论:程序符合实验要求。

五、实验总结

1、中断程序中各标志位的含义、特殊单元的功能需熟记。

2、按下开关INT0出现低电平,但如果不很快释放按键,就会出现一次按键引起多次中断响应。这点在仿真中不会出现,但在实物电路中必定会出现。为解决这一矛盾,可在中断响应前加入防抖动程序。

3、注意开关应选用button而不能用switch,因为button按下后自动跳开,产生一个下降沿,引起中断响应,即按一次button产生一个下降沿和一个上升沿。而switch按下后不能自动跳开,所以需按两次才能产生同样效果(按下产生下降沿,再按一次跳开产生上升沿)。

4、EA处应接高电平,否则中断不会执行。

6 / 6

因篇幅问题不能全部显示,请点此查看更多更全内容

Top