LaunchPad-MSP430入门系列4-定时器模块(定时、计数、捕获)
msp430定时器部分
case 4:break;
case 10:P1OUT^=BIT0;break;
}
}
ห้องสมุดไป่ตู้
输出模式4主要是翻转:在TAR=CCRX的时候发生翻转。
输出模式主要是复位:在TAR=CCRX时发生复位,只有其他模式到来的时候才能变换。
输出模式6主要是PWM翻转和置位:在TAR=CCR0的时候,发生PWM翻转,在TAR=CCR0的时候,发生置位。
输出模式7主要是PWM复位和置位:在TAR=CCRX的时候,发生PWM复位,在TAR=CCR0的时候,发生复位。
void main()
{
WDTCTL=WDTPW+WDTHOLD;
P6DIR|=BIT0;
CCTL0=CCIE;
CCR0=20000;
TACTL=TASSEL_2+MC_2;
_BIS_SR(GIE);
while(1);
例如:增计数模式下,使用定时器中断使接口发生翻转:
#include<msp430f149.h>
void main()
{
WDTCTL=WDTPW+WDTHOLD;
P6DIR|=BIT0;
CCTL0=CCIE;
CCR0=20000-1;
TACTL=TASSEL_2+MC_1;
定时器的工作模式:
定时器的工作模式位由寄存器TACTL中的MC1和MC0两位控制。
1.停止模式:
定时器暂停计数,就是说当暂停结束后,重新开始计数的时候,计数的开始位是从暂停时候的数开始的。如果想重新计数就得对TACTL控制寄存器中的CLR位置位。
msp430的定时器
对于学习新的单片机来说,就我个人意见在知道基本功能后应该先掌握定时器的用法,可以能帮助你很快的掌握单片机的用法并尽快能进行单片机的应用,所以对于430我也同样先掌握定时器的用法。
msp430单片机一共有5种类型的定时器,看门狗定时器(WDT)、基本定时器(Basic Timer1)、8位定时器/计数器(8-bit Timer/Counter)、定时器A(Timer_A)和定时器B(Timer_B)。
但是这些模块不是所有msp430型号都具有的功能。
1、看门狗定时器(WDT)学过电子的人可能都知道,看门狗的主要功能就是当程序发生故障时能使受控系统重新启动。
msp430中它是一个16位的定时器,有看门狗和定时器两种模式。
2、基本定时器(Basic Timer1)基本定时器是msp430x3xx和msp430F4xx系列器件中的模块,通常向其他外围提供低频控制信号。
它可以只两个8位定时器,也可以是一个16位定时器。
3、8位定时器/计数器(8-bit Timer/Counter)如其名字所示,它是8位的定时器,主要应用在支持串行通信或数据交换,脉冲计数或累加以及定时器使用。
4、16位定时器A和B定时器A在所有msp430系列单片机中都有,而定时器B在msp430f13x/14x和msp430f43x/44x等器件中出现,基本的结构和定时器A是相同的,由于本人最先熟悉并应用的是定时器A所以在这里就主要谈一下自己对定时器A的了解和应用。
定时器A是16位定时器,有4种工作模式,时钟源可选,一般都会有3个可配置输入端的比较/捕获寄存器。
并且有8种输出模式。
通过8种输出模式很容易实现PWM波。
我先给出我的一个应用程序,然后通过程序来书名定时器A的基本用法。
程序如下:void init_TimerA ( void ){CCTL0 = CCIE; // 开启比较器0中断CCR0 = 32768; // 1S秒的定时CCTL1 = CCIE; // 开启比较器1中断CCR1 = 100; // 3.66mS显示延迟TACTL = TASSEL_1 + MC_1; // 开启定时器}#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A0(void){time_flag = 1; // 时间变动标志if(time_stop == 1) // 设置模式标志time[0] ++; // 秒加1start_ADC12(); // 开启AD}#pragma vector = TIMERA1_VECTOR__interrupt void Timer_A1 ( void ){unsigned char tmp;tmp = TAIV;if ( tmp == 2 ) // 比较器1中断{led_flag = 1; // 刷新显示标志CCR1 += 100; // 3.35mSif ( CCR1 >= 32768 )CCR1 -= 32768;}if ( tmp == 4 ) // 比较器2中断{keyread_flag = 1; // 读取键值标志CCR2 += 5000; // 152.6mS长按键自加间隔if ( CCR2 >= 32768 )CCR2 -= 32768;}LPM3_EXIT; // 退出低功耗}定时器A大致可分为四个功能模块:计数器、比较/捕获寄存器0、比较/捕获寄存器1、比较/捕获寄存器2。
S.D.Lu的MSP430入门学习笔记(9):定时器TimerA(4)捕获功能
S.D.Lu的MSP430入门学习笔记(9):定时器TimerA(4)捕获功能本篇笔记介绍如何使用TimerA的捕获模式校准DCO、测量方波信号的频率/周期、脉宽和占空比。
对DCO时钟进行校准对信号脉宽、占空比等参数的测量要求高频时钟。
但是MSP430G2452的不支持外部高频时钟,所以不能使用外部高频晶振作为时钟源。
内部数控时钟DCO就成了唯一选择。
虽然TI在出厂时对MSP430的DCO进行了校准,保存了1MHz、8MHz、12MHz、16MHz这几个频率的校准值,但是由于工作环境的不同,会因为温度等因素的影响而产生较大的偏差。
所以,在对时钟要求较高的设计中,最好对其进行再次校准。
对DCO进行校准的基本原理是用TimerA定时器的捕获/比较功能,进行两个频率的比较,然后根据比较结果调整DCO的输出,直到得到指定频率。
具体方法是,使用外部的32768Hz晶振作为基准时钟源,使用TimerA的捕获功能对DCO的频率进行测量,然后通过DCOx、MODx和RSELx位来调节DCO的频率,直到其输出等于想要的频率。
请看例程:本例中,P1.4用于输出SMCLK,即DCOCLK,程序运行时,可以用示波器观察P1.4口的信号,以确认当前的DCOCLK频率。
同时,在不同DCO频率下,可以观察到P1.0上的LED闪烁频率不同。
在21~24行选择任意一行,屏蔽其它3行,可以得到16MHz、12MHz、8MHz、1MHz不同的DCOCLK频率。
函数void Set_DCO(unsigned int Delta);的作用就是设定DCO输出指定频率。
应该注意的是,参数Delta的单位是4069Hz。
下面对该函数的代码进行分析。
37行,对LFXT1CLK进行8分频作为ACLK,因为本例中LFXT1使用外部32768Hz 晶振,所以ACLK=32768Hz/8=4096Hz,这就是Delta的单位。
38行,将CCR0单元设置为捕获上升沿模式,信号输入为CCI0B,即ACLK=4096Hz。
MSP430单片机——定时器
MSP430单片机——定时器
昨天调了MSP430单片机的定时器,犯了个比较傻的错误。
定时器有四种模式,停止模式,增模式,连续模式,增减模式。
定时器中断也有四个,CCR0,CCR1,CCR2及溢出中断,四个。
在学习过程中,我想用下溢出中断,然后定时器又设置在了增模式,因为不希望产生比较/捕捉中断,就没有设置CCR0,原本的想法是不设置CCR0,那么定时器就会自动计数到0xFFFF后产生溢出重新计数。
结果程序没有这样想象的执行。
定时器进不了溢出中断。
最后才发现,如果定时器工作在了增模式,那么就一定要设置CCR0,因为不论是比较中断还是溢出中断,都是定时器的计数值与CCR0相关,此时的溢出中断,也是定时器计数到CCR0,然后产生溢出,又重新开始计数。
然而,如果设置在了连续模式,就不需要设置CCR0了,连续模式的计数,定时器会计数到0xFFFF后产生溢出。
虽然很简单的定时器操作,但是调试过程中,还是遇到了各种小问题。
tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
MSP430简介(超详细·)
msp430简介MSP430是德州公司新开发的一类具有16位总线的带FLASH 的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐.它采用16位的总线,外设和内存统一编址,寻址范围可达64K,还可以外扩展存储器.具有统一的中断管理,具有丰富的片上外围模块,片内有精密硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M 的时钟.由于为FLASH型,则可以在线对单片机进行调试和下载,且JTAG口直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真工具,方便实用,而且,可以在超低功耗模式下工作对环境和人体的辐射小,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相信MSP430单片机将会在工程技术应用中得以广泛应用,而且,它是通向DSP系列的桥梁,随着自动控制的高速化和低功耗化, MSP430系列将会得到越来越多人的喜爱.一、IO口(一)、P口端口寄存器:1、PxDIR 输入/输出方向寄存器(0:输入模式 1:输出模式)2、PxIN 输入寄存器输入寄存器是只读寄存器,用户不能对其写入,只能通过读取该寄存器的内容知道I/O口的输入信号。
3、PxOUT 输出寄存器寄存器内的内容不会受引脚方向改变的影响。
4、PxIFG 中断标志寄存器(0:没有中断请求 1:有中断请求)该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求;这8个中断标志共用一个中断向量,中断标志不会自动复位,必须软件复位;外部中断事件的时间必须>=1.5倍的MCLK的时间,以保证中断请求被接受;5、PxIES 中断触发沿选择寄存器(0:上升沿中断 1:下降沿中断)6、PxSEL 功能选择寄存器(0:选择引脚为I/O端口 1:选择引脚为外围模块功能)7、PxREN 上拉/下拉电阻使能寄存器(0:禁止 1:使能)(二)、常用特殊P口:1、P1和P2口可作为外部中断口。
msp430 实验报告
msp430 实验报告MSP430 实验报告引言:MSP430是一款低功耗、高性能的微控制器,广泛应用于嵌入式系统开发领域。
本实验报告将介绍我对MSP430进行的一系列实验,包括基本的GPIO控制、定时器应用、模拟信号采集和通信接口应用等。
实验一:GPIO控制在本实验中,我使用MSP430的GPIO引脚控制LED灯的亮灭。
通过配置引脚的输入/输出模式以及设置引脚电平,我成功地实现了对LED灯的控制。
这为后续实验奠定了基础,也让我更加熟悉了MSP430的寄存器配置。
实验二:定时器应用在本实验中,我探索了MSP430的定时器功能。
通过配置定时器的时钟源和计数模式,我实现了定时器中断功能,并利用定时器中断实现了LED灯的闪烁。
这个实验让我更加深入地了解了MSP430的定时器模块,并学会了如何利用定时器进行时间控制。
实验三:模拟信号采集在本实验中,我使用MSP430的模拟信号输入引脚和模数转换模块,成功地将外部的模拟信号转换为数字信号。
通过配置ADC模块的采样速率和精度,我实现了对模拟信号的准确采集,并将采集到的数据通过串口输出。
这个实验让我对MSP430的模拟信号处理有了更深入的了解。
实验四:通信接口应用在本实验中,我使用MSP430的串口通信模块,实现了与外部设备的数据传输。
通过配置串口的波特率和数据格式,我成功地实现了与计算机的串口通信,并通过串口发送和接收数据。
这个实验让我掌握了MSP430与外部设备进行数据交互的方法。
结论:通过一系列的实验,我对MSP430的基本功能和应用有了更深入的了解。
MSP430作为一款低功耗、高性能的微控制器,具备丰富的外设和强大的处理能力,适用于各种嵌入式系统的开发。
通过学习和实践,我掌握了MSP430的GPIO控制、定时器应用、模拟信号采集和通信接口应用等基本技能,为以后的嵌入式系统开发打下了坚实的基础。
未来展望:MSP430作为一款成熟的微控制器,具备广阔的应用前景。
msp430定时器AD模块以及其他笔记
定时器A用到CCR0定时器A的中断可由定时器溢出引起,也可由捕获/比较器模块产生。
每个捕获/比较模块可以独立编程,由捕获/比较外部信号产生中断。
定时器A使用两个中断向量,一个单独分配给捕获/比较寄存器CCR0;另一个作为共用中断向量用于定时器和其他的捕获/比较寄存器。
捕获/比较寄存器CCR0中断向量具有最高优先级,因为CCR0主要用来定义定时器的工作模式,而这是定时器A其他功能的基础,需要最快速的服务。
开启定时器应该在修改定时器工作频率之前。
CCR1,CCR2和定时器共用另一个中断向量,属于多源中断。
由向量中断寄存器TAIV决定由哪个中断标志来触发中断。
中断标志产生数据表:中断优先级中断源缩写 TAIV 的内容最高捕获/比较器1 CCIFG1 2捕获/比较器2 CCIFG2 4定时器溢出 TAIFG 10最低没有中断将挂起 0PxDIR输入/输出方向寄存器0:I/O引脚切换成输入模式 PxIN1:I/O引脚切换成输出模式 PxOUTPxIE中断使能寄存器0:禁止该中断 1:允许该中断PxIES中断触发沿选择寄存器如果允许Px口的某个引脚中断,还需要定义该引脚的中断触发沿。
0:上升沿使相应标志置位 1:下降沿使相应标志置位PxSEL功能选择寄存器0:选择引脚为I/O端口 1:选择引脚为外围模块功能上电复位信号:POR(power-on reset)上电清除复位信号:PUC(power-up clear)POR信号的产生总会产生PUC信号,但是PUC信号的发生不一定会产生POR信号。
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
TACTL是最为主要的控制寄存器,它决定了TA的输入时钟信号、TA的工作模式、TA的开启与停止、中断的申请等工作。
MSP430单片机定时器
MSP430单片机定时器在MSP430 系列单片机中带有功能强大的定时器资源,这定时器在单片机应用系统中起到重要的作用。
在F11X,F11X1 中是不带定时器B 资源的。
430 的定时模块:看门狗定时器,定时器A,定时器B。
定时器A 主要资源特点有16 位定时计数器,其计数模式有4 种。
多种计数时钟信号供输入的捕获/比较功能寄存器和8 种输出模式的3 个可配置输出单片。
定时器资源功能说明(1)看门狗定时器(WDT):主要用于程序在生错误时用作单片机系统复位重起的。
另外,也可作为一个基本定时器使用。
(2)定时器A:作基本定时器使用,结合捕获/比较功能模块可实现时序控制,可编程波形信号发生输出。
可作串口波特率(3)定时器B:作基本定时器使用,与定时器A基本相同,但是功能方面有某些功能会比A 增强些。
定时器A-实现P1.0 方波输出。
#include{WDTCTL = WDTPW + WDTHOLD; //停止看门狗WDT,不使用内部看门狗定时器。
P1DIR |= 0x01; //设置P1.0 口方向为输出。
CCTL0 = CCIE; // 设置捕获/比较控制寄存器中CCIE 位为1,CCR0 捕获/比较功能中断为允许。
CCR0 = 50000; //捕获/比较控制寄存器CCR0 初值为5000。
TACTL = TASSEL_2 + MC_2; //设置定时器A 控制寄存器TACTL,使时钟源选择为SMCLK 辅助时钟。
_BIS_SR(LPM0_bits + GIE); //进入低功耗模式LPM0 和开中断}//定时器A 中断服务程序区#pragma vector=TIMERA0_VECTOR__interrupt void Timer_A (void){P1OUT –0x01; //P1.0 取反输出CCR0 += 50000; //重新载入CCR0 捕获/比较数据寄存器数据} tips:感谢大家的阅读,本文由我司收集整编。
MSP430捕获器简单实用
LPM0;
_NOP();
pwm_wide=pwm_end-pwm_start;
while(1);
}
// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch(TAIV)
{case 2:break;
case 4:
if(TACCTL2 & CCI)
pwm_start=CCR2;
else
pwm_end=CCR2;
//pwm_wide=pwm_end-pwm_start;
break;
case 10:
break;
}
LPM0_EXIT;
}
检验方法:
P1DIR = 0x20; // P1.5输出
P1SEL = 0x20; // P1.5输出ACLK
P2SEL|=BIT0; //P2.0 CCI2A
SCFI0 |= FN_4;
SCFQCTL = 121; // (121+1)乘以32768 *2= 7.99Mhz
FLL_CTL0=DCOPLUS+OSCCAP1; //MCLK=SMCLK=8M
MSP430捕获器简单实用
MSP430定时器A捕捉脉实例[调试通过,很好用]
/*****************************************************************
//功能:利用定时器A的捕捉能测量脉冲信号的脉宽
//
//
MSP430系列单片机介绍
MSP430系列单片机介绍MSP430系列单片机是德州仪器(TI)公司推出的一种低功耗、高集成度、高性能的16位超低功耗单片机。
它采用精确的调度技术和先进的低功耗架构设计,拥有出色的性能、高功耗效率、广泛的外设集成以及丰富的工具和软件支持。
MSP430系列单片机的内核基于RISC架构,拥有16位数据总线和16位地址总线。
它可以工作在多种工作频率下,从几kHz到几十MHz不等,以满足不同的应用需求。
此外,MSP430系列单片机还具有多种睡眠模式,可以进一步降低功耗。
MSP430系列单片机内置了丰富的外设,包括模拟接口、数字接口和通信接口。
模拟接口包括模数转换器(ADC)、数字模拟转换器(DAC)和比较器等,可以实现各种传感器接口和模拟信号处理。
数字接口包括通用输入输出(GPIO)、定时器/计数器、串行通信接口等,可以实现数字信号处理和通信功能。
通信接口包括UART、SPI和I2C等,可以实现与外部设备的数据交换。
MSP430系列单片机广泛应用于各种电子设备中,如便携式设备、智能家居、医疗器械、工业自动化等。
由于其低功耗和高性能的特点,它可以满足不同应用场景下对功耗和性能的需求。
例如,在便携式设备中,MSP430系列单片机可以实现长时间的电池寿命;在智能家居中,它可以实现低功耗的远程控制和数据传输;在医疗器械中,它可以实现高精度的信号处理和通信。
总之,MSP430系列单片机是一种低功耗、高集成度、高性能的16位超低功耗单片机。
通过其先进的架构设计和丰富的外设集成,它可以满足各种应用的需求。
同时,它还提供了丰富的工具和软件支持,方便开发者进行开发和调试。
MSP430程序库之定时器TA的PWM输出
MSP430程序库之定时器TA 的PWM 输出定时器是单片机常用的其本设备,用来产生精确计时或是其他功能;msp430的定时器不仅可以完成精确定时,还能产生PWM 波形输出,和捕获时刻值(上升沿或是下降沿到来的时候)。
这里完成一个比较通用的PWM 波形产生程序。
1.硬件介绍:MSP430系列单片机的TimerA 结构复杂,功能强大,适合应用于工业控制,如数字化电机控制,电表和手持式仪表的理想配置。
它给开发人员提供了较多灵活的选择余地。
当PWM 不需要修改占空比和时间时,TimerA 能自动输出PWM ,而不需利用中断维持PWM 输出。
MSP430F16x 和MSP430F14x 单片机内部均含有两个定时器,TA 和TB ;TA 有三个模块,CCR0-CCR2;TB 含有CCR0-CCR67个模块;其中CCR0模块不能完整的输出PWM 波形(只有三种输出模式可用);TA 可以输出完整的2路PWM 波形;TB 可以输出6路完整的PWM 波形。
定时器的PWM 输出有有8种模式:输出模式0 输出模式:输出信号OUTx 由每个捕获/比较模块的控制寄存器CCTLx 中的OUTx 位定义,并在写入该寄存器后立即更新。
最终位OUTx 直通。
输出模式1 置位模式:输出信号在TAR 等于CCRx 时置位,并保持置位到定时器复位或选择另一种输出模式为止。
输出模式2 PWM 翻转/复位模式:输出在TAR 的值等于CCRx 时翻转,当TAR 的值等于CCR0时复位。
输出模式3 PWM 置位/复位模式:输出在TAR 的值等于CCRx 时置位,当TAR 的值等于CCR0时复位。
输出模式4 翻转模式:输出电平在TAR 的值等于CCRx 时翻转,输出周期是定时器周期的2倍。
输出模式5复位模式:输出在TAR 的值等于CCRx 时复位,并保持低电平直到选择另一种输出模式。
输出模式6PWM 翻转/置位模式:输出电平在TAR 的值等于CCRx 时翻转,当TAR 值等于CCR0时置位。
MSP430单片机定时器实验报告
实验四定时器实验实验目的:MPS430F5529片内集成的定时器A的使用,学习计数器的补捕获比较模块的使用。
实验内容:定时器采用辅助时钟ACLK作为计数脉冲,fACLK=32768Hz,实现以下功能:1.定时器TA0延时1s,点亮或熄灭LED6,即灯亮1s灭1s,如此循环,采用中断服务程序实现。
2.定时器TA0延时1s,点亮或熄灭LED4,采用捕获比较器CCR0的比较模式,设定输出方式,输出方波,不用中断服务程序3.采用捕获比较器CCR1的比较模式LED5,设定输出方式,输出PWM波形,使LED 亮2s,灭1s。
4.用定时器实现30s倒计时,在液晶模块上显示,每过一秒显示数字变化一次。
5.使用TA1的捕获比较器CCR0捕获按键的间隔时间,在液晶模块上显示。
程序代码:程序1:#include <msp430f5529.h>void main(){WDTCTL = WDTPW + WDTHOLD; //关看门狗P1DIR |= BIT3; //设置P1.0口方向为输出。
TA0CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1,//CCR0捕获/比较功能中断为允许。
TA0CCR0 = 32767; //捕获/比较控制寄存器CCR0初值为32767TA0CTL = TASSEL_1 + MC_1+TACLR; //设置定时器A控制寄存器TACTL,//使时钟源选择为SMCLK辅助时钟。
//进入低功耗模式LPM0和开总中断_BIS_SR(LPM0_bits +GIE);}//定时器A 中断服务程序区#pragma vector=TIMER0_A0_VECTOR__interrupt void Timer_A (void){P1OUT ^= BIT3; //P1.0取反输出}实验现象:实验开始后,实验板上LED6亮灭闪烁,间隔为1s。
程序2:#include <msp430f5529.h>void main(void){WDTCTL = WDTPW + WDTHOLD; // 关狗P1DIR |= BIT1; // P1.1 设置为输出P1SEL |= BIT1; // P1.1 输出使能TA0CCR0 = 60000; // PWM PeriodTA0CCTL0 = OUTMOD_4; // CCR1 模式4TA0CCR1 = 30000; // CCR1 PWM duty cycleTA0CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, up mode, clear TAR__bis_SR_register(LPM3_bits); // Enter LPM3__no_operation(); // For debugger}实验现象:实验开始后,实验板上LED4亮灭闪烁,间隔为1s。
MSP430定时器的使用
TACTL = TASSEL1 + TACLR;
// SMCLK, clear TAR
CCTL0 = CCIE;
// CCR0 interrupt enabled
CCR0 = 20000;
TACTL |= MC1;
// Start Timer_A in continuous mode
最后,打开中断,写中断服务程序,详细的程序清单如下:
TBCTL = TBSSEL1 + TBCLR;
// SMCLK, clear TAR
ቤተ መጻሕፍቲ ባይዱ
TBCCTL0 = CCIE;
// CCR0 interrupt enabled
TBCCR0 = 50000;
TBCTL |= MC1;
// Start Timer_A in continuous mode
_EINT();
图 3 定时器 A 的结构原理 定时器 A 的寄存器在 IAR 的调试环境中见图 4 所示。操作这些寄存器就可以实现 TA 的所有功能。
图 4 TA 的寄存器 其中 TACTL 为最主要的控制寄存器,它决定 TA 的输入时钟信号、TA 的工作模式、TA 的开启与停止、中断的申请等工作。TACTL 寄存器为 16 位寄存器,必须使用字指令对其访 问。该寄存器在 POR 信号后全部复位,但在 PUC 信号后不受影响。下面是该寄存器中各位 的含义。
// SMCLK, clear TAR
CCTL0 = CCIE;
// CCR0 interrupt enabled
CCR0 = 50000;
TACTL |= MC1;
// Start Timer_A in continuous mode
430单片机定时器
基于模拟前端信号处理与控制技术的专业论坛、网站
微控设计网
中国MSP430单片机专业网站
例子:这是一个模拟比较器的比较实例,将一个分压电阻电路的输出端接入比 较器的正端(CA0),而比较器另一端接片内0.25×Vcc,在P5. 1 接一个 LED指示灯,该灯的作用是观察比较器的输出。调节改变外部模拟电压,大于 0.25×Vcc时P5.1输出为低,反之为高。 #Iinclude “msp430f449.h” Void mian(void) { WDTCTL=WDTPW+WDTHOLD; P5DIR|=BIT1; CACTL1=CARSEL+CAREF0+CAON; CACTL2=P2CA0; //定义模拟输入接正 while(1); //循环测量 EXIT } { if((CAOUT&CACTL2)==CAOUT) P5OUT|=BIT1; else P5OUT&=~BIT1; }
基于模拟前端信号处理与控制技术的专业论坛、网站
微控设计网
中国MSP430单片机专业网站
开关
送捕获 引脚 Timer_A
中断 允许
参考电路部分, 分别为1/4和 1/2Vcc EXIT
基于模拟前端信号处理与控制技术的专业论坛、网站
微控设计网
捕获模式选择 00 禁止 01 上升沿 10 下降沿 11 任意沿
比较模式
EXIT
基于模拟前端信号处理与控制技术的专业论坛、网站
微控设计网
中国MSP430单片机专业网站
时钟源选择: 它是通过定时控制器TACTL中的两位完成,当从新上电或发生 POR时(系统复位)或用软件通过CLR位使分频器复位。在正 常操作时分频器的状态是不可见的。 工作模式的选择:
msp430的四种计时器程序
基于msp430g2553定时器详解1已有2682 次阅读2012-8-10 21:11 |/*#include "msp430g2553.h"unsigned char num;void main(){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;BCSCTL3 |= LFXT1S_2; // Set LFXT1为vol时钟即12kHZCCTL0|= CCIE; //设置捕获/比较控制寄存器,CCIE=0x0010,使能捕获比较中断CCR0 =12000; //设置捕获/比较寄存器,初始值为12000,对于ACLK时钟频率为12khz的频率,相当于1sTA0CTL = TASSEL_1 +TACLR+MC_1; // 设置定时器A控制寄存器,// TASSEL_1选择辅助时钟ACLK,TASSEL_2选择子系统时钟SMCLK,与dco有关;// TACLR=0x0004,清除定时器A计数器//TACTL |= MC0; //设置定时器A控制寄存器,MC0=0x0010,使计数模式为增计数P1SEL&=~BIT6; //P1.6为I/O口P1DIR |=BIT6; //P1.6为输出_EINT(); //使能中断,这是一个C编译器支持的内部过程。
while(1); //无限次while循环}#pragma vector=TIMER0_A0_VECTOR//固定的格式__interrupt void Timer_A (void) //定时器A的CC0中断处理程序必须是没有返回值的{P1OUT ^= BIT6; //将P3.7引脚取反,就是使发光二极管闪烁}*///使用主系统做为时钟源时,可用用num配合使用,达到一秒定时,//也可以通过BCSCTL2 |= SELM_1 + DIVM_3; 选择MCLK并且8分频#include "msp430g2553.h"unsigned char num;void main(){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;//主系统时钟切换为外部高速晶振if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF){while(1); // If calibration constants erased, trap CPU!!}// Configure Basic ClockBCSCTL1 = CALBC1_1MHZ; // Set rangeDCOCTL = CALDCO_1MHZ; // Set DCO step + modulation*/CCTL0|= CCIE; //设置捕获/比较控制寄存器,CCIE=0x0010,使能捕获比较中断CCR0 =10000; //设置捕获/比较寄存器,初始值为10000,对于MCLK时钟频率为1Mhz的频率,相当于1sTA0CTL = TASSEL_2 +TACLR+MC_1; // 设置定时器A控制寄存器,// TASSEL_1选择辅助时钟ACLK,TASSEL_2选择子系统时钟SMCLK,与dco有关;// TACLR=0x0004,清除定时器A计数器//TACTL |= MC0(MC_1); //设置定时器A控制寄存器,MC0=0x0010,使计数模式为增计数P1SEL&=~BIT6; //P1.6为I/O口P1DIR |=BIT6; //P1.6为输出_EINT(); //使能中断,这是一个C编译器支持的内部过程。
利用MSP430的 定时器A(Timer_A)的比较捕获模式产生方波和PWM波
微机原理实验实验五定时器A(Timer_A)的比较/捕获模式一、实验目的1. 掌握 MSP430 系列片内集成定时器的比较/捕获模块的工作原理和应用方法;2. 掌握 MSP430 系列片内集成定时器的比较模式的原理和应用;3. 掌握利用定时器的比较模式产生方波的方法;4. 掌握利用定时器比较模式输出 PWM 波形的方法;5. 掌握定时器的捕获模式的原理和应用;6. 掌握利用定时器捕获模式测量方波信号频率的方法二、实验内容1.※●编程实现:采用定时器TA0控制LED1指示灯亮灭,中间间隔1s。
(1)源程序#include<msp430.h>void main(){WDTCTL=WDTPW+WDTHOLD; //关闭看门狗P1DIR |= BIT2;P1SEL |= BIT2; //P1.2定时器输出TA0CCR0=50000; //PWM周期定义TA0CCTL1=OUTMOD_3; //CCR1比较输出模式3TA0CCR1=32768; //CCR1 PWM占空比定义TA0CTL = TASSEL_1+MC_1+TACLR; //ACLK,增计数,清除TAR计数器__bis_SR_register(LPM3_bits); //进入LPM3}(2)运行结果上电后LED1闪烁,中间间隔1s. (以下为录制的运行视频截图)(3)输出信号波形图1s(4)对比分析采用定时器的比较模式和中断功能实现输出方波的各自优势是什么?采用中断功能产生方波是定时器计数到某个值使产生中断,利用此中断来翻转输出口的状态,从而产生方波,它的方波不是直接产生的,因此它有更强的可操作性。
比较模式是计数时与某两个值比较,然后置位复位或者反转输出口,这是直接产生方波,它容易控制方波的占空比。
2.※●编程实现:采用定时器TA0捕获/比较器CCR1的比较模式,设定输出方式,输出PWM波形,使LED1指示灯亮2s,灭1s,并绘制PWM波的波形和频率。
MSP430入门级程序:定时闪烁
刚学完51,还没来得及消化的自己,转身开始进军msp430。
在起初的几天里,感觉msp的一切都是那么的苦涩难懂,与51有截然不同的感觉。
在文字之中挣扎了两天,受到的打击不小。
然后,拈来几个简单的程序,想开始学会自己点灯闪烁,就像学51的编程起点一样。
于是,慢慢的看着程序啃代码,弄清每一条语句。
此间,有些书上的知识与代码开始串在一起。
才发现,最初几天的功夫,没有白费。
点灯闪烁固然简单,会做也说明不了自己达到了一定的高度,但作为一名初学者,能熟练“玩转”各种不同的定时,说明自己对msp430已然不再陌生。
对于从51转身msp430的新手来说,个人认为,msp430定时器这一块,是它的特点,也是基础的部分,甚至可以说,是任何新手,在开始时,无法逃避的一个重点!接下来是自己根据mspf149写的几个定时程序,在实验板上亲测均能通过。
(注:proteus仿真可能无法到达其效果,因为其中使用的是msp430f249,请注意其头文件与149的区别)一、/* 定时:LFXT1CLK作为ALCK的时钟源,频率:32768HZ */#include <msp430x14x.h>void main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗//TIMER_A相关设置CCTL0 = CCIE; //使能CCR0中断CCR0 = 2047; //设定周期0.5STACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式P2DIR = 0x04; //设置P2口方向为输出_EINT(); //使能全局中断}#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){P2OUT ^= 0xff;}二、/* 掌握XT2、DCO两种时钟源情况下SMCLK的定时*/#include <msp430x14x.h>void main(){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;//基础时钟方面的设置BCSCTL1&=~XT2OFF; //启动XT2BCSCTL2=SELS+DIVS1+DIVS0; //XT2CLK作为SMCLK的时钟,八分频//TIMER_A各种寄存器设置TACTL=TACLR+TASSEL1+ID1+ID0; //清除TAR,时钟源SMCLK,八分频TACTL|=MC0; //增计数模式CCTL0=CCIE;CCR0=62500;/*特别注意:当XT2没有开启或没有选择XT2作为SMCLK的时钟,SMCLK的默认时钟源为DCO:800KHZ,若定时0.5s,CCR0=50000; */P2DIR|=BIT7;_EINT();while(1);}//interrupt[TIMERA0_VECTOR]void Timer_A(void)#pragma vector=TIMERA0_VECTOR__interrupt void Timer_A(void){P2OUT^=BIT7;}三、关于看门狗的两种表达起定时效果#include <msp430x14x.h>void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL =WDT_ADLY_1000;//即:WDTCTL=WDTPW+WDTTMSEL+WDTSSEL+WDTCNTCL; IE1|=WDTIE;P2DIR|=BIT0;_EINT();while(1);}#pragma vector=WDT_VECTOR__interrupt void WDT(){P2OUT^=BIT0;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LaunchPad-MSP430入门系列4-定时器模块(定时、计数、捕获)Version 1.2文先,介绍几个英文缩写的意思以及一些注意的地方。
1.Timer0/1 定时器0/1,在User's Guide中用的是TimerA/B,所指的也是Timer0/1 。
G2553Datasheet中用的是Timer0/1 ,本文以G2553Datasheet为准。
全文以Timer0为例,Timer1类同。
2.TAxR(x = 0/1)定时器x对应的计数器,这是一个只读寄存器。
硬件自动驱动计数。
3.EQUy(y = 0/1/2)计数事件发生寄存器,当TAxR = TAxCCRy时EQUy置1。
4.定时器简介MSPG2553共有两个定时器,Timer0、Timer1,他们都是十六位的定时、计数器,内含三个捕获、比较寄存器。
两个定时器均支持多个捕获、PWM输出、间歇性计时,定时器包含多个中断源,可以是计数溢出中断、捕获中断等等。
定时器包含:●同步十六位定时、计数器运行模式。
●时钟源可从MCLK、SMCLK、ACLK任意选择。
●三个比较、捕获寄存器。
●中断向量寄存器能快速解码的所有定时器中断本文以Timer0为例详细介绍430的定时器模块,下图是Timer0组成框图0-1定时器0组成框图下面简要介绍一下该硬件框图的意思,从左上角看,首先是一个时钟源选择寄存器TASSELx,通过该寄存器选择定时器的时钟源,选择了时钟源后有一个分频器Divider,相应的设置寄存器是IDx,再过来就到一个定时器的核心部分,一个16位的定时器TAR。
其右侧有一个定时器的计数模块,MCx寄存器用来设置计数模式。
接下来,TAR正下方有三个横线,右侧标有CCR0、CCR1、CCR2,意思是CCR1、CCR0的框图和下方CCR2的框图是一样的。
此处省略不写。
在CCR中,左上角为一个捕获源选择寄存器。
可以从CCI2A、CCI2B、GND或者VCC选择捕获源,选择捕获源后有一个选择捕获模式寄存器Capture Mode,然后过来有一个捕获溢出状态寄存器COV,SCS同步/异步捕获模式选择位,然后连接到捕获比较寄存器。
下方为模式选择寄存器,具体设置可以查看相应的寄存器设置。
这里仅是大概介绍一下Timer0的寄存器,具体的设置使用还看参考相应的寄存器并结合例程慢慢学习理解。
定时器运行方式下面简要重点介绍定时器计数模块的四种模式以及7种输出模式。
Timer0有一个在不断计数的只读寄存器TA0R。
计数器的计数模式共有四种,停止模式(Stop mode)、连续增计数模式(Up mode)、递增计数模式(continuous mode)、增减计数模式(Up/down mode)。
由上图可知,这四种模式可以通过MCx寄存器进行设置。
以上四种模式可以由下图可以很好理解。
0-2四种计数模式1.Stop模式计数器不工作。
2.连续计数模式为计数器从零开始连续增计数一直到0xFFFF即65535,然后又重新从零开始计数。
3.递增计数模式与连续计数模式仅有一点点区别,递增模式为计数器连续增加到TA0CCR0(即图中的CCR0)中的值后又重新从零开始计数。
TA0CCR0的值时可以在程序中直接赋值的。
4.递增递减模式也很好理解,计数器从零开始计数到CCR0后又自动减数,到零后又增计数,就像三角波一样。
每一个捕获比较模块都有一个输出单元,这个输出单元专门用来产生以下如PWM的波形信号,每一个输出单元都可以通过配置OUTMOD寄存器的值来设定八种信号输出模式,引脚输出,还要看相应的数据手册Datasheet。
下面再用几张图片详细介绍在不同计数模式下的输出态。
1.增计数模式下的输出0-3增计数模式2.递增计数模式下的输出0-4递增计数模式3.第增/第减计数模式下的输出0-5递增计数模式以上几种输出模式一般用于PWM信号的发生。
具体的使用在讲完寄存器后再举一个输出PWM信号的程序。
接下来再介绍一下定时器的捕获/比较功能,具体应查看技术手册。
●捕获模式捕获模式可以用于速度计算或时间测量。
CCIxA、CCIxB的捕获源可以连接到外部引脚或者内部信号,可以通过设定CCISx、CMx位让寄存器捕获上升、下降,或者两个输入信号的边沿。
输入信号的电平可以通过CCI位读取。
当设置寄存器CAP = 1时,使能捕获模块,●比较模式比较模式设置在CAP = 0的情况向,比较模式用于产生PWM信号。
或者在指定时间里输出终端信号,当TAxR计数到TACCRx时⏹建立起CCIFG位⏹中断事件发生标志位EQUx = 1⏹EQUx的隐含改变将影响输出模式⏹输入信号CCI被锁上入SCCI定时器中断这里以定时器0为例,定时器1同。
定时器的中断可有定时器TA0CCR0溢出产生,也可由TA0CCRx(x =1/2)溢出产生、捕获/比较事件发生引起的中断,前者有一个专用的中断向量,TIMER0_A0_VECTOR,而后者用的TIMER0_A1_VECTOR,至于是哪一个中断时间发生,还要根据标志位来判断。
定时器寄存器1.TA0CTL ,Timer0 Control Register1.1TASSELx 定时器时钟选择位,该位的值为00选择时钟源TACLK01选择时钟源ACLK10 SMCLK11INCLK(指定器件该位可选,详见指定装置Datasheet)1.2 IDx 输入时钟分频选择位,该位的值为00 /101 /210 /411 /81.3 MCx模式控制位,00 停止模式:定时器停止01 Up mode:定时器增计数到TA0CCR0的值10 Continuous mode:定时器计数到0FFFFh11 增减计数模式:定时器计数到TA0CCR0的值后减计数到01.4 TACLR 定时器清除位,该位置1,清除计数器的值归零、初始化时钟分频位、计数分频位,该位置1后自动清零。
1.5 TAIE 定时器中断使能位0 禁止中断1 使能中断1.6 TAIFG 定时器中断发生标志位0 没有发生中断事件1 发生了中断事件2.TA0R Timer0 Register定时器计数器是一个16位计数器。
该寄存器专门为定时器计数。
3.TA0CCRx Timer0 Capture/Compare Register(x = 0/1/2)定时器0捕获/比较寄存器,工作在一下两种模式下时,该位的意思为●比较模式:TACCRx保持定时比较结果数据●捕获模式:当捕获事件发生时,TA0R的值将写入该寄存器。
4.TA0CCTLx , Capture/Compare Control Register(x =0/1/2)4.1CMx Capture mode捕获模式00不捕获01捕获上升沿10 捕获下降沿11 上升、下降沿均捕获4.2CCISx 捕获/比较输入选择位,该位选择TA0CCRx的输入信号,至于是信号从哪里输入,请查看Datasheet00CCIxA01CCIxB10 GND11 Vcc4.3SCS 同步捕获源,该位用于设置输入信号与时钟源是否同步捕获0异步捕获1同步捕获4.4SCCI 同步的捕获/比较输入,所选择的 CCI 输入信号由 EQUx 信号锁存,并可通过该位读取4.5CAP 捕获/比较模式选择位0比较模式1捕获模式4.6OUTMODx 输出模式选择位,模式2,3,6,7不支持TA0CCR0,因为EQUx = EQU0000 输出模式001 置位模式010 翻转/复位模式011 置位/复位模式100 翻转模式101 复位模式110 翻转/置位模式111 复位/置位模式4.7CCIE 捕获/比较中断使能位,该位使能中断和中断标志位0禁止中断1使能中断4.8CCI 捕获/比较输入,输入信号可以通过该位读取。
4.9OUT 输出,用于输出模式0,该位用于控制输出状态0输出低电平1输出高电平4.10COV 捕获溢出,该位用于说明一个捕获事件的发生。
COV必须通过软件清零0没有捕获溢出事件发生1发生了捕获溢出事件4.11CCIFG 捕获/比较中断标志位0没有中断事件1发生了中断事件地方啊5.TA0IV Timer0 Interrupt Vector Register该中断向量列表寄存中断事件是哪一件发生。
当TA0IVx =1 捕获比较寄存器1发生了中断事件2 捕获比较寄存器2发生了中断事件5 发生了定时器事件定时器1各个寄存器的设置与定时器0大同小异,大多情况下将寄存器的名字中的0改为1即可。
此处不再赘述,如有需要,请参阅技术文档。
例程下面结合寄存器的描述即物理硬件框图,简要解释三个例程。
1.Example 1程序一开始关闭看门狗,if语句作为时钟校准的范例,可以删去。
LFXT1S_2; 选择超低频时钟源。
然后设定输出口,清除中断标志,时钟源分频设定,接下里组建定时器A,即定时器0,在详细介绍代码之前,首先看头文件关于好地兼容。
所以,在代码的编写里可以用标准模式写TA0CCR0,也可以用精简模式编写CCR0。
这样,在上述代码中,就可以很用以理解CCR0 = 5100; 等价于 TA0CCR0 = 5100;给定时器赋初值。
CCR1 = 2000; 等价于 TA0CCR1 = 2000;给定时器赋初值。
接下来到CCTL0 = CCIE; 等价于TA0CCTL0 = CCIE;使能CCR0中断。
CCTL1 = CCIE; 等价于TA0CCTL1 = CCIE;使能CCR1中断。
然后到两个中断服务函数,Timer_A0、Timer_A1。
注意TIMER0_A0_VECTOR是CCR0专用的中断向量。
而TIMER0_A1_VECTOR是其他中断向量的服务函数。
需要根据TA0IV 判断,结合寄存器的内容,Timer_A1()函数也很好理解了。
2.Example 2下面举一个无需中断服务函数、硬件自动实现产生两路PWM的例子。
初始化时钟后直接调用该函数即可。
我这里使用的是定时器B(即Timer1)。
详细的介绍见以上备注。
You’re done.桂电二院科协出品,版权所有,转载不究。
maswell_xiao@2012/7/31。