单片机外部中断实验

目录

1、概述

2、原理

3、硬件和软件设备

4、步骤

 5、结果(分析)


1、概述

        联系程序设计,并熟悉外部中断和按钮的使用;掌握单片机外部中断程序的设计方法;在外部中断0处接一个开关,作开始按钮,按下后8个LED灯依次闪烁(在中断服务程序中实验),设计一个停止按钮,按下后灯停止闪烁;

2、原理

(1)P3口是位准双向口,具有双重功能:第一功能和P1口一样,作为输入输出口,也有字节操作和位操作两种方式,每一位可定义为输入输出;第二功能可以作为外部中断输入线。

(2)外部中断的产生的条件:中断允许寄存器IE:图片

外部中断源允许中断(中断0:EX0=1,中断1:EX1=1);CPU开中断(EA=1);外部中断方式CPU发出中断申请。

(3)外部中断方式选择:控制TCON:

 ITO是选择文字则外部中断0请求(INTO)边沿触发方式或电平触发方式的控制位。前一方式IT0=1,后一方式ITO=0
  IT1是选择外部中断1请求(INT1) 为边沿触发方式或电平触发方式的控制位。前一方式IT1=1,后一方式IT1=0,本实验采用了电平触发方式。

(4)通过特殊功能位sbit对两个开关进行位定义,为后续程序做准备。(sbit是指8051片内特殊功能寄存器的可寻地址位)

3、硬件和软件设备

(1)Protues软件中器件:AT89C51芯片、开关、电阻、电容、晶振、发光二极管、直流电源、开关。

(2)Keil软件中外部中断相关程序设计。

4、步骤

(1)先画一个程序框图,有一个大体思路。

(2)对硬件进行设计:选元件、接线、调试等一系列内容。

(3)对软件进行编程:为了实现实验目标,先在程序中写出相关头文件,本实验用到了字符循环左移,所以用到了#include <intrins.h>;然后定义变量,实验用到了开关,对开关进行了位定义;因为要在外部中断0处接一个按钮,作开始按钮,按下后8个LED灯依次闪烁(在中断服务程序中实验),设计一个停止按钮,按下后灯停止闪烁;在主函数中用到了if语句实现了对按钮的控制,让八个灯依次闪烁,用中断函数得到了实现。然后编译调试生成.hex文件,程序设计:

#author:hewang
#qq:207962168


#include<reg52.h>
 #include<intrins.h>
 #define uchar unsigned char
 #define uint unsigned int
 sbit k1=P3^2;
 sbit k2=P3^3;
 char i=100;
		 
 void main()			 //主函数
{	
 if	(k1==0)
	{
     TMOD=0x01;
	 TH0=0Xee;
	 TL0=0x00;
	 P1=0xfe;
	 EA=1;
	 ET0=1;
	 IT0=0;
	TR0=1;
	 while(1)
	 {
	  ;
	 }
	}
else {P1=0Xff;}
 }

		


void time0() interrupt 1		   //T0的中断函数
{
 TH0=0xee;					   //重新赋初值
 TL0=0x00;
 i--;
  if(i<=0)
	 {
	  P1=_crol_(P1,1)	;			  //左移1位

	  i=100;			   //重置循环次数
	 }
 else if(k2==0)
	{
	 P1=0xff;
	 }
		
 }	 

(4)对Protues中电路和Keil进行联调。硬件设计:

 5、结果(分析)

(1)结果:对Protues进行仿真:当把外部中断0处的按钮按下时,8个LED灯依次闪烁。当把另一个按钮按下后灯停止闪烁。

(2)分析:A、在软件中用到了分支结构,实现了对硬件中按钮的控制,且达到了预期目标。

B、用软件中中断函数实现了对硬件中8个LED依次闪烁目标的实现。

C、由于是电平触发,所以在按下按键的时候,会有好多灯一起亮,比如低电平,在低电平这段时间里,会不断地请求中断,所以就会进入很多次中断,在加上请求中断的速度快和LED灯有一定的的余晖,所以肉眼看起来就好像灯全是亮的。

D、为了让人眼能看清楚LED灯的变换,控制8只LED灯每0.5秒闪一次,本实验用到了定时器/计数器T1、T0的编程应用。

  • 11
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值