2024年5月30日发(作者:)

微机原理实验

实验四 定时中断的设计与应用

一、实验目的

1. 了解 MSP430 系列定时器 Timer_A 模块结构和功能;

2. 掌握定时器 Timer_A 的工作原理和寄存器配置方法;

3. 熟练掌握定时器 Timer_A 不同工作模式下的典型应用;

4. 熟练掌握端口 P1 和 P2 复用功能应用;

5. 熟练掌握定时器 Timer_A 定时中断功能的设计和应用。

二、实验内容

1. ※● 为TA0配置时钟源及工作模式,控制LED1指示灯的定时亮灭,中间间隔1秒钟。

要求:TA0定时器分别配置工作在增计数模式和增/减计数模式下,采用ACLK作为其计数

参考时钟,并启用TA0CCR0计数中断实现硬件定时中断。

(1)流程图

(以增计数模式为例)

(2) 源代码

/***增计数模式***/

#include

void main()

{

WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器

P1DIR |= BIT0; //设置P1.0输出

P1OUT&=~BIT0; //初始化P1.0

TA0CCR0 = 32768; // 定义中断计数周期1s,时钟频率为

32.768MHZ,32768 / 32768 = 1s

TA0CCTL0 = CCIE; // TA0CCR0捕获/比较中断寄存器中断

使能

TA0CTL = TASSEL_1 + MC_1 + TACLR; // TASSEL_1,ACLK时钟源 MC_1,增

计数模式

__bis_SR_register (LPM0_bits + GIE); // 进入LPM0低功耗模式,开启总

中断

}

//定时器中断

#pragma vector = TIMER0_A0_VECTOR

__interrupt void Timer_A(void) // 定时器中断触发,P1输出口异或,电平翻转

{

P1OUT ^= 0x01;

}

/*******增减计数模式*******/

#include

void main()

{

WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器

P1DIR |= BIT0; //设置P1.0输出

P1OUT&=~BIT0; //初始化P1.0

TA0CCR0 = 16384; // 定义中断计数周期1s

TA0CCTL0 = CCIE; // TA0CCR0捕获/比较中断寄存器中断

使能

TA0CTL = TASSEL_1 + MC_3 + TACLR; // TASSEL_1,ACLK时钟源 MC_1,增

减计数模式