中断嵌套

来源:互联网 发布:省市区json数据 2016 编辑:程序博客网 时间:2024/05/15 06:41

问题描述:

STC89C52单片机的P1口高4位连接发光二极管,P1口低4位连接开关,P3口的P3.2连接按键开关K2,P3.3连接按键开关K1,接口电路如图5-4所示,请编程实现按键中断以及中断嵌套(外部中断1为高优先级,外部中断0为低优先级),按下按键K1产生外部中断1中断请求信号,中断响应后读取键值去驱动发光二极管点亮,按下按键K2产生外部中断0的中断请求信号,中断响应后驱动发光二极管循环点亮。请编写驱动程序。建议:编程时,为了更好观察二极管亮灭状态,加入适当的延时程序。调试运行时,先按按键K2,执行外部中断0的低级中断;再按按键K1,执行外部中断1的高级中断,观察中断嵌套。

相关电路图:
这里写图片描述

效果:当按下K2键,发光二极管循环点亮,当按下K1键一次,发一次中断申请,读取P1口低四位键值去驱动相应的发光二极管的亮灭,K2触发低级中断,K1触发高级中断。

C语言代码:

#include <reg52.h>#include <intrins.h>sbit K1=P3^3;sbit K2=P3^2;void delay(int time){    int i;    while(--time!=0)    {        for(i=0;i<125;i++);    }}//外部中断0void exint() interrupt 0{    unsigned char p1_value;    unsigned int i ,j;    //循环的嵌套,实现循环点亮二极管    for(i=0;i<255;i++)    {        p1_value=0X08;        for(j=0;j<4;j++)        {            p1_value=p1_value<<1;            P1=p1_value;            delay(1000);        }    }}//外部中断1void exint1() interrupt 2{    unsigned char  p1_value=0;    P1=0XFF;                    p1_value=P1&0X0F;               p1_value=p1_value<<4;       //读取低四位的键值    P1=p1_value;    delay(800);}void main(){    //应题目要求设置中断的开关和优先级    SP=0X50;    EA=1;    EX1=1;    EX0=1;    IT1=1;    IT0=1;    PX0=0;    PX1=1;    while(1)    {        ;    }}

最终仿真效果图:
这里写图片描述
这里写图片描述
这里写图片描述

原创粉丝点击