📄 main.c
字号:
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <./Atmel/at89x52.h>
#include "source.h"
void Enable_Int(unsigned char i);
void Disable_Int(unsigned char i);
main(void){
unsigned int i;
IE=0X40;//禁止所有中断
EX0=1;//使能外部中断0
IT0=0;//外部中断0,电平触发。
EA=1; /* 使能中断 */
Enable_Int(0);//使能扩展中断0
Enable_Int(1);//使能扩展中断1
Enable_Int(2);//使能扩展中断2
Enable_Int(3);//使能扩展中断3
Enable_Int(4);//使能扩展中断4
Enable_Int(5);//使能扩展中断5
Enable_Int(6);//使能扩展中断6
Enable_Int(7);//使能扩展中断7
while(1){
i++;
if(i==0)Enable_Int(7);//使能扩展中断7
if(i==0x7fff)Disable_Int(7);////禁止扩展中断7
}
}
void Int_Clr(unsigned char i){//清除扩展中断i
XBYTE[INT_CLR0+i]=1; //把清除i对应的地址写1
}
void Enable_Int(unsigned char i){//使能扩展中断i
unsigned char temp;
temp=XBYTE[INT_ENA]; //读出使能寄存器的状态
temp |=1<<i;//要对应的要使能比特写1
XBYTE[INT_ENA]=temp;//把temp值给使能寄存器的
}
void Disable_Int(unsigned char i){//禁止扩展中断i
unsigned char temp;
unsigned char mask;
mask=1<<i;
mask=~mask; //把要屏幕中断的比特设置0,其他比特为1
temp=XBYTE[INT_ENA];//读出使能寄存器的状态
temp &=mask;
XBYTE[INT_ENA]=temp;//把使能寄存器相应的比特设置为0
}
void int0() interrupt 0 {//C51外部中断0的中断处理函数
unsigned char stat,i;
stat=XBYTE[INT_MASKED];//读中断状态
for(i=0;i<8;i++){
if(stat&(1<<i)){//如果是扩展中断i发送中断
Int_Clr(i);//清除i的电平中断
//扩展中断对应的处理程序
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -