1、本例使用外部中断1测量从P3.0引脚输出的负跳变信号累计数,并通过P1口的8位LED验证结果。
2、实现方法,要使用外中断,必须对总中断使能位,中断允许控制寄存器IE、中断源控制寄存器TCON进行相应设置,
而对于信号数的统计可利用中断函数进行处理,每进入一次中断函数,对计数变量进行累加即可。
3、关于电压的负跳变,低电压的说明
我们常说的低电平在电路中的表现形式为:低电平,在TLL中当电压低于0.8V以下就为低电平,在CMOS中当电压低于2V以下就为低电平.
负跳变,是指当电压从高电平向低电平变化的瞬间引起的变化,是脉冲。
相应地,也可以理解正跳变和高电平的异同。
4、在keil c51中新建工程ex43,编写如下程序代码,编译并生成ex43.hex文件
#include <reg51.h> //包含头文件
sbit KEY=P3^0; //端口位定义
unsigned char counter; //全局变量,存储负跳变累计次数
//
void delay(void)
{
unsigned char i,j;
for(i = 0;i < 100;i++)
{
for(j = 0;j < 100;j++);
}
}
//主函数
void main(void)
{
unsigned char i;
EA = 1; //开总中断
EX1 = 1; //开外部中断1
IT1 = 1; //选择电平负跳变触发方式,
counter = 0; //计数变量初值为0
for(i = 0;i < 100;i++)
{
KEY = 1; //P3.0输出高电平
delay();
KEY = 0; //
delay();
}
while(1)
{
}
}
//外部中断T1中断函数
void int1(void) interrupt 2 using 0
{
counter++; //每产生一次中断,计数值加1
P1 = counter; //计数结果送P1口显示
}
5、在proteus中新建仿真文件ex43.dsn,电路原理图如下所示:
6、将ex43.hex文件载入at89c51中,启动仿真,观察程序运行结果,下图是程序最终停止时的电路状态。