单片机 中断实验 实验报告

  • 格式:doc
  • 大小:46.50 KB
  • 文档页数:7

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三中断实验

一、实验内容

1.当单片机的INT0端出现负脉冲时,进入相应的中断服务程序,P1口做输出口,接8只发光二极管,通过程序控制发光二极管依次点亮。

2.选择外部中断0(P3.2)接按键INTO到地,按下出现负脉冲时,进入相应的中断服务程序,在中断服务程序中,数码管显示加1,在0-9之间循环。

二、实验目的

1、学习外部中断技术的基本使用方法。

2、学习中断处理程序的编程方法。

三、实验原理

(中断原理部分参考教材填写)

本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。要保护的地方,除了累加器ACC、标志寄存器PSW外,还要注意。一是主程序中的延时程序和中断处理程序中的延时程序不能混用,本实验中,主程序延时用的寄存器和中断延时用的寄存器应不相同。

四、实验电路

(参考学习板说明书Page11)

五、接线方式

(参考学习板说明书Page11)

P1口接发光二极管的L1—L8;单脉冲输出端“”接INI0,即接89C51的P3.2管脚。

六、参考程序

程序一、

ORG 0030H

tmpdate: DB 01H,02H,04H,08H,10H,20H,40H,80H /*定义常量做为输出*/

ORG 0000H

LJMP MAIN

ORG 0003H

LJMP INT

MAIN: SETB EA /*首先开启总中断*/

SETB EX0 /*开启外部中断0 */

SETB IT0 /* 设置成下降沿触发方式*/

MOV R7,#8

MOV DPTR,#TMPDATE

L0: SJMP L0 //等待中断

INT: DJNZ R7,L1 /*外部中断0 每按一次主板上的"INT0"键,中断响应,调用该函数,我们从P1口输出点亮发光二极管*/

MOV R7,#8

L1: MOV A,R7

MOVC A,@A+DPTR

CPL A

MOV P1,A

RETI

END

程序二、

/***************************************************************

功能:按下按键,数码管加1,用中断的方法

作者:txl

时间:2009-04

版本:V1.0

***************************************************************/

#include

#define uint unsigned int

#define uchar unsigned char

sbit wei1=P2^0;

sbit key1=P3^2;

uchar code table[]={0xC0,0xF9,0xA4,0xB0,

0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,

0xC6,0xA1,0x86,0x8E};//共阳数码管码表

//全局变量

uchar num;

//函数声明

void delay(uint z);

void led_show(uchar temp);

void main()

{

num=0;

// IT0=1; //中断以下降沿方式触发

IT0=0; //中断以低电平方式触发

EX0=1; //允许外部中断0中断

EA=1; //总中断开

wei1=0;

while(1)

{

led_show(num); //显示

}

}

/*************************************************************** 功能:外部中断0入口

***************************************************************/ void EX0_Int() interrupt 0

{

EX0 = 0; //关中断

num++;

if(num==10)

num=0;

while(!key1);//消除抖动

delay(5);

while(!key1);

// for(;!key1;); //等待放开

EX0 = 1; //开中断

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void led_show(uchar temp)

{

P0=table[temp];

delay(5);

}

扩展程序三、

#include //包含头文件

sbit led=P1^0;

#define shuma P0 //数码管数据口

sbit LED_0=P2^0; //定义数码管4个控制位sbit LED_1=P2^1;

sbit LED_2=P2^2;

sbit LED_3=P2^3;

unsigned char m;

unsigned int code ton[7];

void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4);

/*=====0-9=====A-G=====*/

unsigned char a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,