基于proteus的51单片机仿真实例五十五、外部中断1演示实例

来源:互联网 发布:php设置session有效期 编辑:程序博客网 时间:2024/06/15 23:02
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中,启动仿真,观察程序运行结果,下图是程序最终停止时的电路状态。

0 0
原创粉丝点击