分数给的太少了。我只能给你提供一个思路,然后你自已写程序:
int0和int1分别对应单片机两个不同的引脚,你要先在单片机复位时在特殊功能寄存器中来配置这两个引脚的功能,int0和int1的中断都分别有两个功能,一个是计数器工作方式,一个是外部中断工作方式。
你的这个要求是不能用int0和int1两个引脚的计数器功能的,你只能用外部中断功能。
然后定义好int0和int1分别在中断时的跳转地址,在程序进入中断之后,分别在不同的中断程序中对一个寄存器表示的计数器进行加1或者减1 *** 作。
一定记得在处理中断的时候,要把中断使能的寄存器标置位关掉,以避免中断重复执行和错误。
定义一个全局变量(T0_count),用于记录中断次数,每中断一次加一,达到设定的次数(INT_times)后,关闭中断,以定时器T0为例,参考程序如下:
#include <REG51H>
#define INT_times 10 //中断次数(10次)
unsigned char T0_count ; //T0中断次数计数
void ini(void); //初始化程序
//主程序
main()
{
ini();
while(1);
}
//初始化程序
void ini(void)
{
TMOD=0x01;
TH0=0xb1;
TL0=0xe0;
EA=1;
ET0=1;
TR0=1;
}
//T0中断程序
void t0_int(void) interrupt 1
{
if(++T0_count>INT_times) ET0=0; //中断次数达到要求的次数后,关闭T0中断
TMOD=0x01;
TH0=0xb1;
TL0=0xe0;
}
以上就是关于如何用外部中断INT0实现计数功能全部的内容,包括:如何用外部中断INT0实现计数功能、怎么设置单片机中断执行的次数、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)