找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9785|回复: 5
打印 上一主题 下一主题
收起左侧

F5529定时器使用程序详解

[复制链接]
跳转到指定楼层
楼主
#include <msp430f5529.h>

void main(void)
{
   WDTCTL=WDTPW+WDTHOLD;
   P1DIR|=(BIT1+BIT2+BIT3+BIT4+BIT5);//P1.1-P1.5为输出方向
   P1OUT=0x00;        //全部拉低,初始化LED全灭
   TA0CCTL1=CCIE;     //捕获比较器1开启CCIFG位中断
   TA0CCR1=13107;        //置入要比较的数值0xff/5=13107
   TA0CCTL2=CCIE;     //捕获比较器2开启中断
   TA0CCR2=26214;        //13107*2=26214
   TA0CCTL3=CCIE;     //捕获比较器3开启中断

   TA0CCR3=39321;        //13107*3=39321
   TA0CCTL4=CCIE;     //捕获比较器4开启中断
   TA0CCR4=52428;        //13107*4=52428
   TA0CTL|=TACLR+TAIE;      //开启中断并清零
   TA0CTL|=TASSEL_1+MC_2+TAIE;//选择SCLK32.768KHZ作为时钟,选用连续模式,并开启中断
   /*这样的话,5个灯闪一遍的时间为0xffff/32768=2S*/
   __enable_interrupt();    //开启总中断
   while(1);
}
/*TIMER0_A0_VECTOR是计时器0的CCR0的中断寄存器,TIMER0_A1_VECTOR是计时器0的CCR1-CCR4、TA的寄存器*/
/*同理定时器TA1也是分为两个TIMER1_A0_VECTOR和TIMER1_A1_VECTOR*/
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TimerA(void)
{
   switch(__even_in_range(TA0IV,14))
   /* 这句话的意思是:只有在TA0IV的值是在0--14内的偶数时才会执行switch函数内的语句
            其作用是提高switch语句的效率*/
   {
      case 2:P1OUT=BIT1;break; //TACCR1 CCIFG置位,表明计数值和设定的13107相等了,也就是说计了0.4S了
      case 4:P1OUT=BIT2;break; //TACCR2 CCIFG置位,表明计了0.8S了
      case 6:P1OUT=BIT3;break; //TACCR3 CCIFG置位,表明计了1.2S了
      case 8:P1OUT=BIT4;break; //TACCR4 CCIFG置位,表明计了1.6S了
      case 14:P1OUT=BIT5;break;   //TAIFG置位,表明计了2S了
      default:break;
   }
   
}


评分

参与人数 1黑币 +5 收起 理由
daihx + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:92785 发表于 2015-10-18 00:51 | 只看该作者
谢谢了
回复

使用道具 举报

板凳
ID:113234 发表于 2016-4-10 10:50 | 只看该作者
不错谢谢了~~~~~~~~~
回复

使用道具 举报

地板
ID:134845 发表于 2016-7-24 18:38 | 只看该作者
谢谢!赞!
回复

使用道具 举报

5#
ID:219685 发表于 2017-7-14 16:28 | 只看该作者
厉害
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表