1320|0

1140

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

MSP430F5529 上手小例程 [复制链接]

*利用Timer_A比较模式的多路定时,让LED闪烁

查阅资料得知

MSP430有两类定时器:Timer_A(3个)&Timer_B(1个)
其中,每个定时器都配有不同的捕获比较寄存器:Timer0_A(5个)、Timer1_A(3个)、Timer2_A(3个)、Timer0_B(7个)。


F5529的芯片管脚图如下图所示:
在这里插入图片描述
可以看出,P1.1-P1.5即为Timer0_A的五个捕获比较寄存器。这里没用TA0CCR0,是因为它优先级最高,有一个专门的中断向量。

计数器存放计数值最大为0xFFFF,因此我们把它分为五段,由于采用连续模式,当计数器达到TA0CCR1的值,即13107时,中断标志CCIFG位置位,同时TAIFG中断标志置位。依次类推,直至溢出。

代码如下1

#include <msp430.h> 
#include <msp430f5529.h>

/**
 * main.c
 */
int main(void)
{
	WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timer
	P1DIR |= (BIT1+BIT2+BIT3+BIT4+BIT5+BIT6);
	P1OUT = 0x00;
	TA0CCTL1 = CCIE;      //捕获比较寄存器开启CCIFG位中断
	TA0CCR1 = 13107;      //植入要比较的值0xffff/5=13107
	TA0CCTL2 = CCIE;
	TA0CCR2 = 26214;
    TA0CCTL3 = CCIE;
    TA0CCR3 = 39321;
    TA0CCTL4 = CCIE;
    TA0CCR4 = 52428;

    TA0CTL |= TACLR + TAIE; //开启中断并清零
    TA0CTL |= TASSEL_1 + MC_2 + TAIE;   //选择ACLK=32.768KHZ为时钟,连续模式,开中断

    __enable_interrupt();
    while(1);

	return 0;
}

#pragma vector = TIMER0_A1_VECTOR
__interrupt void Timer(void)
{
    switch(__even_in_range(TA0IV,14))   
    /*只有在TA0IV的值为0-14的偶数的时候才执行switch内的语句,
        可以提高switch语句的效率*/
    {
    case 2:
        P1OUT=BIT6;
        break;
    case 4:
        P1OUT=BIT2;
        break;
    case 6:
        P1OUT=BIT3;
        break;
    case 8:
        P1OUT=BIT4;
        break;
    case 14:    //定时器溢出
        P1OUT=BIT5;
        break;
    default:
        break;
    }
}

不能放视频就放个图片,就是五个小彩灯轮流闪烁

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表