MSP430笔记4——定时器

发布者:声慢慢最新更新时间:2022-09-26 来源: csdn关键字:MSP430  定时器  时钟源 手机看文章 扫描二维码
随时随地手机看文章

定时器Timer_A(TA)

基本寄存器

TA控制寄存器 TACTL

TASSELx:时钟源选择(TACLK00 ACLK01 SMCLK10 ~TACLK11)

IDx:第一次分频控制(ID0一分频 ID1二分频 ID2四分频 ID3八分频)

MC:工作模式控制(停止00 增01 连续10 增减11)

TACLR:定时器清零,复位TA寄存器、时钟分频和计数方向;会自动复位并置0

TAIE:定时器中断使能(0中断禁止 1中断允许)

TAIFG:中断标志位(0没有中断 1有中断挂起)


计数值存放寄存器TAR

扩展寄存器TAEX0

控制时钟源的二次分频,000-111表示1-8分频


捕获/比较寄存器 TACCR0-TACCR4(5个)

比较模式:设定计数终值

捕获模式:将捕获的TAR值存入TACCRx中


捕获比较模块

一、 两个相关寄存器

1、TACCTL0-TACCTL6寄存器

2、TAIV寄存器


1、TACCTL0-6

在这里插入图片描述

2、TAIV寄存器

存储中断代号(TACCR0优先级最高,故没有其中断标志)需要手动清零


二、比较模式(CAP=0,也称定时计时模式)

TA启动时默认为比较模式

定时器模式选择

计数模式

四种

向上

连续:即使时间固定值

加减:定时周期为2倍

定时器模式

增模式、连续模式计数到TACCR0的值时,中断标志CCIFG置位,返回0时,TAIFG中断标志位置位

工作模式

两种:捕捉/比较


三种用途:定时、产生PWM波(脉冲宽度调制)、测量频率(两个信号时间间隔)

<一>定时功能

1、查询实现定时功能


/*查询实现定时功能*/


#include  

#include "stdint.h"

/*

 * main.c

 */

int main(void)

{

uint8_t cnt = 0;            //定义一个变量

    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

/*配置DCO频率为1MHz*/

    DCOCTL = CALDCO_1MHZ;

    BCSCTL1 = CALBC1_1MHZ;

   

    /*设置P1.6为输出*/

    P1DIR |= BIT6;


    /*设置时钟源为SMCLK*/

    TA1CTL |= TASSEL_2;   // TASSEL_2为选择SMCLK

    /*TACLK默认为A0;A1要打出来*/

    /*设置工作模式为Up Mode*/

   

    TA1CTL |= MC_1;     //Up Mode模式下,16bit Timer计数器 TAR会从0递增到TACCR0,然后回到0,重复这个过程

    

    /*设置定时间隔*/

    TA1CCR0 = 49999;       //1MHz 计 50000个数,1/1MHz * 50000 20Hz 0.05s

    /*采用TACCR0 CCIFG标志位则产生+1个数即50000;TAIFG标志位则是本身*/

    /*默认比较工作模式,捕捉模式不能用来计时*/

    

    while(1)

    {

    if(TA1CTL & TAIFG)     //TAIFG为标志位;查询方式实现计数

    {

    cnt ++;             //计数器变量

    TA1CTL &= ~TAIFG;   //清除标志位

    if(cnt == 20)       //0.05s * 20 = 1s

    {

    P1OUT ^= BIT6;

    cnt = 0;

    }

    }

    }

return 0;

}


2、中断法实现定时功能


#include  

#include "stdint.h"

/*

 * main.c

 */

uint8_t flag = 0;


int main(void)

{

    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

    InitSystemClock();

    InitUART();

    /*设置P1.6为输出*/

    P1DIR |= BIT6;


    /*设置时钟源为SMCLK*/

    TA1CTL |= TASSEL_2;

    /*设置工作模式为Up Mode*/

    TA1CTL |= MC_1;

    /*设置定时间隔*/

    TA1CCR0 = 49999;// 50ms 1MHz 1/1MHz 1ns 50ms / 1ns = 50000 50000 - 1 = 49999


    /*开启TAIFG中断,相当于一个溢出中断*/

    TA1CTL |= TAIE;

    /*打开全局中断*/

    __bis_SR_register(GIE);

    while(1)

    {

    if(flag == 1)

    {

    flag = 0;

    P1OUT ^= BIT6;

    PrintTime(currenttime);

    }

    }

return 0;

}


<二>PWM波的输出

利用比较模式(CAP=0)TAR计数到TACCRx时,输出管脚由内部信号EQUx决定

输出单元

几种模式:输出/置位set/翻转goggle/复位reset(若为两个描述则 捕捉比较寄存器/最大值,可用于调整占空比,产生PWM波;若为一个描述则 捕捉比较寄存器)

捕捉比较寄存器TACCRx从对应管脚x输出


代码实例


/*输出产生PWM波*/

#include  


/*

 * main.c

 */

int main(void)

{

unsigned int cnt = 0;

    WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

/*配置DCO频率为1MHz*/

    DCOCTL = CALDCO_1MHZ;

    BCSCTL1 = CALBC1_1MHZ;

    /*初始化P1.6为输入*/

    P1DIR &= ~BIT6;


    /*设置时钟源为SMCLK*/

    TA1CTL |= TASSEL1;

    /*设置工作模式为Up&Down*/

    TA1CTL |= MC0|MC1;

    /*设置TA1CCR0为0x00FF*/

    TA1CCR0 = 0x00FF;

    /*设置TA1CCR2为0x00FF*/

    TA1CCR2 = 0x00FF;  //占空比(TACCR0 - TACCR2) / TACCR0(由于是up/down模式,看半个周期即可);频率=SMCLK/(TACCR0+1)/2 

    /*改变占空比可以改变TACCR0/TACCR2,但改变前者会影响频率,故改变后者*/

    /*设置为比较模式*/

    TA1CCTL0 &= ~CAP;

    TA1CCTL2 &= ~CAP;

    /*设置比较输出模式*/

    TA1CCTL2 |= OUTMOD_6;  //模式6为Toggle/Set

    /*设置IO复用*/

    P2SEL |= BIT5;

    P2DIR |= BIT5;

    /*到此为止输出占空比为0%*/

    while(1)

    {

    for(cnt = 0;cnt < 0x00FF;cnt ++)

    {

    TA1CCR2 = cnt;

    __delay_cycles(5000);   //值增大,占空比减小

    }

    for(cnt = 0x00FF;cnt > 0;cnt --)

    {

    TA1CCR2 = cnt;

    __delay_cycles(5000);   //值减小,占空比增加

    }

    }

return 0;

}

关键字:MSP430  定时器  时钟源 引用地址:MSP430笔记4——定时器

上一篇:MSP430笔记3——串口发送数据
下一篇:MSP430笔记1——I/O口的设置(点亮LED)

推荐阅读最新更新时间:2024-11-11 14:23

51单片机中的定时器和计数器
从上面定时器/计数器的结构图中我们可以看出,16位的定时/计数器分别由两个8位专用寄存器组成,即:T0由TH0和TL0构成;T1由TH1和TL1 构成。其访问地址依次为8AH-8DH。每个寄存器均可单独访问。这些寄存器是用于存放定时或计数初值的。此外,其内部还有一个8位的定时器方式寄存器 TMOD和一个8位的定时控制寄存器TCON。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。TMOD主要是用于选定定时器的工作方式; TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志。当定时器工作在计数方式时,外部事件通过引脚T0 (P3.4)和T1(P3.5)输入。 定时计数器的原理: 一、定
[单片机]
51单片机中的<font color='red'>定时器</font>和计数器
MSP430单片机各种寄存器总结(6)——ADC12
第六章 ADC12 6.1 REFCTL0 【注】:只用REFMSTR =1时,下面两个才有用 6.2 ADC12CTL0 【注】:必须把ADC12ENC置零才可以设置有阴影的寄存器位 6.3 ADC12CTL1 6.4 ADC12MEMx 采样结果寄存器。 当转换结果写入选定的ADC12MEMx, ADC12IFGx中对应标志位置位,若对应的ADC12IEx 和GIE 置位,将会产生中断请求;当这个寄存器的值被读取之后,IFG自动复位。 6.5 ADC12MCTLx 6.6 ADC12IE——中断使能 6.7 ADC12IFG——中断标志位 如果有转换结果放到ADC12MEMx
[单片机]
<font color='red'>MSP430</font>单片机各种寄存器总结(6)——ADC12
s3c2440定时器中断的应用
在前面的几篇文章中,每当程序需要延时时,我们是利用循环语句来实现。这种方法的延时简单,但不是很精确,就是说不能得到确切的一段时间的延时。因此当需要精确延时时,就不能采用这种方法了。一般是利用定时器来实现。在这里,我们就介绍一下s3c2440定时器的使用方法。 在讲解之前,先介绍一下s3c2440时钟系统。一般来说,MCU的主时钟源主要是外部晶振或外部时钟,而用的最多的是外部晶振。在正确情况下,系统内所使用的时钟都是外部时钟源经过一定的处理得到的。由于外部时钟源的频率一般不能满足系统所需要的高频条件,所以往往需要PLL(锁相环)进行倍频处理。在s3c2440中,有2个不同的PLL,一个是MPLL,另一个是UPLL。UPLL是给US
[单片机]
单片机定时器工作模式1
通过前面的定时器理论了解到,使用一个定时器,要经过下面四步: 1、设置定时器/计数器的工作模式TMOD(常用的是模式1:TMOD=0x01); 2、装入预置数到THx和TLx中(THx=TLx=MAX(8192/65536/256)-计数次数); 3、如果工作在中断方式,则需要开定时器/计数器的中断TCON中的标志位:TF0/TF1=0/1; 4、启动定时器/计数器:TR0/TR1=1; //1、设置定时器/计数器的工作模式TMOD(常用的是模式1:TMOD=0x01); //2、装入预置数到THx和TLx中(THx=TLx=MAX(8192/65536/256)-计数次数); //3、如果工作在中断方式,则需要开定时器
[单片机]
MSP430 精准延时之定时器 TIMERA 0.5实现LED闪烁
在经历过上一章的粗暴for()循环进行延时和简单的delay_ms(),delay_us()精准延时之后,本章介绍另一种精准延时定时器 定时器基本可以分为四种定时器 本章为大家着重介绍定时器timerA进行定时 Timer_A是一个16位计时器/计数器,有三个捕获/比较寄存器。分别为CCR0,CCR1,CCR2。 Timer_A可以支持多个捕获/比较、PWM输出和间隔计时。Timer_A还具有广泛的中断功能。在溢出条件下,可以从计数器和每个捕获/比较寄存器中生成中断 1 定时器A的时钟源和分频比 定时器A的时钟源可以是TACLK,ACLK,SMCLK,INCLK,四种时钟。使用ID_X进行1/2/4/8分频 2 定时器模式 1
[单片机]
<font color='red'>MSP430</font> 精准延时之<font color='red'>定时器</font> TIMERA 0.5实现LED闪烁
基于MSP430微控制器的电容触摸实现方案和LED PWM驱动
本应用文档介绍了使用MSP430微控制器实现电容触摸转轮和多路独立LED的PWM软件驱动技术。方案通过4路I/O 端口实现电容触摸转轮控制,I/O端口配合三极管驱动LED,实现LED呼吸、轨迹灯等效果。本方案为需要电容触摸转轮控制和LED跟踪显示等绚丽灯效的产品提供了有效的低成本方案。 简介 电容触摸技术作为一种实用、时尚的人机交互方式,已经被广泛的应用到各种电子产品,小到电灯开关,大到平板电脑、触摸桌等。随之而来的是考验产品设计者如何发挥智慧,在把产品用户界面设计得方便简洁的同时,又能呈现产品绚丽的外观,从而带来良好的用户体验。 LED显示由于界面友好,可以实时反映触摸的位置信息,在电容触摸产品设计中得到广泛应用。本设计
[单片机]
基于<font color='red'>MSP430</font>微控制器的电容触摸实现方案和LED PWM驱动
MSP430F5438学习笔记 FLAHS操作
1.前言 MSP430F5438的片内FLASH可以当做EEPROM使用,该部分FLASH称为INFO FLASH,总共有4块每块128Byte。虽然INFO FLASH容量比较少,但是多数情况还是够用的。 2.代码实现 // 时钟默认情况 // FLL时钟 FLL选择 XT1 // 辅助时钟 ACLK选择 XT1 32768Hz // 主系统时钟 MCLK选择 DCOCLKDIV 8000000Hz // 子系统时钟 SMCLK选择 DCOCLKDIV 8000000Hz // UART时钟选择 ACLK // 低频波特率产生 9600-8-N-1 #include msp430.h #incl
[单片机]
<font color='red'>MSP430</font>F5438学习笔记 FLAHS操作
USB音频的基本原理
 USB(通用串行总线)经过几十年发展,已经成为一种在个人电脑领域大量使用的标准。记忆棒、移动硬盘、鼠标和网络摄像头都通过USB连接。本文将深入分析USB音频:一种用来将PC、智能手机和平板电脑中所使用的电子音频与扬声器、麦克风或调音台等音频外设连接在一起的标准。本文将描述USB音频的工作原理,需要注意什么事项,以及对于高保真多通道输入输出,应如何使用USB音频等。 USB基本原理 USB是一种由PC(USB主机)发起一次传输,设备(例如一套USB扬声器)继而响应的通信协议。每次传输都寻址到一个特定设备,并寻址到该设备的一个特定端点。IN传输将数据发送至PC。当主机发起一次IN传输时,设备必须用主机所需的数据做出响应。OUT传输将数
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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