msp430学习笔记之定时器A

2018-07-11 21:04:32编辑:什么鱼 关键字:msp430  定时器A

1 相关知识

1 定时器a图解


   

图 1  定时器A图解

2  定时器A的四种计数模式

 


1. 停止模式。

2. 增计数模式。(产生两个中断标志)

当计数到跟TACCR0一样的时候,就返回0,重新计数。当计数到TACCR0的同时产生一个中断标志CCIFG,而当计数器溢出返回零的同时又同时产生一个中断标志TAIFG。如图:

图 2 增计数模式的时序图

3.连续计数模式(产生一个中断标志)

计数器将直接计数到计数器所能计数的最大值0FFFFH之后重新返回零,再次计数。返回零的同时产生一个TAIFG中断标志。如图

图3 连续技术模式的时序图

如果相应中断位允许,每当一个定时间隔到都会产生中断请求,在连续计数模式下,须将下一事件发生的时间在当前中断程序中加到CCRx中,如图4,下次发生中断的时间等于在CCR0a发生中断时刻,CCR0 = CCR0a + Δt


图 4 连续计数模式下中断与CCRx关系



4 增减计数模式(产生两个中断标志)

当计数器计数到跟TACCR0一样的之后,然后从TACCR0开始又减少,直到为零,然后又开始增。当计数跟TACCR0一样的时候产生一个中断标志CCIFG,当减到为零的时候又产生一个中断标志TAIFG。如图:



图 5 增减计数模式时序图

相关寄存器这里就不一一介绍了,可以翻阅数据手册


2 代码实现

//本平台 msp430f149

#include

 

volatile unsigned char count = 0,flag = 0;

 

void P2_config(){

P2DIR = 0x80;

P2OUT = 0xff;

 

}

 

void select_xt2(void){

unsigned char i;

/*------选择系统主时钟为8MHz-------*/

    BCSCTL1 &= ~XT2OFF;                

do{    

    IFG1 &= ~OFIFG;                 //清除晶振失败标志

        for (i = 0xFF; i > 0; i--);     //等待8MHz晶体起振

    }while ((IFG1 & OFIFG));            

    BCSCTL2 "= SELM_2 + SELS  ;           //MCLK和SMCLK选择高频晶振

 

}

 

 

void main(){

WDTCTL = WDTPW + WDTHOLD;       // 关狗

select_xt2();   //8MHz晶振

P2_config();

CCTL0 = CCIE;                                  // CCR0 中断使能

  CCR0 = 10000;

  TACTL = TASSEL_2 + MC_2 + ID_3;                // SMCLK = 1MHz, 连续计数模式

_EINT();   // 开启全局中断

while(1){

if(count == 50){

count = 0;

P2OUT  ^= BIT7 ;

       

}

}

 

}

 

// Timer A0 中断服务函数

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A (void)

{

  count ++;

  CCR0 += 10000;                            // 下次中断时间装入CCR0中

}



3 实验结果


       led灯间隔0.5s变化一次,说明使用定时器比较模式成功


关键字:msp430  定时器A

来源: eefocus 引用地址:http://www.eeworld.com.cn/mcu/2018/ic-news071140259.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MSP430G2553默认的MCLK、SMCLK、ACLK时钟频率
下一篇:msp430学习笔记之中断处理函数

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430G2553电子时钟实验

用msp430g2553控制1602液晶显示时间,并可以通过按键设置时间,我做了正计时和倒计时两种模式/*********************************************************************msp430g2553与1602引脚连接情况* PIN1 --> 地* PIN2 --> VCC(一定要接+5V)* PIN3 -->仿真时悬空,实际电路 2K电阻-->地 (电阻可以是500-2k的,改变电阻可以改变字符显示的亮度,电阻接不好会导致什么都不显示)* PIN4 --> RS --> P1.6* PIN5 --> R/W -->
发表于 2018-07-14 20:42:53

msp430按键控制LED灯

#include "io430.h"/*       按键控制lLED灯的亮灭,有两种方法.       方法一:中断功能.                          方法二:利用 if(P4IN&BIT2)判断即可.       写代码时,尽量按照步骤来,避免因疏忽而浪费大量时间找bug.*/int main( void ){ 
发表于 2018-07-14 20:41:09

MSP430G2553 1602显示字符

代码:# include "msp430G2553.h"# define uchar unsigned char # define uint unsigned int # define LCD1602_RS_H  P2OUT|=BIT0# define LCD1602_RS_L  P2OUT&=~BIT0# define LCD1602_RW_H  P2OUT|=BIT1# define LCD1602_RW_L  P2OUT&=~BIT1# define LCD1602_EN_H  P2OUT|=BIT2# define LCD1602_EN_L
发表于 2018-07-14 20:40:26

MSP430G2553串口通讯 发送接收

数据发送代码:void UartPutchar(unsigned char c){while(!(IFG2 & UCA0TXIFG));  //待发送为空UCA0TXBUF=c;IFG2 &=~UCA0RXIFG;}只需要将那个buf变量的值改变即可接收数据#pragma vector=USCIAB0RX_VECTOR__interrupt void USCI0RX_ISR(void){while (!(IFG2&UCA0TXIFG));                // 等待发送完成//UCA0TXBUF
发表于 2018-07-14 20:33:37

MSP430按键控制串口发送数据

#include <msp430.h>//MSP430G2553  - 使用USCI_A0,Up Mode, DCO SMCLK////  介绍: 该程序利用USCI_A0来与计算机通信 通过接在P1.3口的按键来实现按一次发送一个数据//  波特率9600,数据格式8N1////  ACLK = 32768, SMCLK = 32768  MCLK =  DCO-16M////               MSP430G2553//        
发表于 2018-07-14 20:30:59

MSP430 - G2553之串口操作

#include <msp430.h> void delay1s(void) {  int t = 1000;  while (t--)    __delay_cycles(1000);    } #define UART_TXD 0x02                                  // TXD on P1.1 (Timer0_A.OUT0
发表于 2018-07-14 20:26:54

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved