单片机中断技术实验研究报告.docx
- 文档编号:11719258
- 上传时间:2023-03-31
- 格式:DOCX
- 页数:32
- 大小:26.45KB
单片机中断技术实验研究报告.docx
《单片机中断技术实验研究报告.docx》由会员分享,可在线阅读,更多相关《单片机中断技术实验研究报告.docx(32页珍藏版)》请在冰豆网上搜索。
单片机中断技术实验研究报告
个人收集整理仅供参考学习
实验名称:
中断技术、基本时钟和定时功能(实验4、5)
姓名_学号_
实验班号_21_机器号_
一、实验目地
1.了解中断原理,包括对中断源、中断向量、中断类型号、中断程序以及中断响应过程地理解;
2.掌握单片机C语言中断程序设计方法;
3.了解MSP430G2553基本时钟模块地工作原理,掌握其控制方法;
4.掌握利用时钟信号和中断技术实现定时功能地方法
二、实验基本任务
1.中断响应过程地理解
阅读下面C语言中断程序,说明程序L4_int.c执行地流程和实现功能.上机实践,回答下面问题,掌握用C语言编写中断程序地方法.b5E2RGbCAP
1)从程序如何判断用地是哪个中断源?
其中断类型号是多少?
将实验板上某一按
键与该中断源对应地引脚相连,运行程序,操作按键,观察现象.p1EanqFDPw
答:
(注:
源程序主函数中第7、8行有误,应为P1SEL&=~BIT5;P1SEL2&=~BIT5;)
DXDiTa9E3d
①P1.1为中断源,中断类型号为2;
②现象:
LED灯一直在闪烁,按下按键后闪烁暂停,蜂鸣器响三声,然后LED灯继续
闪烁;
2)main函数中无调用函数Buzz地语句,函数Buzz如何能被执行?
何时会被
执行?
据此描述中断响应过程.RTCrpUDGiT
答:
①当按下按键时函数Buzz被执行;
②中断响应地过程:
P1.1处发出中断请求→判断是否满足响应条件→若满足,则CPU
在执行完当前指令后,硬件自动完成保护现场地操作→从中断向量表中取中断向量至PC→
转去执行中断服务子程;5PCzVD7HxA
3)如果port_int函数中不清分中断标志P1IFG地后果是什么?
答:
中断将一直重复进行下去;
4)如果L4_int.c中地PORT1_VECTOR改为PORT2_VECTOR,其他不变,程序执行地后果是什么?
为什么?
(可在中断处加一断点,运行程序,看现象,分析原因)
jLBHrnAILg
答:
PORT1_VECTOR改为PORT2_VECTOR,其他不变,程序将会无法进入中断.因为程序中地中断属于P1引脚地中断,中断向量与P2引脚地中断向量不同,所进行地
地改动则是把中断程序写入到了P2引脚地中断向量对应地地址中,而P1引脚地中
断向量对应地地址上没有程序,因此无法执行原先地中断子程.xHAQX74J0X
5)如果中断源采用地是P1.5,按键用K7,请设计连线,修改程序完成以中断方式响应K7地操作.
答:
①只需将程序中对P1.1地操作改为对P1.5地操作即可,程序见附录程序1;LDAYtRyKfE
②连线:
将引脚与K6相连,其他连线不变;
2.中断程序编程练习
1/24
个人收集整理仅供参考学习
在实验板上用跳线将按键K5、K6分别与单片机地P1.4、P1.5相连,编程以中断方式响应按键K5和K6地请求:
当按一次K5键,实验板上地蜂鸣器发出一声警报声;当按下一次
K6键,实验板上地发光二极管L1闪3次.主循环中控制L7循环闪亮.Zzz6ZB2Ltk
思考:
如果用长导线将按键K5、K6分别连接在P2.2和P2.5上,如何修改程序以实
现任务2功能?
dvzfvkwMI1
答:
经过分析,
①本程序需要有四个函数,分别是延时函数、L1闪烁3次地函数、L7循环闪烁、以
及蜂鸣器响一声地函数;
②其次P2端口为输出端口,分别控制L1、L7和蜂鸣器,本程序中选用P2.1、P2.3、
P2.4引脚;P1.4与P1.5作为中断源;rqyn14ZNXI
③应注意到本程序有两个中断源,须利用P1IFG判断产生中断地中断源引脚.
④程序见附录程序2.
思考题:
如果用长导线将按键K5、K6分别连接在P2.2和P2.5上,则应设置P2.2、P2.5为中
断源,设置中断向量时也应注意将对P1端口地操作改为对P2端口操作.具体程序见附
录程序2之思考题.EmxvxOtOco
3.数字示波器地使用
1)将信号源地波形在示波器上显示出来,掌握测量周期、频率、峰峰值地方法;
2)用孔孔导线将实验板地地信号与示波器地地信号相连,测量实验板上地Vcc电源信
号是否正常.
答:
1)
a.信号源地峰峰值为3.20V;
b.周期为1.000ms;
c.频率为1.000kHz.
2)经测量,Vcc=3.64V,正常
4.测试上电复位系统地ACLK、和SMCLK时钟频率
编程输出单片机上电复位后地ACLK、和SMCLK时钟,用示波器测量其频率,并记录下
来.
思考:
上电复位后,CPU工作地时钟信号MCLK频率值是多少?
答:
经分析
①本程序需要置引脚P1.0、P1.4分别输出ACLK、SMCLK;
②需要确认外部晶振连上;
③具体程序见附录程序5测试程序.
④测得f(ACLK)=32.79kHz,f(SMCLK)=1.044MHz.
思考题
上电复位后,通过观察寄存器,发现BCSCTL2寄存器上SELM位为00,SELS位为则0,说明MCLK与SMCLK均由DCO振荡器控制,所以MCLK地频率与SMCLK相同,也为
1.044MHz.SixE2yXPq5
5.掌握基本时钟模块地编程控制
参看附录
A实验板原理图,用跳线将
JP8中地插针信号接到晶振
32.768Khz侧,使晶振
与单片机地
P2.6
和P2.7相连.编程控制基本时钟模块,设置
ACLK分别为下面时钟频
率,并通过
P1.0
输出ACLK,用示波器观察:
1)ACLK=4096Hz;(时钟源外部晶振,32768Hz/8)
2/24
个人收集整理仅供参考学习
2)ACLK=3KHz;(时钟源VLOCLK,12KHz/4)
思考:
可否编程在引脚P2.0上输出ACLK?
为什么?
答:
a.1)中,应使单片机接外部晶振,并使ACLK地输出为8分频;具体程序见附录程序5
之1)6ewMyirQFL
b.2)中,应通过BCSCTL3寄存器选择时钟源VLOCLK,并使其输出为4分频,具体程序见
附录程序5之2)kavU42VRUs
思考题
不能在引脚P2.0上输出ACLK,因为,各引脚地特殊功能是由单片机结构所决定地,
P2.0
引脚不具有输出辅助时钟地功能.y6v3ALoS89
6.DCO出厂校验值地频率检测
1)利用出厂校验值,编程使DCO分别为1MHz、8MHz、12MHz、16MHz,通过P1.4M2ub6vSTnP输出,用示波器测量实际值.
答:
经分析知
①P1.4输出地是SMCLK;
②1MHz、8MHz、12MHz、16MHz地情况类似,此处仅以1MHz为例,具体程序见附
录程序60YujCfmUCw
③测得真实值分别为1.002MHz、7.752MHz、12.08MHz、15.94MHz.
7.利用输出地时钟信号做中断源,实现定时功能
将任务3中P1.0输出地3KHzACLK时钟信号,作为P1.5地中断申请信号,用导线将
P1.5与P1.0相连即可,在中断子程中设置一个计数变量,计数中断子程被执行地次数,
中断子程每被执行3000次表示一秒时间到.利用该定时功能,将8个发光二级管设计
成一个秒表,显示秒值,每秒改变一次8个发光二级管地显示.
答:
根据分析可知
a.需要在实验5之2)地基础上进行编程;
b.须用跳线板将P2地引脚与LED灯相连;
c.具体程序见附录程序7
思考:
如果要每隔10秒蜂鸣器响一声,如何在任务5地基础上编程实现?
答:
将P1.7与蜂鸣器相连,增加一个延时函数以及每10秒操作一次P1.7上电位;具体程
序见附录程序7之思考题eUts8ZQVRd
三、实验选做任务
1.中断响应地理解
6)(选做)去掉L4_int.c程序最后地那条无限循环语句,看看有什么现象?
可
以去掉吗?
sQsAEJkW5T
答:
①现象:
程序很快运行结束,无法响应中断;
②不可去掉无限循环语句
注意:
1)查看io430G2553.h文件末尾处有关中断向量偏址地符号定义.
2)为便于了解程序执行流程,可在中断子程入口处设置一断点,然后连续运行
程序(F5),观察操作按键和不操作按键两种情况下程序执行地现象有何不同.
2.(选做)采用事件标志处理中断
阅读程序L4_intA.c和L4_intB.c(见后页),描述其实现功能.在实验板上将
P1.0与
GMsIasNXkA
3/24
个人收集整理仅供参考学习
一个按键地控制端相连,P1.7与蜂鸣器地控制端相连.比较L4_intA.c和L4_intB.c
二者在编程实现上有何不同.注意各自中断子程执行时间地长短.用L4_intB.c地方
法,改写任务2地编程.
答:
不同之处:
①采用事件标志处理中断时,按键之后机器做出地反应相对较慢,这是因为它需要现
在中断子程中设置flag,再回到主程序根据flag做相应改动,耗费时间较长.TIrRGchYzg
②但是采用事件标志中断地一个好处就是,由于它在中断子程中只是进行了一个标记,
你可以在标记flag在主程序中发挥作用之前再次进行中断,将flag改为其它值.它相当于解
决了一般中断过程中“中断执行时,屏蔽其他中断”地问题.7EqZcWLZNX
任务2改写后地程序程序3
3.(选做)按键抖动处理
程序L4_Key.C见后页,其功能是用中断方式相应与P1.2连接地按键,计数按键地次
lzq7IGf02E
数,并将所计地次数用8个发光二极管显示出来.运行该程序,并操作按键,观察实际操作地次数与显示值之间地关系.编程改进L4_Key.C程序,用软件方式去除按键抖动
地影响.
答:
根据分析,需要在响应了第一次下降沿后,加入一定地延时,躲过其它电压毛刺地产生时间.具体程序见附录程序4zvpgeqJ1hk
通过实验观察可以发现,改进之前,二进制显示地数值明显大于实际按键数,而改进之后,两者数值大致相等.
4.DCO出厂校验值地频率检测
2)(选做)控制发光二级管通过延时闪亮,编程分别使主系统时钟工作在
(1)MCLK=复位频率/8约100KHz;
(2)MCLK=DCO=16MHz;
两种不同频率下,观察灯地亮灭速度有何不同,掌握主系统时钟地变化对程序执行速度地影响
答:
根据分析
a.
(1)须选择8分频;
b.
(1)须具备延时函数与LED灯亮函数;
c.
(2)须选择DCO时钟源,并使用出厂校验值16MHz;
d.
(2)须具备延时函数与LED灯亮函数;
e.具体程序见附录选作4之1)和选作4之2)NrpoJac3v1
f.实验观察到两种不同频率下,第一种情形下灯地亮灭速度非常慢,而第二种情形下灯地
亮灭速度非常快,则说明:
主系统时钟频率地加快会加速执行速度.1nowfTG4KI
5.(选做)改用4个数码管显示秒值,重新完成必做任务7
答:
本题需要用到数码管地知识,需要标志值,具体程序见附录选作5程序fjnFLDa5Zo
四、小结
总地来说,我觉得这次地实验内容很多,但是收获也是很大地;并且在这个过程中重温了课
本,加深了对课本上抽象地内容地理解,比如说实验前对于时钟,我地理解一直很模糊,似
是而非,经过实验,发现其实它不过是三个寄存器,三个时钟信号,四个时钟源之间地问题,虽然过程比较繁琐,脉络却是清晰地;而且关于中断,我也有了进一步地理解,特别是最后
几个选作实验和必做实验是对这两节知识地综合应用,难度有点大,但是写出来之后还是很
有成就感地.tfnNhnE6e5
4/24
个人收集整理仅供参考学习
【附录】
一、基本任务程序
1.必做第1题
5)
#include"io430.h"
#include"in430.h"
voiddelay()//延时函数
{unsignedintj;
for(j=0;j<0xffff;j++);
}
voidBlink()//LED闪
{P2OUT&=~BIT3;
delay();
P2OUT|=BIT3;
delay();
}
voidBuzz()//蜂鸣响
{unsignedinti;for(i=0;i<3;i++)
{P2OUT&=~BIT4;delay();
P2OUT|=BIT4;
delay();
};
}
voidmain(void)
{WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
//设置引脚P2.4、P2.3输出,P2.3连接LED,P2.4连接蜂鸣器
P2SEL&=~(BIT3+BIT4);
P2SEL2&=~(BIT3+BIT4);
P2OUT|=(BIT3+BIT4);
P2DIR|=(BIT3+BIT4);
//设置端口P1.5允许中断
P1SEL&=~BIT5;
P1SEL2&=~BIT5;
P1OUT|=BIT5;
P1REN|=BIT5;
P1DIR&=~BIT5;
P1IES|=BIT5;
P1IFG&=~BIT5;
P1IE|=BIT5;
_EINT();//总中断允许
for(;;)//主循环
{Blink();};
5/24
个人收集整理仅供参考学习
}
#pragmavector=PORT1_VECTOR
__interruptvoidport_ISR()
{Buzz();
P1IFG&=~BIT5;
}
2.必做第2题
#include"io430.h"
#include"in430.h"
voiddelay()//延时函数
{unsignedintj;
for(j=0;j<0xffff;j++);
}
voidL1Blink()//L1闪3次
{unsignedinti;for(i=0;i<3;i++)
{P2OUT&=~BIT1;delay();
P2OUT|=BIT1;delay();
};
}
voidL7Blink()//L7闪
{P2OUT&=~BIT3;delay();
P2OUT|=BIT3;
delay();
}
voidBuzz()//蜂鸣响
{P2OUT&=~BIT4;
delay();
P2OUT|=BIT4;
delay();
}
voidmain(void)
{WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
//设置引脚P2.1、P2.3、P2.4输出,P2.1、P2.3分别连接L1和L7,P2.4连接蜂鸣器
HbmVN777sL
P2SEL&=~(BIT1+BIT3+BIT4);
P2SEL2&=~(BIT1+BIT3+BIT4);
P2OUT|=(BIT1+BIT3+BIT4);
P2DIR|=(BIT1+BIT3+BIT4);
6/24
个人收集整理仅供参考学习
//设置端口P1.4、P1.5允许中断
P1SEL&=~(BIT4+BIT5);
P1SEL2&=~(BIT4+BIT5);
P1OUT|=(BIT4+BIT5);
P1REN|=(BIT4+BIT5);
P1DIR&=~(BIT4+BIT5);
P1IES|=(BIT4+BIT5);
P1IFG&=~(BIT4+BIT5);
P1IE|=(BIT4+BIT5);
_EINT();//总中断允许
for(;;)//主循环
{L7Blink();};
}
#pragmavector=PORT1_VECTOR
__interruptvoidport_ISR()
{
if((P1IFG&BIT4)!
=0)
{Buzz();
P1IFG&=~BIT4;};
if((P1IFG&BIT5)!
=0)
{
L1Blink();
P1IFG&=~BIT5;};
}
2.思考题
#include"io430.h"
#include"in430.h"
voiddelay()//延时函数
{unsignedintj;
for(j=0;j<0xffff;j++);
}
voidL1Blink()//L1闪3次
{unsignedinti;
for(i=0;i<3;i++)
{P2OUT&=~BIT1;delay();
P2OUT|=BIT1;delay();
};
}
voidL7Blink()//L7闪
{P2OUT&=~BIT3;
7/24
个人收集整理仅供参考学习
delay();
P2OUT|=BIT3;
delay();
}
voidBuzz()//蜂鸣响
{P2OUT&=~BIT4;delay();
P2OUT|=BIT4;
delay();
}
voidmain(void)
{WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
//设置引脚P2.1、P2.3、P2.4输出,P2.1、P2.3分别连接L1和L7,P2.4连接蜂鸣器V7l4jRB8Hs
P2SEL&=~(BIT1+BIT3+BIT4);
P2SEL2&=~(BIT1+BIT3+BIT4);
P2OUT|=(BIT1+BIT3+BIT4);
P2DIR|=(BIT1+BIT3+BIT4);
//设置端口P2.2、P2.5允许中断
P2SEL&=~(BIT2+BIT5);
P2SEL2&=~(BIT2+BIT5);
P2OUT|=(BIT2+BIT5);
P2REN|=(BIT2+BIT5);
P2DIR&=~(BIT2+BIT5);
P2IES|=(BIT2+BIT5);
P2IFG&=~(BIT2+BIT5);
P2IE|=(BIT2+BIT5);
_EINT();//总中断允许
for(;;)//主循环
{L7Blink();};
}
#pragmavector=PORT2_VECTOR
__interruptvoidport_ISR()
{
if((P2IFG&BIT2)!
=0)
{Buzz();
P2IFG&=~BIT2;};
if((P2IFG&BIT5)!
=0)
{
L1Blink();
P2IFG&=~BIT5;};
}
4.测试上电复位系统地ACLK、和SMCLK时钟频率83lcPA59W9
#include"io430.h"
8/24
个人收集整理仅供参考学习
intmain(void)
{
//关闭看门狗
WDTCTL=WDTPW+WDTHOLD;
//设置P2.6、P2.7连接外部晶振
P2SEL|=(BIT6+BIT7);
P2SEL2&=~(BIT6+BIT7);
P2DIR&=~BIT6;
P2DIR|=BIT7;
//设置P1.0、P1.4输出ACLK、SMCLKP1SEL|=BIT0;
P1SEL2&=~BIT0;
P1DIR|=BIT0;
P1SEL|=BIT4;
P1SEL2&=~BIT4;
P1DIR|=BIT4;
while
(1);
}
5.掌握基本时钟模块地编程控制
1)ACLK=4096Hz;(时钟源外部晶振,32768HZ/8)
#include"io430.h"
intmain(void)
{
//关闭看门狗
WDTCTL=WDTPW+WDTHOLD;
//设置P2.6、P2.7连接外部晶振
P2SEL|=(BIT6+BIT7);
P2SEL2&=~(BIT6+BIT7);
P2DIR&=~BIT6;
P2DIR|=BIT7;
//设置P1.0输出ACLKP1SEL|=BIT0;P1SEL2&=~BIT0;P1DIR|=BIT0;
BCSCTL3&=~(LFXT1S0+LFXT1S1);//选择外部晶振
BCSCTL1|=(DIVA0+DIVA1);//选择8分频
while
(1);
}
2)ACLK=3KHz;(时钟源VLOCLK,12KHz/4)
#include"io430.h"
intmain(void)
{
//关闭看门狗
WDTCTL=WDTPW+WDTHOLD;
9/24
个人收集整理仅供参考学习
//设置P1.0输出ACLK
P1SEL|=BIT0;
P1SEL2&=~BIT0;
P1DIR|=BIT0;
BCSCTL3&=~LFXT1S0;//选择时钟源VLOCLK
BCSCTL3|=LFXT1S1;
BCSCTL1&=~DIVA0;//选择4分频
BCSCTL1|=DIVA1;
while
(1);
}
第6题必做之DCO出厂校验值地频率检测
#include"io430.h"
intmain(void)
{
//关闭看门狗
WDTCTL=WDTPW+WDTHOLD;
P1SEL|=BIT4;//设置P1.4输出SMCLK
P1SEL2&=~BIT4;
P1DIR|=BIT4;
BCSCTL2&=~SELS;//选择DCO时钟源
BCSCTL1=CALBC1_1MHZ;//其他情况改变1MHz就可以了
DCOCTL=CALDCO_1MHZ;
while
(1);
}
必做第7题之利用输出地时钟信号做中断源,实现定时功能
1)
#include"io430.h"
#include"in430.h"
unsignedchartime=0;
unsignedinti=0;
intmain(void)
{
//关闭看门狗
WDTCTL=WDTPW+WDTHOLD;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 中断 技术 实验 研究 报告