#include "reg51.h"
sbit a1=P3^2;
int Xn,SUM;
void time0_initial() //定时
{
TMOD=0x01;
TH0=(65535-5000)/256; //定时器0定时5ms
TL0=(65535-5000)%256;
EA=1;
}
void interrupt_0_initial()
{
IT0=0;
EX0=1;
EA=1;
}
void main(void)
{
interrupt_0_initial();
time0_initial() ;
while(1);
}
void time0() interrupt 1
{
TH0=(65535-5000)/256; //定时器0定时5ms
TL0=(65535-5000)%256;
Xn++;
}
void interrupt_0() interrupt 0
{
do
{
ET0=1;
TR0=1;
}while(a1==0)
ET0=0;
TR0=0;
SUM=Xn;
Xn=0;
}
思路是这样的:
1 必须要有两个中断服务程序。1个为外部中断,另一个为定时器中断。
2 两个中断优先级需要外部中断程序比定时中断高。
3 xn为全局变量,可以由两个中断程序改写。