1、单片机及通信接口实验报告单片机及通信接口实验报告通信09-3班实验二 MSP430 基本时钟模块及低功耗结构一、实验目的掌握 MSP430 单片机基本时钟模块的原理及使用方法二、实验原理3.1 MSP430X1XX 系列时钟模块从图中可以看出,它有 3 个时钟输入源:(1) LFXT1CLK 由低频时钟晶体产生的低频时钟源,由标准高频晶体或陶瓷 谐振器产生的高频时钟源以及外接时钟信号源。(2) XT2CLK 由标准晶体或陶瓷谐振器产生,外接 450KHz8MHz 时钟信号源。 (3) DCOCLK 片内可以数字控制的 RC 振荡器。基础时钟模块可以提供 3 种时钟信号:(1) ACLK(辅助时
2、钟) ACLK 是 LFXT1CLK 信号经 1,2,4,8 分频后得到的。 分频系数可选,有参数 DIVA 控制。ALCK 可由软件选作各个外围模块的时钟信号。(2) MCLK(系统主时钟) MCLK 可由软件选择来自 LFXT1CLK,XT2CLK,DCOCLK 三者之一,然后经 1,2,4,8 分频得到。分频系数由 DIVM 控制。MCLK 主要用于 CPU 和系统。(3) SMLK(子系统时钟) 可由软件选择来自 LFXT1CLK,XT2CLK,DCOCLK 三 者之一,然后经 1,2,4,8 分频得到。分频系数由 DIVS 控制。MCLK 主要用于 各外围模块。3.2 低速晶体振荡器
3、低速晶体振荡器在 MSP430FLASH 系列的每一个器件中都能找到。一般是指32768Hz 的时钟晶体,同时将所需两个小电容也集成在内部。这样可降低系统成 本,同时降低系统功耗。LFXT1 振荡器在发生有效的 PUC 后开始工作,一次有效 的 PUC 信号可以将 SR 寄存器(状态寄存器)的 OscOff 位复位,即允许 LFXT1 作。LFXT1CLK 信号没有用作 SMCLK 或 MCLK 信号,则可以用软件将 OscOff 位置 以禁止 LFXT1 工作。LFXT1 的结构如下图所示:F1XX 系列的 LFXT1 振荡器当使用 32768Hz 的晶体时只须连到相应的引脚,两个小电容已经
4、集成在芯 片内部。应注意:这时 LFXT1 工作在低频模式,XTS 位应复位。同时 LFXT1 振荡 器也可以外接频率较高的高速晶体振荡器或陶瓷振荡器,以工作在高速模式;这 时 XTS 位置位,同时两个引脚还要外接电容,电容大小根据晶体或振荡器的特性 来选择。3.3 高速晶体振荡器高速振荡器主要存在于 F13X,F14X,F4XX 等器件,一般称之为第二振荡器 XT2,它产生时钟信号 XT2CLK,它的工作特性与 LFXT1 振荡器工作在高频模式是 类似。下图是 TX2 振荡器的控制逻辑。如果 XT2CLK 信号没用做 MCLK、SMCLK 时 钟信号,则可以用 XT2Off 控制位关闭 XT
5、2;如果 CPUOff=0,SELM=2,则 XT2CLK 用做 MCLK 时钟;如果 SCG1=0 且 SELS=1,XT2CLK 用做 SMCLK 时钟。3.4 DCO 振荡器XT2振荡器的控制逻辑MSP430FLASH 系列的两个外部振荡器产生的时钟信号都可以经 1,2,4,8分频后用作系统主时钟 MCLK。当振荡器失效时,DCO 振荡器会自动被选做 MCLK 的时钟源;上电复位时,不对时钟模块进行任何设置,不加外部振荡器,DCO 振 荡器也会选做 MCLK 的时钟源,频率在 800K 左右。DCO 振荡器实质上是一个可数字控制的 RC 振荡器。因为 RC 振荡器的频率会 随着温度和工作
6、电压的变化而变化,所以同一型号芯片产生的频率有所不同。但 同时 DCO 频率可通过 DCO、MOD、Rsel 等控制位用软件调节,这又增加了振荡器 频率的稳定性。三、实验设备名称指标数量微机1 台JTAG 下载器(带并口下载线)1 套MSP430 系统最小板1 个万用表1 个工具1 盒四、实验内容1 用低频晶振产生辅助时钟 ACLK 并输出,用示波器观察输出波形并记录其波形 和频率。设MCLK=XT1,将ACLK由P2.0输出程序如下:#include void main(void)unsigned int i;WDTCTL = WDTPW + WDTHOLD; /停止看门狗P2DIR |=
7、0X01; /设置P2.0为输出P2SEL |= 0X01; /设置P2.0为MCLK输出BCSCTL1 &= XTS; /设置XTS为有效 低频输出doIFG1 &= OFIFG; /清除振荡器失效标志for(i = 0xFF;i0;i-); /稳定时间2 用高速晶体振荡器产生系统时钟 MCLK 并输出,用示波器观察输出波形并记录 其波形和频率。设MCLK=XT2,将MCLK由5.4输出程序如下:#include void main(void)unsigned int i;WDTCTL = WDTPW + WDTHOLD; /停止看门狗P5DIR |= 0X10; /设置P5.4为输出P5S
8、EL |= 0X10; /设置P5.4为MCLK输出BCSCTL1 &= XT2OFF; /设置XT2为有效doIFG1 &= OFIFG; /清除振荡器失效标志for(i = 0xFF;i0;i-); /稳定时间while(IFG1 & OFIFG) != 0); /如果振荡器失效标志存在则继续循环。BCSCTL2 |= SELM1; /设置MCLK = XT2for(;);3 用高速晶体振荡器产生子系统时钟 SMCLK 并输出,用示波器观察输出波形并 记录其波形和频率。设SMCLK=XT2,将MCLK由5.5输出程序如下:#include void main(void)unsigned i
9、nt i;WDTCTL = WDTPW + WDTHOLD; /停止看门狗P5DIR |= 0X11; /设置P5.5为输出P5SEL |= 0X11; /设置P5.5为SMCLK输出BCSCTL1 &= XT2OFF; /设置XT2为有效doIFG1 &= OFIFG; /清除振荡器失效标志for(i = 0xFF;i0;i-); /稳定时间while(IFG1 & OFIFG) != 0); /如果振荡器失效标志存在则继续循环。BCSCTL2 |= SELM1; /设置MCLK = XT2for(;);4 用 DCO 作为系统时钟 MCLK 并输出,用示波器观察输出波形并记录其波形和频 率
10、。固定 MOD.0MOD.4 为 0100,Rsel.0Rsel.2 为 010,观察 DCO 的改变对 DCO 振荡器产生频率的影响。并填写下表:DCO000001010011100101110111频率(kHz)5 用 DCO 作为系统时钟 MCLK 并输出,用示波器观察输出波形并记录其波形和频率。固定 DCO.0DCO.2 为 010,Rsel.0Rsel.2 为 010,观察 MOD 的改变对 DCO 振荡器产生频率的影响。并填写下表:MOD00000001001000110100010101100111频率(kHz)MOD1000100110101011110011011110111
11、1频率(kHz)6 用 DCO 作为系统时钟 MCLK 并输出,用示波器观察输出波形并记录其波形和频率。固定 DCO.0DCO.2 为 010,MOD.0MOD.3 为 0100,观察 Rsel 的改变对 DCO 振荡器产生频率的影响。并填写下表:Rsel000001010011100101110111频率(kHz)实验三 MSP430 端口和看门狗定时器实验一、实验目的1 掌握 MSP430 I/O 端口的原理和用法。2 掌握 MSP430 看门狗定时器的原理和用法。二、试验原理3.1、MSP430 I/O 端口的基本原理1端口P1和P2 这些端口都具有中断能力,且每个端口的八个引脚共用一个
12、中断向量。 P1DIR ,P2DIR P1 和 P2 端口输入/输出方向寄存器P1IN,P2IN P1 和 P2 端口输入寄存器 P1DIR,P2DIR P1 和 P2 端口输出寄存器 P1OUT,P2OUT P1 和 P2 端口中断使能寄存器 P1IES,P2IES P1 和 P2 端口中断触发沿选择寄存器 P1IFG ,P2IFG P1 和 P2 端口中断标志寄存器P1SEL ,P2SEL P1 和 P2 端口功能选择寄存器2 端口P3,P4,P5和P6这些端口没有中断能力,其余功能与 P1 和 P2 一样,能实现输入/输出功能 和外围模块功能。每个端口有 4 个寄存器供用户使用。用户可通
13、过这 4 个寄存器 对他们进行访问和控制。PnDIR Pn 端口输入/输出方向寄存器 PnIN Pn 端口输入寄存器PnOUT Pn 端口输出寄存器 PnSEL Pn 端口功能选择寄存器3.2、MSP430 看门狗定时器的基本原理主要功能是:当程序发生故障时能使受控系统重新启动。如果 WDT 超过所 规定的时间,即发生系统复位。如果系统不需要看门狗功能,也可将他当定时器 使用,当到达 WDT 所定时的时间定时器模式将产生中断请求时,能产生中断.(1)看门狗模式可通过 WDTCTL 寄存器中的 TMSEL 控制位设置 TMLEL=1,工作在看门狗模式。 看门狗的原理:看门狗定时器设置一定时时间,
14、此时间是所有用户程序执行完该程序的一个时间,设置好定时时间之后,所有用户程序必须在该时间内将看 门狗计数器的值清零,使计数器重新计数;如果 CPU 执行程序正确,则看门狗计 数器时钟能在规定的时间内被用户程序清零;而当 CPU 执行程序跑飞(PC 值指向用户程序之外),看门狗计数器得不到清零,发生溢出,导致 CPU 复位,CPU 又会重新运行用户程序。所以,使用时,以防止超过设定的定时时间,用户软件 必须周期性地在 WDTCTL 的 CNTCL 位写 1,使得看门狗计数器复位。(2)定时器模式设置 TMSEL=1,WDT 工作在定时器模式。定时时间可用软件对 WDTTCL 寄存器 的 CNTC
15、L 置位进行初始化,WDT 将按设定的周期产生中断请求,中断请求得到服 务后,中断标志将自动清除。(3)关闭看门狗模式当系统不需要 WDT 时,设置 HOLD=1,可关闭 WDT,这时看门狗计数器停止工作, 可节省功耗。三、实验设备名称指标数量微机1 台JTAG 下载器(带并口下载线)1 套MSP430 系统最小板1 个万用表1 个工具1 盒四、试验内容1 利用 P3.1 产生方波,并用 P1.7 接收 P3.1 产生的方波来产生中断。中断内容 为使 P3.3 闪烁#include void main(void)WDTCTL=WDTPW+WDTHOLD;P3OUT =0x00; /P3引脚低电
16、平P3DIR |=0xff; /P3 方向输出P1OUT=0x00;P1IES |=0x00; /上升沿触发P1IFG= 0x00; /因为P1IES设置会使中断标志置位,故清零。P1IE |=0xff; / P1模块中断允许_EINT(); /系统中断允许int i;for(;)for(i=1;i=32000;i+);P3OUT =0x02; /P3.1每隔8000个机器指令周期产生一次跳变#pragma vector = PORT1_VECTOR_interrupt void P1_Interrupt(void)if (P1IFG=0x80) /如果P1.7中断 P1IFG=0x00; /
17、 中断标志清除P3OUT = 0x08; / P3.3输出变化else P1IFG=0x00; /非p1.7中断处理2 利用看门狗的定时器功能产生一方波,周期为 0.5S,占空比为 1:1。#include Unsigned char count=0;void main(void)WDTCTL = WDT_MDLY_0_5;IE1 |= WDTIE;P1DIR |=0x01;_EINT();for(;)_BIS_SR(CPUOff);_NOP();#pragmavector = WDT_VECTOR_interrupt void watchdog_timer(void)count+;if(co
18、unt=500)P1OUT = 0x01;count=0;3 利用看门狗的看门狗功能产生一方波。分别使用 ACLK 和 SMCLK 作为看门狗的 时钟。#include Unsigned char count=0;void main(void)WDTCTL = WDT_MRST_0_5;IE1 |= WDTIE;P1DIR |=0x01;_EINT();for(;)_BIS_SR(CPUOff);_NOP();#pragmavector = WDT_VECTOR_interrupt void watchdog_timer(void)MOV #WDTPW+WDTHOLD,&WDTCTL/喂狗co
19、unt+;if(count=500)P1OUT = 0x01;count=0;实验四 MSP430 16 位定时器 A 实验一、实验目的1 掌握定时器 A 的定时器功能及 4 种工作模式2 掌握定时器 A 的捕获/比较模块功能3 掌握定时器 A 的输出单元和 8 种输出模式二、实验原理结构原理图 4.1 中,可以将 Timer_A 分解成:计数器、捕获/比较寄存器及 输出单元。其中,计数器部分完成时钟源的选择与分频、模式控制及计数等功能; 捕获/比较寄存器用于捕获事件发生或产生的时间间隔;输出单元用于产生用户 需要的输出信号。1 Timer_A 的寄存器图 4.1 Timer_A 的结构原理图
20、(1)TACTL 控制寄存器TACTL 寄存器中含有全部的 Timer_A 控制位。该寄存器在 POR 信号后全部复 位,但在 PUC 信号后不受影响。该寄存器众各位的定义如下:15109876543210未用SSEL1SSEL0ID1ID0MC1MC0未用CLRTAIETAIFG(2)TAR 16 位计数器内容执行计数的单元,是计数器的主体。可读可写,但要注意:当计数时钟不是 MCLK 时,写入应该在计数器停止时写,因为它与 CPU 时钟不同步。(3)CCTLX 捕获/比较寄存器X 为捕获/比较模块序号,在寄存器中各位名称中的 X 也一样。该寄存器在POR 信号后全部复位,但在 PUC 信号
21、后不受影响。 该寄存器的各位定义如下:15 1413 121110987 6 543210CAPTMOD10CCIS10SCSSCCICAPOUTMODXCCIEXCCIXOUTCOVCCIFGX(4)CCRX 捕获/比较寄存器在捕获/比较寄存器模块中,可读可写。在捕获方式时,硬件自动将计数器 TAR 中的数据写入该寄存器。在比较方式时,用户程序根据需要定时时间长短, 配合定时器工作方式及定时器输入信号,写入该寄存器相应的数据。(5)TAIV 中断向量寄存器 该寄存器用于确定中断请求的中断源。各位定义如下:15 54 100 0中断向量02 定时器模式Timer_A 共有 4 种工作模式,由控
22、制寄存器 TACTL 中 MC0 和 MC1 两位决定。(1)停止模式(2)增计数模式(3)连续计数模式(4)增/减计数模式3 捕获比较模块用 CCTLX 中的 CAPX 选择捕获模式或比较模式,用 CCMX1 和 CCMX0 选择捕获 条件。捕获/比较模块的结构如图 4.13 所示。图 4.13 捕获/比较模块的逻辑结构(1)捕获模式(2)比较模式4 输出单元 每个捕获/比较模块都包含一个输出单元,用于产生输出信号。每个输出单元有 8 种工作模式,可产生基于 EQUX 的多种信号。所有的输出模式如下:输出模式 0 输出模式。 输出模式 1 置位模式。输出模式 2 PWM 翻转/复位模式。 输
23、出模式 3 PWM 置位/复位模式。 输出模式 4 翻转模式。输出模式 5 复位模式。输出模式 6 PWM 翻转/复位模式。 输出模式 7 PWM 复位/置位模式。三、实验设备名称指标数量微机1 台JTAG 下载器(带并口下载线)1 套MSP430 系统最小板1 个万用表1 个工具1 盒330 欧姆电阻DIP若干细导线若干四、试验内容1 用增计数模式产生一个周期为 0.5S 的方波#include Unsigned char count=0;void main(void)WDTCTL = WDTPW + WDTHOLD; / 停止看门狗P3DIR |= 0x06; / P3.1设置为输出CCT
24、L0 = CCIE; / CCR0中断允许CCR0 = 20000;TACTL = TASSEL_2 + TACLR +MC_1; / 定时器A时钟源为SMCLK,计数器清零,增计数模式_BIS_SR(LPM0_bits + GIE); / Enter LPM0 w/ interrupt#pragma vector=TIMERA0_VECTOR_interrupt void Timer_A (void)count+;If(count=10)P3OUT = 0x02; / P3.1取反count=0;2 用连续计数模式同时产生两个周期分别为 0.1S 和 1S 的方波。#include unsi
25、gned int count=0;void main(void)WDTCTL = WDTPW + WDTHOLD; / 停止看门狗P3DIR |= 0x06; / P3.1、P3.2设置为输出。CCTL0 = CCIE; / CCR0中断允许CCR0 = 40000;TACTL = TASSEL_2 + TACLR + MC_2 + TAIE; / 定时器A时钟源为SMCLK,计数器清零,连续计数模式,溢出中断允许。_BIS_SR(LPM3_bits + GIE); #pragma vector=TIMERA0_VECTOR_interrupt void Timer_A (void)P3OUT
26、 = 0x02; / P3.1取反#pragma vector=TIMERA1_VECTOR_interrupt void Timer_A(void)switch( TAIV )case 2: break; case 4: break; case 10: count+;if(count=6)count=0;P3OUT = 0x04; /P3.2取反 break;3 用增减计数模式产生一个周期为 0.5S 的对称方波。#include unsigned int count=5;void main(void)WDTCTL = WDTPW + WDTHOLD; / 停止看门狗P3DIR |= 0x0
27、6; / P3.1、P3.2设置为输出。CCTL0 = CCIE; / CCR0中断允许CCR0 = 20000;TACTL = TASSEL_2 + TACLR + MC_3 + TAIE; / 定时器A时钟源为SMCLK,计数器清零,增减计数模式,溢出中断允许。_BIS_SR(LPM3_bits + GIE); #pragma vector=TIMERA1_VECTOR_interrupt void Timer_A(void)switch( TAIV )case 2: break; case 4: break; case 10:count+;if(count=5)count=0; P3OU
28、T = 0x04; /P3.2取反break;4 使用 P3.1 产生一个周期小于 0.1S 的方波,并使用定时器 A 的捕获功能测量其 频率。#include unsigned int lastCCR0,lastCCR1unsigned int j=0; /测得信号周期为j*(1/100K)unsigned int k=0; /测得信号占空比为:k/junsigned int lastCCR0=0;unsigned int lastCCR1=0;void main(void)WDTCTL=WDTPW+WDTHOLD; /停止看门狗TACTL =TASSEL_2+ID_3+MC_2+TACLR; /MCLK,8分频,连续模式,计数器清空CCTL0=CM_3 + CCIS_0 + SCS + CAP + CCIE; /上升沿和下降沿均捕获,异步捕获,捕获模式,捕获中断允许CCTL1=CM_1 + CCI
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1