您的位置:首页 > 编程语言 > C语言/C++

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

2017-05-08 21:26 316 查看
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中,启动仿真,观察程序运行结果,下图是程序最终停止时的电路状态。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐