预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共63页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657例根据下图所示的数码管显示与按键电路图,编程验证两级外部中断嵌套效果。其中K0定为低级中断源,K1为高级中断源。此外,利用发光二极管Dl验证外部中断请求标志IE0在脉冲触发中断时的硬件置位与撤销过程。 解:程序分析如下: ①3只数码管可分别进行字符0~F的循环计数显示、闪灯、跑马灯,其中主函数采用无限循环计数显示,K0的中断函数是闪灯循环一圈,K1的中断函数是跑马灯循环一圈; ②由于K0的自然优先级(接引脚)高于K1(接引脚),故需要将K1的中断级别设为高优先级,即PX1=1,PX0=0(默认值); ③由于IE0的撤销过程发生在K0响应中断的瞬间,故在K0中断函数里将IE0值送P3.0输出可验证这一过程。而IE0的置位信息较难捕捉,可以利用“低级中断请求虽不能中止高级中断响应过程,但可保留中断请求信息”的原理进行,即在K1中断函数里设置输出IE0的语句。#include<reg51.h> charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//字模 charled1_mod[]={0x01,0x40,0x08,0x06,0x30};//字模 charled2_mod[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//字模 sbitD1=P3^0; voiddelay(unsignedinttime)//延时 {unsignedcharj; for(j=255;time>0;time--) for(;j>0;j--);//延时256 } key0()interrupt0//K0中断函数 {unsignedchari; D1=IE0;//IE0状态输出 for(i=0;i<=4;i++)//闪灯循环一圈 {P2=led1_mod[i]; delay(35000); } P2=0x40;//结束符“-” }Key1()interrupt2//K1中断函数 {unsignedchari; for(i=0;i<=7;i++)//跑马灯循环一圈 {Dl=IE0;//IE0状态输出 Pl=led2_mod[i]; delay(35000); } P1=0x40;//结束符“-” } voidmain() {unsignedchari; TCON=0x05;//脉冲触发方式 PX0=0;PX1=1;//INT1优先 Dl=0;P1=P2=0x40;//输出初值 IE=0x85;//开中断 while(l) {for(i=0;i<=9;i++)//字符0~9无限循环 {P0=led_mod[i]; delay(35000); } } }63