实验6实验名称基本时钟和低功耗模式Word文档下载推荐.docx
《实验6实验名称基本时钟和低功耗模式Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验6实验名称基本时钟和低功耗模式Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
新创建一个MSP430G2553项目,在给出的main.c基础上,编程输出单片机上电复位后的ACLK、和SMCLK时钟,用示波器测量其频率值,记录下来。
答:
上电复位后的ACLK时钟频率为32.77kHz
上电复位后的SMCLK时钟频率为1.04MHz
程序见程序清单中的程序2.c
思考:
1)将实验板上JP8中间的两个插针接到:
(1)32.768KH晶振侧,如图6-1;
(2)P2.6/P2.7侧,如图6-2。
测得ACLK的结果有何不同?
图6-1图6-2
接到32.768KH晶振侧时,测得结果为32.77kHz,接到P2.6/P2.7侧,测得结果为890kHz。
2)在debug下如图6-3,通过View/Register更改SystemClock模块控制寄存器值,分别置DIVA1、DIVA0=01、11;
DIVS1、DIVS0=10、11;
置LFXT1S0、LFXT1S0=00、10,记录示波器测量得到的ACLK(P1.0输出)和SMCLK(P1.4输出)的频率值,填写在表6-1、6-2、6-3中,掌握时钟模块各控制寄存器相关位的作用。
图6-3通过View/Register更改SystemClock模块控制寄存器值
表6-1DIVAxx与ACLK关系
DIVA1
DIVA0
ACLK频率值
作用
1
16.39kHz
ACLK二分频
4.0963kHz
ACLK八分频
表6-2DIVSxx与SMCLK关系
DIVS1
DIVS0
SMCLK频率值
26.6kHz
SMCLK四分频
133.0kHz
SMCLK八分频
表6-3LFXT1Sxx与ACLK关系
LFXT1S1
LFXT1S0
时钟来源
32.77kHz
外部晶振
11.762kHz
VLOCLK
3)分析上电复位后,CPU工作的时钟信号MCLK频率值是多少?
根据上电复位后寄存器的值,可以发现上电复位后MCLK频率值实际上是与SMCLK频率值相等的(时钟源均为DCO,且均为一分频),而上电复位后测得的SMCLK时钟频率为1.04MHz,故上电复位后MCLK频率值为1.04MHz。
4)(提高)置RSEL3~RSEL0=1111;
DCO2~DCO0=111;
记录当前SMCLK的频率值。
这是基本时钟模块提供的最高频率值。
SMLCK的值为20.1MHz。
3.掌握基本时钟模块的编程控制
参看附录A实验板原理图,如图6-1用跳线将JP8中的插针信号接到晶振32.768Khz侧。
编程控制基本时钟模块,设置ACLK分别为下面时钟频率,并通过P1.0输出ACLK,用示波器观察:
1)ACLK=16.384Hz;
(外部晶振二分频,约为32768Hz/2)
ACLK的频率为32.77kHz。
程序见程序清单中的程序3.1.c。
2)ACLK=VLOCLK/8;
(内部VLOCLK八分频,约为12KHz/8)
ACLK的频率为1.4243kHz。
程序见程序清单中的程序3.2.c。
可否通过对时钟模块编程在引脚P2.4上输出ACLK?
为什么?
不可以,因为引脚P2.4在硬件层面上并未与ACLK的输出引脚相连,所以无论如何对时钟模块进行编程都无法做到在引脚P2.4上输出ACLK。
4.DCO出厂校验值的频率检测
1)利用出厂校验值,编程使DCO分别为1MHz、16MHz,通过P1.4输出,并用示波器测量实际值。
答:
1MHz的实际值为960kHz,16MHz的实际值为15.9MHz。
程序见程序清单中的程序4.1.c。
2)(提高)在实验1例程test_2553.c基础上,分别编程使主系统时钟工作在
(1)MCLK=复位频率/8约100KHz;
(2)MCLK=DCO=16MHz;
两种不同MCLK频率下,观察灯的亮灭速度有何不同,掌握主系统时钟的变化对程序执行速度的影响。
答:
在MCLK=复位频率/8时,灯的亮灭速度较慢,在MCLK=DCO=16MHz时,灯的亮灭速度较快。
可见主系统时钟频率越高,程序执行的速度越快。
程序见程序清单中的程序4.2.c。
5.低功耗模式学习
程序L6_LPM.c见下,用跳线将P2.3与L4短接,将P2.4用长杜邦线与buzz短接,P1.1与K2短接,用示波器分别观察P1.0、P1.4输出的ACLK和SMCLK,了解低功耗模式的进入和退出。
1)运行程序,观察现象,并记录进入低功耗前、进入低功耗后、响应中断后、退出中断后的时钟、发光二极管和蜂鸣器状态,并做分析。
进入低功耗前:
LED灯闪亮五次,随后蜂鸣器鸣响三次,ACLK=32.77kHz,SMCLK=1.09MHz。
进入低功耗后:
LED灯不亮,蜂鸣器不响,ACLK与SMCLK均无信号。
响应中断后:
LED灯不亮,蜂鸣器鸣响三次,ACLK=32.81kHz,SMCLK=1MHz。
退出中断后:
发生以上现象的原因是在程序执行至LPM4前,程序正常执行,时钟有信号;
程序执行至LPM4后,单片机进入了LPM4,CPU、MCLK、SMCLK、DCO均禁止,故程序不再向下执行,时钟无信号;
中断发生之后单片机被唤醒,恢复活动模式,中断子程开始执行,时钟有信号;
在退出中断之后单片机又回到了LPM4,故程序不再向下执行,时钟无信号。
2)如果中断程序中有LPM4_EXIT语句,运行的结果会有什么不同?
请分析。
在退出中断之后,LED闪亮五次,蜂鸣器不响,ACLK=32.77kHz,SMCLK=1.06MHz,随后LED灯不亮,蜂鸣器不响,ACLK与SMCLK均无信号。
因为中断子程中关闭了低功耗模式,所以中断子程结束之后单片机依旧为活动模式,所以程序继续向下执行,时钟有信号。
不过由于之后程序经过循环体的循环又执行了LPM4;
语句,故单片机又回到了LPM4,故程序不再向下进行,时钟无信号。
6.(提高)利用输出的时钟信号做中断源,实现定时功能
将任务3中P1.0输出的ACLK=VLOCLK/8时钟信号,作为P1.7的中断申请信号,用导线将P1.7与P1.0相连即可,在中断函数中设置一个计数变量,计数中断函数被执行的次数,如果ACLK的频率值为1.5KHz(实验时,以实测的为准),那么中断函数每被执行1500次表示一秒时间到。
利用该定时功能,将8个发光二级管设计成一个秒表,显示秒值,每秒改变一次8个发光二级管的显示。
程序见程序清单中的程序6.1.c。
如果要每隔5秒蜂鸣器响一声,如何在任务6的基础上编程实现?
程序见程序清单中的程序6.2.c。
程序清单:
程序2.c
#include"
io430.h"
intmain(void)
{
//Stopwatchdogtimertopreventtimeoutreset
WDTCTL=WDTPW+WDTHOLD;
//P1.0输出时钟ACLK,P1.4输出时钟SMCLK
P1SEL|=BIT0+BIT4;
P1SEL2&
=~(BIT0+BIT4);
P1DIR|=BIT0+BIT4;
while
(1);
}
程序3.1.c
unsignedinti;
while((IFG1&
OFIFG)!
=0)
{
IFG1&
=~OFIFG;
for(i=0;
i<
=0xffff;
i++);
};
BCSCTL3|=LFXT1S_0;
BCSCTL1|=DIVA_1;
程序3.2.c
BCSCTL3|=LFXT1S_2;
BCSCTL1|=DIVA_3;
程序4.1.c
//
(1)使DCO为1MHz
if(CALBC1_1MHZ!
=0xff)
BCSCTL1=CALBC1_1MHZ;
DCOCTL=CALDCO_1MHZ;
}
//
(2)使DCO为16MHz
/*
if(CALBC1_16MHZ!
BCSCTL1=CALBC1_16MHZ;
DCOCTL=CALDCO_16MHZ;
*/
程序4.2.c
intmain(void)
{unsignedintj;
//定义延时变量
//关闭看门狗
//
(1)MCLK=复位频率/8
BCSCTL2|=DIVM_3;
//
(2)MCLK=DCO=16MHz
*/
P2SEL&
=~(BIT2+BIT5);
//设置引脚P2.2和P2.5为基本输入输出功能
P2SEL2&
P2OUT|=BIT2+BI