外部中断检查P32低电平时间
通过按下连接到P3.2引脚的按钮,来模拟外部中断的触发,即按下按钮时,按钮连接到P3.2的引脚,会导致P3.2的电平从高变为低,这将触发外部中断0
#include <reg51.h>
unsigned int counter=0,time=0,i=0;
unsigned char num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0~9
sbit P22=P2^2;// 数码管控制引脚
sbit P23=P2^3;
sbit P24=P2^4;
sbit P32=P3^2;
void main()
{
TMOD=0x01;
TH0=0x4c;// (65536-50000)/256
TL0=0x00;// (65536-50000)%256
ET0=1;// 允许定时器0中断
EX0=1;// 允许外部中断0
EA=1;
IT0=0;
PT0=1;// 定时器0为高优先级中断
while(1)
{
switch(i)
{
case 0:P0=0x00;P24=1;P23=1;P22=1;P0=num[time/10];i++;break;//先关闭数码管
case l:P0=0x00;P24=1;P23=1;P22=0;P0=num[time%10];i=0;break;//显示个位数
default:break;
}
}
}
void int_0() interrupt 0 //外部中断0
{
TR0=1;
}
void Timer_0() interrupt 1
{
TH0=0x4c;//重装初值
TL0=0x00;
counter++;
if(counter==20) //1min
{
counter=0;
time++;
}
if(P32==0)
{
TR0=0;// 低电平时,关闭定时器0
}
}
外部中断触发方式:代码中通过 IT0=1
设置外部中断0为下降沿触发。当P3.2引脚的电平从高变为低时,外部中断0会触发
中断的优先级设置:通过 PT0=1
将定时器0的中断优先级设置为高优先级
定时器工作模式选择与初值设置根据需要进行调整和适配