📄 c51_8259.c
字号:
#include<reg51.h>
#define P8259A XBYTE[0x00FE]
#define P8259B XBYTE[0x00FF]
void int_IR0();
void int_IR1();
...
void int_IR7();
void main()
{
P8259A=0x16; /*ICW1送8259*/
P8259B=0x21; /*ICW2送8259*/
EA=1; /*开所有中断*/
EX0=1; /*开INT0中断*/
IT0=1; /*令INT0为边沿触发*/
for(;;); /*等待中断*/
}
void int_8259(void) using 2 interrupt 0 /*INT0中断,使用第二组寄存器*/
{
unsigned char int_add_l;
unsigned char int_add_h;
int_add=P8259A; /*读CALL操作码,丢弃*/
int_add_l=P8259A; /*读低8位中断矢量*/
int_add_h=P8259A; /*读高8位中断矢量*/
/*因为高8位中断矢量相同,所有只要判断低8位中断矢量*/
switch(int_add_l){
case 0x00 :
int_IR0();
break;
case 0x04 :
int_IR1();
break;
...
case 0x1c:
int_IR7();
break;
default:
break;
}
}
void int_IR0()
{
.....
P8259A=0x20H; /*非指定EOI命令送8259*/
}
void int_IR1()
{
......
P8259A=0x20H;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -