注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
tiankai001的个人空间 https://home.eeworld.com.cn/space-uid-139222.html [收藏] [复制] [分享] [RSS]
日志

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

已有 5318 次阅读2010-2-18 13:57 |个人分类:proteus for 51 mcu|

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中,启动仿真,观察程序运行结果,下图是程序最终停止时的电路状态。
发表评论 评论 (9 个评论)
回复 panankang 2010-12-13 16:51
哥!这想要证明啥子!
回复 tiankai001 2010-12-13 17:22
请仔细看一下说明噢】
回复 xin2893 2011-4-12 19:39
按键还可以用中断来写~~这打开了我的思路,只要是其他外围出发的事件,都可以用中断来写~~是吗?
回复 tiankai001 2011-4-12 21:31
xin2893: 按键还可以用中断来写~~这打开了我的思路,只要是其他外围出发的事件,都可以用中断来写~~是吗?
回复 xin2893 2011-4-12 21:40
博主,你是电子园的管理员吧,那个按键大赛的题目,我现在看到,但是用状态机写独立按键会,但是写复杂点就不知道什么了~~
回复 tiankai001 2011-4-13 08:19
xin2893: 博主,你是电子园的管理员吧,那个按键大赛的题目,我现在看到,但是用状态机写独立按键会,但是写复杂点就不知道什么了~~
呵呵,我是电子园的管理员,复杂一点的,你可以参考马潮那本AVR书,他有比较详细的描述。我在电子园也发过马潮的这篇文章,你可以参考一下。
我QQ37904969,欢迎随时交流
回复 宁静以致远 2012-5-3 12:22
counter计数负跳变次数,怎样控制P1口的LED的亮灭?
回复 tiankai001 2012-5-3 16:48
宁静以致远: counter计数负跳变次数,怎样控制P1口的LED的亮灭?
不明白你的意思,负跳变次数?
回复 st_xiaozao 2013-1-6 22:18
学习了!

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章