资源描述:
《计硬基础实验报告3》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验名称:中断技术、基本时钟和低功耗模式(实验5、实验6)姓名:学号:实验目的1.了解屮断原理,包括对屮断源、中断向量、中断类型号、屮断程序以及中断响应过程的理解;2.掌握单片机C语言中断程序设计方法;3.了解MSP430Gxxx基本时钟模块的工作原理,掌握其控制方法;4.掌握利用吋钟信号和中断技术实现定吋功能的方法;5.掌握低功耗模式控制方法。实验基本任务实验5中断技术:1.中断响应过程的理解阅读下面C语言中断程序L5_int.C,说明程序执行的流程和实现功能。上机实践,回答下面问题,掌握用C语言编写中断程序的方法。程序L5_int
2、如下:tfinclude"io430.h"#include"in430.h"voiddelay()//延吋函数{unsignedintj;for(j二0;j<0xffff;j++);}voidBlink()//LED闪{P2OUT&="BIT3;delayO;P2OUT
3、=BIT3;delay();}voidBuzz()//蜂鸣响{unsignedinti;for(i=0;i<3;i++){P2OUT&二'B1T4;delayO;P2OUT
4、=BIT4;delayO;};voidmain(void){WDTCTL二WDTPW+WDTH
5、OLD;//关闭看门狗//设置引脚P2.4、P2.3输出,P2.3连接LED,P2.4连接蜂鸣器P2SEL&=~(BIT3+BIT4);P2SEL2&=~(BIT3+BIT4);P2OUT
6、二(BIT3+BIT4);P2DIR
7、=(BIT3+BIT4);〃设置端口Pl.5允许中断P1SEL&二BIT5;P1SEL2&=BIT5;P1OUT
8、二BIT5;P1REN
9、二BIT5;〜一P1DIR&二BIT5;P1IES
10、=BIT5;P1TFG&="BTT5;P1IE
11、=BIT5;_E1NT();//总中断允许for(;;)//主循环{Bli
12、nkO;};}#pra.gmavector二PORT1VECTOR_interruptvoidport_ISR(){BuzzO;P1IFG&「BIT5;1)从程序如何判断用的是哪个中断源?其中断类型号是多少?将实验板上某一按键与该中断源对应的引脚相连,运行程序,操作按键,观察现象。答:程序是通过判断中断标志位来确定是哪个中断源,P1.5为中断源,中断类型号是2;现象:运行程序时P2.3控制的LED4灯不断闪烁,当P1.5控制的开关发出中断申请时即按下按键后闪烁暂停,控制P2.4连接的蜂鸣器响3声,然后继续LED4灯闪烁。2)main函
13、数中无调用函数Buzz的语句函数Buzz如何能被执行?何时会被执行?据此描述中断响应过程。答:函数Buzz是在函数名为port.ISR的中断程序中,因此当P1.5发出中断申请吋即当按下按键时,函数port_ISR就会被执行,执行完毕后再返冋main函数中继续执行main函数。中断响应的过程:P1.5处发出屮断请求一判断是否满足响应条件一若满足,则CPU在执行完当前指令后,硬件口动完成保护现场的操作"从中断向量表中取中断向量至PC-转去执行屮断服务子程序;3)如果port_int函数中不清分中断标志P1IFG的后果是什么?答:如果不清分
14、中断标志P1IFG的话就会一直响应中断,然后port_ISR函数就会一直被执行,蜂鸣器不断的响。4)如果L5_int.c中的P0RT1.VECT0R改为P0RT2_VECT0R,其他不变,程序执行的后果是什么?为什么?(可在main函数入口处加一断点,运行程序,看现象,分析原因)答:PORT1_VECTOR改为P0RT2VECTOR,其他不变,程序将会无法进入屮断。因为程序屮的中断屈于P1引脚的中断,中断向量与P2引脚的中断向量不同,所进行的改动则是把中断程序写入到了P2引脚的中断向量对应的地址中,而P1引脚的中断向量対应的地址上没有
15、程序,因此无法执行原先的中断子程。当在主程序入口处加一断点时可以发现,由于已经设置了中断的端口,因此当有中断信号发出时,程序仍然会去执行屮断子程,但由于屮断向量没有正确设置,PC指针会跑匕然后机器会口动复位,重新执行程序。5)如果中断源采用的是P2.1,按键用K7,请设计连线,修改L5_int.c程序完成以中断方式响应K7的操作。答:将P2.1引脚连线与K7相连,其他连线不变,连线图如下:修改后的程序如下:^include"i()430.h"#include"in430.h"voiddelay()//延时函数{unsignedintj
16、;for(j二0;j〈Oxffff;j++);voidBlink()//LED闪{P2OUT&=~BIT3;delayO;P2OUT
17、=BIT3;delayO;}voidBuzz()//蜂鸣响{unsignedinti;