- 1、本文档共21页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
中断技术-基本时钟和定时器
实验七、中断技术实验八、基本时钟和定时器实验报告实验七、中断技术一、实验目的1. 了解中断原理,包括对中断源、中断向量、中断类型号、中断程序以及中断相应过程的理解;2. 掌握单片机C语言中断程序设计方法。二、实验任务1. 中断相应过程的理解(1)在中断子程序的定义之前,有一条预编译指令,观察其中的中断向量即可知道中断源。如本程序中的预编译指令是“#pragma vector=PORT1_VECTOR”可知中断源是P1.0~P1.7的八个引脚(准确说应该是P1.3)。在知道中断源的情况下,通过查表可以知道中断其对应的中断类型号是3。从程序中看出中断标志位用的是Bit3,所以将P1.3与按键连接。实验现象:当操作时,LED灯一直闪烁,当按下K4(与P1.3相连)时,灯停止闪烁,蜂鸣器响三声之后灯继续闪烁。(2)port_ISR被在满足条件的时候被硬件执行,不受软件操控,所以程序中并没有调用这个函数的语句但是仍可以被执行。中断响应过程:由于在该程序中用到的是可屏蔽中断,中断相应需要满足三个条件:中断总控位、中断分控位、中断源发出请求(即中断标志位置位)。在程序中已经将中断总控位和分控位置于允许状态所以只需要中断标志位置位即可,所以当在按键的下降沿时(由P1.3作为中断源),中断标志位被置位,即P1IFGBIT3被置位,则中断子程被硬件自动运行,也就是函数port_ISR被执行。(3)当在运行完port_ISR时,如果中断标志位没有被清零则当跳出中断子程之后,由于依然满足中断相应的条件,所以中断会被继续执行,即中断将被一直运行下去。(4)在将PORT1_VECTOR改为PORT2_VECTOR之后在单片机上运行,发现按键不再能够使蜂鸣器响起,但是按键时原来闪烁的LED灯会暂停非常短暂的时间。这说明在按键时虽然程序暂时中断,但是并没有去执行中断子程里面的东西。在main函数入口处加入一断点时,按键时原来闪烁的LED灯会停止闪烁,并且程序会停止在断点处。这是由于将中断向量改为PORT2_VECTOR之后,在按下键的时候产生中断请求,但是由于PORT1的中断向量没有被预编译,所以不能够正确执行,所以中断子程不能够被执行。程序运行复位,所以程序会从最开始运行,所以在main函数的入口处加上断点时,运行程序,程序会停在断点处。(5)将原程序总中断的相关设置修改为以下:P2SEL=~BIT5; P2SEL2=~BIT5;P2OUT|=BIT5;P2REN|=BIT5;P2DIR=~BIT5;P2IES|=BIT5;P2IFG=~BIT5;P2IE|=BIT5;另外#pragma vector=PORT1_VECTOR需要修改为:#pragma vector=PORT2_VECTOR;中断子程中的清零指令修改为:P2IFG =~BIT5;在硬件连接上需要将P2.5连接至KEY6。即可实现程序的修改。2. 中断程序编程练习(1)程序设计思路当程序中没有收到中断请求时,L5灯循环闪烁,该功能可以由main函数中的循环实现,即设置某引脚为输出引脚,并控制L5,则实现L5的循环闪烁则很容易实现。要求中中断源有两个,P1.2和P1.7均可以触发中断。由于P1.2和P1.7两个引脚共享一个中断类型号,所以两个引脚的关于中断的设置相同,但是在中断子程中需要对两个中断进行判断,使得两个中断对应执行不同的指令。(2)硬件连接图(3)C语言程序#include io430.h#include in430.hvoid delay( ) //延时子函数{ unsigned int j; for (j=0;j0xffff;j++); }void blink1( ) //LED5闪烁控制子函数{ P2OUT =~BIT4; delay(); P2OUT |= BIT4; delay(); }void blink2( ) //LED2闪烁控制子函数{ for(int i=0;i2;i++) { P2OUT =~BIT1; delay(); P2OUT |= BIT1; delay(); };}void Buzz( ) //蜂鸣器控制子函数{ P2OUT =~BIT2; delay(); P2OUT|= BIT2; }int main( void ){ // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; //****输出端口设置***// P2SEL=~(BIT4+BIT1+BIT2); P2SEL2=~(BIT4+BIT1+BI
文档评论(0)