聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> 清华大学计算机硬件技术基础实验报告

清华大学计算机硬件技术基础实验报告

时间:2019-11-20 13:13:35    下载该word文档

实验名称:实验6:中断技术

姓名:袁鹏 学号:2013011780

实验班号:33 机器号:42

一.实验目的

1. 了解中断原理,包括对中断源、中断向量、中断类型号、中断程序以及中断响应过程的

理解;

2. 掌握单片机 C 语言中断程序设计方法

二.实验任务

1 中断响应过程的理解

代码:

#include "io430.h"

#include "in430.h"

void delay( ) //延时函数

{ unsigned int j;

for (j=0;j<0xffff;j++);

}

void Blink( ) //LED

{ P2OUT &=~BIT3;

delay();

P2OUT |= BIT3;

delay();

}

void Buzz( ) //蜂鸣响

{ unsigned int i;

for (i=0;i<3;i++)

{ P2OUT &=~BIT4;

delay();

P2OUT|= BIT4;

delay();

};

}

void main ( void )

{ WDTCTL = WDTPW + WDTHOLD; //关闭看门狗

//设置引脚P2.4P2.3输出,P2.3连接LEDP2.4连接蜂鸣器

P2SEL &=~(BIT3+BIT4);

P2SEL2 &=~(BIT3+BIT4);

P2OUT|=(BIT3+BIT4);

P2DIR|=(BIT3+BIT4);

//设置端口P1.1允许中断

P1SEL &= BIT1;

P1SEL2 &= BIT1;

P1OUT |=BIT1;;

P1REN |=BIT1;

P1DIR &=~BIT1;

P1IES |= BIT1;

P1IFG &=~BIT1;

P1IE |= BIT1;

_EINT(); //总中断允许

for (;;) //主循环

{ Blink(); };

}

#pragma vector=PORT1_VECTOR

__interrupt void port_ISR( )

{ Buzz();

P1IFG &=~BIT1;

}

该程序的功能是让P2.3控制的LED灯不断闪烁,当P1.1控制的开关发出中断申请时,控制P2.4控制的蜂鸣器响三声,然后继续让LED灯闪烁。

1) 从程序如何判断用的是哪个中断源?其中断类型号是多少?将实验板上某一按键与

该中断源对应的引脚相连,运行程序,操作按键,观察现象。

程序是通过判断中断标志位来确定是哪个中断源,P1.1的中断类型号是2。运程序时P2.3控制的LED4灯不断闪烁,当P1.1控制的开关发出中断申请时,控制P2.4控制的蜂鸣器响三声,然后继续让LED4灯闪烁。

2main 函数中无调用函数Buzz 的语句,函数Buzz 如何能被执行?何时会被执行?

此描述中断响应过程。

函数Buzz是在函数名为port_ISR的中断程序中,因此当P1.1发出中断申请时,函数port_ISR就会被执行,执行完毕后再返回main函数中继续执行main函数。

3) 如果port_int 函数中不清分中断标志P1IFG 的后果是什么?

如果不清分中断标志P1IFG的话就会一直相应中断,然后port_ISR函数就会一直被执行,蜂鸣器不断的响。

4) 如果L6_int.c 中的PORT1_VECTOR 改为PORT2_VECTOR 其他不变,程序执行

的后果是什么?为什么?(可在主程序入口处加一断点,运行程序,看现象,分析原因)

PORT1_VECTOR 改为PORT2_VECTOR后当按下K2键给P1.1发出中断申请后蜂鸣器不会鸣叫,因为没有正确的设置中断向量,未能将中断程序的入口地址放入FFE0+偏址的中断向量表中,因此程序不能正确的进行中断响应。

思考:当在主程序入口处加一断点时可以发现,由于已经设置了中断的端口,因此当有中断信号发出时,程序仍然会去执行中断子程,但由于中断向量没有正确设置,PC指针会跑飞,然后机器会自动复位,重新执行程序。

5)如果中断源采用的是P1.5, 按键用K7,请设计连线,修改L6_int.c 程序完成以中断

方式响应K7 的操作。

只需要将P1.1允许中断改为P1.5允许中断即可,同时将P1.5用跳线块与K7相连,具体代码如下:

#include "io430.h"

#include "in430.h"

void delay( ) //延时函数

{ unsigned int j;

for (j=0;j<0xffff;j++);

}

void Blink( ) //LED

{ P2OUT &=~BIT3;

delay();

P2OUT |= BIT3;

delay();

}

void Buzz( ) //蜂鸣响

{ unsigned int i;

for (i=0;i<3;i++)

{ P2OUT &=~BIT4;

delay();

P2OUT|= BIT4;

delay();

};

}

void main ( void )

{ WDTCTL = WDTPW + WDTHOLD; //关闭看门狗

//设置引脚P2.4P2.3输出,P2.3连接LEDP2.4连接蜂鸣器

P2SEL &=~(BIT3+BIT4);

P2SEL2 &=~(BIT3+BIT4);

P2OUT|=(BIT3+BIT4);

P2DIR|=(BIT3+BIT4);

//设置端口P1.5允许中断

P1SEL &= BIT5;

P1SEL2 &= BIT5;

P1OUT |=BIT5;;

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服