外部中断和定时器中断在一起的程序怎么写

2024-12-21 18:54:27
推荐回答(2个)
回答1:

#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;

}

回答2:

思路是这样的:
1 必须要有两个中断服务程序。1个为外部中断,另一个为定时器中断。
2 两个中断优先级需要外部中断程序比定时中断高。
3 xn为全局变量,可以由两个中断程序改写。