51单片机-外部中断控制流水灯流向

实验目的

1.掌握中断系统的基本概念。

2.理解中断服务子程序与调用子程序的区别。

3.掌握中断应用程序的编写方法和调试技术。

实验器材

AT89C-51单片机

实验原理

1.P3^2作为外部中断0的外部中断引脚,通过程序控制高低电平的变化,当外部中断信号到来时,单片机可以通过中断服务程序检测到这些引脚的变化,从而及时做出相应的处理。

2.P2端口控制LED,通过程序控制高低电平的变化。从而控制LED的亮灭。 

实验步骤

protues:

将LED的正极通过限流电阻连接到51单片机的P2端口的各个引脚上。

将LED的负极接地。

将按键连接到P3^2引脚,作为外部中断0的触发源。

Keil:

初始化P2端口和P3^2引脚。

在main函数的while循环中编写流水灯程序,再编写外部中断0的中断服务程序, 当中断触发时执行中断服务程序,从而来控制流水灯的流向。

开发板:

安装驱动,把单片机通过USB连接到电脑上。检查单片机是否完好,功能是否正常。

安装PZ-ISP,编译程序,使用PZ-ISP把程序拷到单片机开发板上。

实验代码

/****************************************************************
**********************
实验现象:下载程序后,操作 K3 按键改变流水灯流向。
1,单片机-->LED&交通灯模块
P2-->LED
2,单片机-->独立按键模块
P3^2-->K3
*****************************************************************
**********************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k3=P3^2; //定义按键 K3
u8 count=0; //用于计数
u8 state=0;

/*
*
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1 时,大约延时 10us
*
*/
void delay(u16 i)
{
while(i--);
}

void Int0Init()
{
//设置 INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开 INT0 的中断允许。
EA=1;//打开总中断
}

void main()
{
  u8 i;
  Int0Init(); // 设置外部中断 0
  while(1)
	{
		if(state==0)
		{
			 for(i=0;i<8;++i)
	     {
		     P2=~(128>>i);
		     delay(10000);	
	     }
		}
		else
		{
		   	for(i=0;i<8;++i)
	      {
		      P2=~(1<

实验结果

成功实现按键K3按下后,流水灯能够不断地从左向右流动,再按下时,实现从右向左不断流动。在原有功能基础上进行了完善和改进,不仅实现了原有的实验要求,还在其基础上加上了流动的效果。

实验总结

1.在实验编写程序时,学会了通过添加调试信息和逐步调试来找出逻辑错误并修正。

2.通过实验,学会了如何编写外部中断服务子程序和使用外部中断0来控制LED灯的流向,加深了对单片机外部中断机制的理解。

3.在编写和调试中断服务程序时,学会了如何编写高效、简洁的代码,提高了单片机编程能力。

你可能感兴趣的:(51单片机,单片机,嵌入式硬件,51单片机)