MSP430学习笔记3----定时器学习

发布者:zcyzwj最新更新时间:2020-02-09 来源: eefocus关键字:MSP430  学习笔记  定时器 手机看文章 扫描二维码
随时随地手机看文章

先给出框图

随便从百度文库上找了个定时器程序,分析下。


 1 #include

 2 void main (void)

 3 {

 4     WDTCTL = WDTPW + WDTHOLD;

 5 

 6 

 7     TA1CTL|=TASSEL_2+TACLR+MC_3+ID_3;//采取内部时钟源1.04M,八分频,增减计数模式

 8     TA1CCTL0=CCIE;//启用定时器中断

 9     TA1CCR0=65535;//计数1S

10     P1DIR|=BIT0;

11     _EINT();

12     //LPM4;

13     while(1);

14 }

15 #pragma vector=TIMER1_A0_VECTOR

16 __interrupt void ta10_isr(void)

17 {

18     P1OUT^=BIT0;

19 }

View Code

测试通过,这个程序可以是LED1按2秒的频率闪烁(1秒亮,一秒暗)下面分析下:


第1句:WDTCTL = WDTPW + WDTHOLD;


这一句有点不太懂了,明明是定时器,怎么把看门狗定时器给停止了呢?


第2句:TA1CTL |= TASSEL_2+TACLR+MC_3+ID_3;


后面的解释:采取内部时钟源1.04M,八分频,增减计数模式。


先分析程序句,去头文件里找各自的定义:


1 SFR_16BIT(TA1CTL);                            /* Timer1_A3 Control */

 1 #define MC_0                   (0*0x10u)      /* Timer A mode control: 0 - Stop */

 2 #define MC_1                   (1*0x10u)      /* Timer A mode control: 1 - Up to CCR0 */

 3 #define MC_2                   (2*0x10u)      /* Timer A mode control: 2 - Continous up */

 4 #define MC_3                   (3*0x10u)      /* Timer A mode control: 3 - Up/Down */

 5 #define ID_0                   (0*0x40u)      /* Timer A input divider: 0 - /1 */

 6 #define ID_1                   (1*0x40u)      /* Timer A input divider: 1 - /2 */

 7 #define ID_2                   (2*0x40u)      /* Timer A input divider: 2 - /4 */

 8 #define ID_3                   (3*0x40u)      /* Timer A input divider: 3 - /8 */

 9 #define TASSEL_0               (0*0x100u)     /* Timer A clock source select: 0 - TACLK */

10 #define TASSEL_1               (1*0x100u)     /* Timer A clock source select: 1 - ACLK  */

11 #define TASSEL_2               (2*0x100u)     /* Timer A clock source select: 2 - SMCLK */

12 #define TASSEL_3               (3*0x100u)     /* Timer A clock source select: 3 - INCLK */

第1句话表示了在特殊功能寄存器里找16个位置给Timer1_A3 Control;后面12句话定义了各个宏,实际上就是用前面的标示符表示后面的数,没别的意思。


从数据手册上截取:

数据手册对TACTL的结构有说明:

后面对各个有详细的说明,这里只说明遇到的:


(1)TASSELx:   (Timer_A Source select,A计时器的激励源选择)


TASSEL_0:  00  代表着 TACLK,外部时钟单元


TASSEL_1:  01  代表着 ACLK ,Auxiliary clock ,辅助时钟单元,可做2、4或者8分频。


TASSEL_2:  10  代表着 SMCLK,Sub-main clock,子时钟单元,也可做2、4或者8分频。


TASSEL_3:  11  代表着 INCLK ,外部时钟单元


(2)IDx: 表示分频的个数


ID_0 ID_1 ID_2 ID_3 

1分频,也就是不分 2分频 4分频 8分频

(3)MCx表示模式


百度文库找个图:

嘿嘿,这个图就是整个的定时器结构图和计数模式了,虽然有点复杂,但对于老爷们来说,这点事不算啥。


(4)TACLR:Timer A clear


第3句:TA1CCTL0=CCIE;


后面给出的解释是:启用定时器中断。


从头文件里获取


SFR_16BIT(TA1CCTL0); 

#define CCIE                   (0x0010)       /* Capture/compare interrupt enable */

 

如果TA1CCTL0=CCIE,实际上在置CCIE位为1的同时,把其他位置0,


第4句:P1DIR|=BIT0;


BIT0在头文件里这么定义的,并不是0的意思:


1 #define BIT0                   (0x0001)

2 #define BIT1                   (0x0002)

3 #define BIT2                   (0x0004)

4 #define BIT3                   (0x0008)

所以这句话的意思是把P1.0 的方向设为输出。


第5句:_EINT();


enable interuption  打开全局中断。


相反的,_DINT(); disable interruption关闭全局中断。


第6句:#pragma vector=TIMER1_A0_VECTOR


__interrupt void ta10_isr(void)


用关键字来__interrupt来定义一个中断函数。注意前面的下划线是两个,一个会出错的。


用#pragma vector来提供中断函数的入口地址。

关键字:MSP430  学习笔记  定时器 引用地址:MSP430学习笔记3----定时器学习

上一篇:msp430学习笔记之时钟
下一篇:MSP430定时器介绍

推荐阅读最新更新时间:2024-11-19 13:53

51单片机入门 - 定时器中断应用实例
定时器中断应用实例 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 设计要求: 每秒点亮P1.0口的发光二极管一次,然后熄灭,使发光二极管形成闪烁效果 实现思路: 通过定时/计数器,每秒触发一次P1.0取反 涉及到的功能模块:定时器,中断,LED操作 定时器装填: 需要计数每秒的话,计数921600时溢出即可,在四种方式定时方式中,最大的计数范围是方式2:6553
[单片机]
51单片机入门 - <font color='red'>定时器</font>中断应用实例
51定时器初始化步骤
定时器初始化需要六步: void TimerInit() { TMOD = 0X01; TH0 = (65536 - X) /256;//(65536-X)为定时器初值,如定时10ms,则X=1000 TL0 = (65536 - X)%256; EA = 1; ET0 = 1; TR0 = 1; } 中断函数: void Timer0 interrupt 1 { TH0 = (65536-X)/256; TL0 = (65536-X)%256; num++; if(num 100) num = 1; } /////////////////////////////////////////////////////////////
[单片机]
采用TU-30 GPS模块和MSP430系列单片机实现便携式导航系统的设计
1 GPS 系统简介 GPS是Global Posi ti oning Sys te m 的缩写,即全球定位系统。其目的是在全球范围内对地面和空中目标进行准确定位和监测。随着全球性空间定位信息应用的日益广泛,GPS提供的全时域、全天候、高精度定位服务将给空间技术、地球物理、大地测绘、遥感技术、交通调度、军事作战以及人们的日常生活带来巨大的变化和深远的影响。 目前的民用GPS设备包括 测量 型和导航型。其中测量型产品的精度可达到米级甚至毫米级,但至少需要两台(套)才能达到设计精度要求,而且其内部结构复杂,单机成本一般在几万到几十万,适合专业高精度测量环境使用;导航型产品,由于其使用者对精度要求不高,一般为几十米,因此机器
[汽车电子]
采用TU-30 GPS模块和<font color='red'>MSP430</font>系列单片机实现便携式导航系统的设计
基于MSP430的SPI驱动编写之用MSP430驱动AFE4400
  平常工作中,如果使用MSP430作为主控芯片,经常会遇到需要编写SPI 或 I2C 驱动,来读取和控制外设(比如LCD屏幕,一些传感器)的情况。为了减少重复性工作,本文以具体实例来总结SPI驱动编写的详细步骤(用MSP430FR6989来驱动集成模拟前端AFE4400):   单片机SPI引脚设置   SPI读写时序设置   寄存器写入   写在最后   单片机SPI引脚设置   一般SPI有3线和4线之分,区别在于是否带片选端——STE引脚,4个引脚功能说明:   UCxS0MI:主模式数据输入,从模式下数据输出;   UCxSIMO:主模式数据输出,从模式下数据输入;   UCxCLK:USCI SPI的时钟;   UCx
[单片机]
基于<font color='red'>MSP430</font>的SPI驱动编写之用<font color='red'>MSP430</font>驱动AFE4400
STM32学习笔记之ADC
一、基础知识 1. 18个通道,可测16个外部和2个内部信号源,可设置成单侧、连续、扫描、间断模式执行 2. 12位精度 3. 扫描模式,通道0到通道n的自动转化 4. 自校准 5. 按通道配置采样时间 6. 间断模式? 7. 双ADC模式? 8. 供电要求2.4~3.6V 9. 输入范围0~3.6V 二、功能描述 1. 通道选择: STM32的每个ADC模块通过内部的模拟多路开关,可以切换到不同的输入通道并进行转换。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。 有2种
[单片机]
MSP430F5529 多通道ADC定时器触发+DMA传输
竞赛之前学习了一下从没有使用过的MSP430单片机,使用的是MSP430F5529的demo板,这块板子应该是MSP430中比较流行的一块了。使用这块板子实现了一个双通道ADC的定时器触发DMA传输,这里记录一下给别人一点参考,同时也为以后需要用到的时候提供笔记。废话不多说直接上源码,代码如下。 #include msp430.h #include stdint.h int data_buf0 ; int data_buf1 ; /** * main.c */ int main(void) { unsigned int i; WDTCTL = WDTPW | WDTHOLD; // stop watchdog
[单片机]
MSP430F5529 多通道ADC<font color='red'>定时器</font>触发+DMA传输
STM32学习笔记之SPI_DMA寄存器级操作
一、实验目标 学会配置STM32的SPI寄存器和DMA寄存器,实现STM32的SPI1与SPI2通信功能,每次发送一字节数据,并可多次发送,如果接收的数据正确,则点亮LED灯。 二、实验目的 加入DMA的SPI通信相对于普通SPI通信有什么好处?ST给SPI加了DMA功能出于什么目的?我觉得这是很重要的一个问题,一直边学习边想。以下是我的看法: 减少CPU负荷?我想这应该是DMA最主要的功能,可是对于SPI通信来说,其实大部分时候我们需要根据发送的指令- 目标器件的应答来决定下一个指令,所以此时CPU还是需要一直等待每次通信的结束。而且像SD卡的操作,是一个顺序流的指令操作过程,用中断也不容易控制。那到底加入了DMA有什么
[单片机]
STM32<font color='red'>学习</font><font color='red'>笔记</font>之SPI_DMA寄存器级操作
51单片机实验10:定时器中断
目的:通过定时器中断控制延时,使第一盏led的状态反转 开发板muc与led模块电路图如下: 关于定时器和计数器的要点请参考:https://blog.csdn.net/cax1165/article/details/86659302 关于中断的要点请参考:https://blog.csdn.net/cax1165/article/details/86633086 #include reg52.h #define uc unsigned char sbit led=P2^0; void timeint0() { TMOD=0X01;//工作方式 TH0=0XFC;//定时1ms TL0=0X18;//定时
[单片机]
51单片机实验10:<font color='red'>定时器</font>中断
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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