74LS148实现优先权管理
0. 74LS148简介
74LS148是优先权编码器,其引脚图如图1所示,真值表如表1所示。
图1 74LS148引脚图
表1 真值表
1. 任务
74LS148引脚GS接单片机引脚INT0,当有中断请求时,读取端口P2,查询优先权最高的中断源(闭合按键)的编号A2A1A0,并把编号在数码管上显示。不断查询,显示器显示的数字是优先权最高的中断源的编号。当P3.2引脚变为高电平,所有的中断请求都服务完毕,显示P,查询结束。
2. 电路图如图2所示。
图2 电路图
3. 实现代码
#include <reg51.h>
unsigned char status;
bit flag;
sbit P27=P2^7;
sbit P32=P3^2;
unsigned char code led_mod[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07};
void service_int0(void) interrupt 0
{
flag = 1; //标志位为1有中断
}
void main(void)
{
IT0 = 1; //中断设置
EX0 = 1;
EA = 1;
P0 = 0x40; //起始显示-
P27=0;
for(;;)
{
if(flag)
{
status = ~P2 & 0x07;//取反屏蔽高5位,获得中断源序号
switch(status)
{
case 0: P0 = led_mod[status]; break;
case 1: P0 = led_mod[status]; break;
case 2: P0 = led_mod[status]; break;
case 3: P0 = led_mod[status]; break;
case 4: P0 = led_mod[status]; break;
case 5: P0 = led_mod[status]; break;
case 6: P0 = led_mod[status]; break;
case 7: P0 = led_mod[status]; break;
}
if(P32==1) {flag=0;P0 =0x73;}
}
}
}
4. 仿真
按键K0、K3和K7都按下时,显示编号7,如图3所示。
图3 显示闭合按键K7的编号7
当按键K7断开后,显示按键K3的编号3,如图4所示。
图4 显示闭合按键K3的编号3
当按键K3断开后,显示按键K0的编号0,如图5所示。
图5 显示闭合按键K0的编号0
当没有按键闭合时,INT0为高电平,显示字符P,如图6所示。
图6 中断完成,显示字符P