MSP430定时器A捕捉脉实例

合集下载

使用MSP430的TB捕获器计算多路PWM脉宽

使用MSP430的TB捕获器计算多路PWM脉宽

/*LFX1-----32768HZP4.1<--------PWM input0P4.2<--------PWM input1P4.3<--------PWM input2P4.4<--------PWM input3*/#include <msp430x16x.h>#define TBLENGTH 0XFFvoid calPWM(unsigned char channel);//中断中的捕获值处理子程序声明// 上升沿捕获值,下降沿捕获值,PWM脉宽存放数组int pwm_start[4],pwm_end[4],pwm_dt[4];//定时器溢出标志,如果在溢出之前捕获到上升沿,在溢出之后捕获到下降沿,标志为0xff,否则为0unsigned char flag[4],flag_tov[4];void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTP4SEL =0x1e; //P4.1-4 CCI(1-4)B//捕获模式,上升沿和下降沿都捕获,捕获CCIxBTBCCTL1 =CAP+CM_3+CCIS_1+SCS+CCIE;TBCCTL2 =CAP+CM_3+CCIS_1+SCS+CCIE;TBCCTL3 =CAP+CM_3+CCIS_1+SCS+CCIE;TBCCTL4 =CAP+CM_3+CCIS_1+SCS+CCIE;// ACLK, 连续模式(0-FF),8分频,定时器长度,定时器溢出中断,这些可以根据自己的设计重新定义TBCTL = TBSSEL_1 + MC_2+ID_3+CNTL_3+TBIE ; _EINT();while(1);{}}//捕获值处理子程序,channel为通道值,范围0-3,对应存放的数组的序号void calPWM(unsigned char channel){unsigned volatile short *tbcctlx,*tbccrx;tbcctlx=&TBCCTL1+channel;tbccrx=&TBCCR1+channel;if(*tbcctlx & CCI)//上升沿判断{pwm_start[channel]=*tbccrx;flag[channel]=0;}else //否则就是下降沿{if(flag[channel]==0xff)//如果捕获跨越了定时器溢出边沿{flag[channel]=0;pwm_dt[channel]=TBLENGTH-pwm_start[channel]+*tbccrx+1;}elsepwm_dt[channel]=*tbccrx-pwm_start[channel]+1;}}//每次定时器溢出检查是否有通道断开,,每个定时器周期中至少PWM更新一次,否则认为断路void brkChk(unsigned char channel){ flag[channel]=0xff;if (flag_tov[channel]==0)pwm_dt[channel]=0;flag_tov[channel]=0;}// Timer_A3 Interrupt Vector (TAIV) handler #pragma vector=TIMERB1_VECTOR__interrupt void Timer_B(void){switch(TBIV){case 2://捕获器1flag_tov[0]++;calPWM(0);break;case 4://捕获器2flag_tov[1]++;calPWM(1);break;case 6://捕获器3flag_tov[2]++;calPWM(2);break;case 8://捕获器4flag_tov[3]++;calPWM(3);break;case 14 ://TBIFGbrkChk(0);brkChk(1);brkChk(2);brkChk(3);break;}}。

MSP430G2553捕获程序案例与经验分享

MSP430G2553捕获程序案例与经验分享

MSP430G2553捕获程序案例与经验分享MSP430G2553单片机定时器A有3个捕获比较寄存器CCR0,CCR1,CCR2.。

MSP430G2553捕获程序应用很广泛,电子工程师可以多加了解。

所谓捕获,就是我们来检测外围的信号跳变时刻(此时信号理解为数字信号,即脉冲),此信号乃为我们捕获的对象,可以测量信号的脉冲宽度,即频率等。

捕获首先需要考虑的初始化工作1.设置BCS模块,确定系统时钟MCLK子系统时钟SMCLK把MCLK设置为8MHZ,SMCLK设置为1MHZ。

2.捕获输入引脚的选择选择IO引脚时应查阅器件的手册,能够快速的查阅PDF资料找到正确的答案是一个程序员的基本素质。

3.程序设计思路根据测频的原理,需要2次捕获才能测量一次输入信号的频率。

因此要定义2个变量保存2次捕获结果。

变量是无符号的整数型变量(与捕获寄存器的字长匹配)。

输入信号与CPU的工作是异步的,所以设计程序的时候是不知道什么时候才有捕获输入。

程序处理何时发生了捕获的方法有2种一是查询的方法,定时器硬件在发生捕获事件后会置捕获中断表示CCIF为1,程序在主循环里不断的查询这个标志即可判断是否有捕获事件发生。

二是定时器中断法,当发生捕获事件时必产生定时器中断,在中断中读取捕获寄存器即可。

查询的方法不是好的程序设计方法,因为查询时要占用CPU,使得CPU不能再做其他任务。

中断的方法对初学者有一定的困难。

即中断程序如何与主程序通信(交换信息)。

理解中断及设计中断服务程序要困难一些。

捕获模式捕获外部输入的信号的上升沿或下降沿或上升沿下降沿都捕捉,当捕捉发生时,把TAR 的值装载到TACCRx中,同时也可以进入中断,执行相应的操作。

这样利用捕捉上升沿或。

MSP430定时器

MSP430定时器

比较输出电路
x=0,1,2
OUTx
x=0,1,2
输出方式选择 除方式0外,OUTx在Timer Clock
(8种)
的上升沿处改变
OUTx
OUTMODx = 000,输出方式0,OUTx = OUT
OUT=TACCTLx.2
1
输出方式 0 可用于输出信号的初始化
OUTx
x=0,1,2
OUTMODx ≠ 000,输出方式1~7 OUTx 与 OUT 无关
定时器 A 的四种计数方式(Count Mode)
MCx count mode
0 0: stop mode 0 1: up mode 1 0: continuous mode 1 1: up/down mode
Mode Control
Stop mode : the timer is halted
0: 比较方式 1: 捕捉方式
输出方式,8种
输出方式0的 直接输出编程位
中断标志
1: 中断允许
1: 捕捉溢出
Capture/Compare Block , 以 CCR2 为例
CAP=0 : Compare Mode 比较方式 CAP=1 : Capture Mode 捕捉方式
捕捉方式( Capture Mode , CAP=1 )
当不使用Timer时, 应将Timer配置为Stop mode , 这样可以降低芯片的功耗
Up Mode 锯齿波方式,需要CCR0(比较方式)协助
在Timer Clock的上升沿处TAR=TAR+1, 当TAR≥TACCR0时,自动清零TAR
period=(TACCR0+1)×T
T
Continuous Mode

MSP430 定时器A的使用

MSP430 定时器A的使用

第四讲定时器A的使用MSP430F413芯片中含有TimerA3模块,如图1-2所示。

其常用的外引线有三条:TACLK、TA1和TA2。

TACLK:定时器_A输入时钟(48脚),与P1.6和ACLK输出共用同一引脚。

TA1:定时器_A的第一通道输入、输出引脚(51脚)。

捕获方式:CCI1A输入;比较方式:OUT1输出。

TA2:定时器_A的第二通道输入、输出引脚(45脚)。

捕获方式:CCI2A输入;比较方式:OUT2输出。

1.定时器A功能及结构定时器A基本结构是一个十六位计数器,由时钟信号驱动工作,结构框图如图4-1所示。

图4-1 定时器A结构图定时器A具有多种功能,其特性如下:(1)输入时钟可以有三种选择,可以是慢时钟(ACLK)、快时钟(SMCLK与单片机主时钟同频)和外部时钟。

(2)能产生的定时中断、定时脉冲和PWM(脉宽调制)信号,没有软件带来的误差。

(3)不仅能捕获外部事件发生的时间,还可选择触发脉冲沿(由上升沿或下降沿触发)。

定时器A功能模块主要包括:(1)计数器部分:输入的时钟源具有4种选择,所选定的时钟源又可以1、2、4或8分频作为计数频率,Timer_A可以通过选择4种工作模式灵活的完成定时/计数功能。

(2)捕获/比较器:用于捕获事件发生的时间或产生时间间隔,捕获比较功能的引入主要是为了提高I/O 端口处理事务的能力和速度。

不同的MSP430单片机,Timer_A模块中所含有的捕获/比较器的数量不一样,每个捕获/比较器的结构完全相同,输入和输出都取决于各自所带控制寄存器的控制字,捕获/比较器相互之间完全独立工作。

(3)输出单元:具有可选的8种输出模式,用于产生用户需要的输出信号,支持PWM输出。

2.定时器工作模式(1)停止模式:停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。

当定时器暂停后重新计数时,计数器将从暂停时的值开始以暂停前的计数方向计数。

LaunchPad-MSP430入门系列4-定时器模块(定时、计数、捕获)

LaunchPad-MSP430入门系列4-定时器模块(定时、计数、捕获)

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同步/异步捕获模式选择位,然后连接到捕获比较寄存器。

S.D.Lu的MSP430入门学习笔记(9):定时器TimerA(4)捕获功能

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。

MSP430F149的定时器A操作

MSP430F149的定时器A操作

MSP430F149的定时器A定时操作1)定时器A的图解图1 定时器A图解2)定时器A的四种计数模式。

1.停止模式。

2.增计数模式。

(产生两个中断标志)也就是当计数到跟TACCR0一样的时候,就返回0,重新计数。

当计数到TACCR0的同时产生一个中断标志CCIFG,而当计数器溢出返回零的同时又同时产生一个中断标志TAIFG。

如图:图2 增计数模式的波形图3.连续计数模式。

(产生一个中断标志)也就是计数器将直接计数到计数器所能计数的最大值0FFFFH之后重新返回零,再次计数。

返回零的同时产生一个TAIFG中断标志。

如图:4.增减计数模式。

(产生两个中断标志)也就是当计数器计数到跟TACCR0一样的之后,然后从TACCR0开始又减少,直到为零,然后又开始增。

当计数跟TACCT0一样的时候产生一个中断标志CCIFG,当减到为零的时候又产生一个中断标志TAIFG。

如图:注意:当重新写入TACCR0数值的时候,当新的数据大于原来的数值的时候,计数器将计数到新的数值才重新返回零;当新的数据小于原来的数值的时候,计数器将直接返回零重新计数。

3)定时器A的寄存器。

1.TACTL●TASSELx:计时器A的时钟来源选择。

●IDx:计时器A时钟的分频选择。

●MCx:计时器A四种计数模式选择。

●TACLR:计数器A的TAR计数清零,同时也可以清楚时钟分频器和计数方向。

●TAIE:TAIFG中断标志使能。

在捕获模式下可以打开所有CCIFG的中断使能。

●TAIFG:中断标志位。

2.TAR计数器的计数寄存器。

3.TACCTLx●CMx:捕获模式选择。

00:关闭;01:上升沿捕获;10:下降沿捕获;11:上升下降沿捕获。

●CCISx:捕获引脚选择。

●SCS:选择捕获电平方式。

0异步时钟;1同步时钟。

●SCCI:锁存同步时钟输入端。

也就是锁存EQUx的值,以供CPU读取。

●CAP:捕获模式和比较模式选择。

0比较;1捕获。

●OUTMODx:输出模式选择。

基于MSP430F5438A单片机测量频率的程序实例

基于MSP430F5438A单片机测量频率的程序实例

基于MSP430F5438A单片机测量频率的程序实例基于MSP430F5438A单片机测量频率的程序实例/*****************************************************程序描述:利用Timer_A捕获脉冲宽度利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量程序用到了定时器A的CCI1A端口(MSP430F14X的P1.2引脚)作捕获外部输入的脉冲电平跳变,start,end,两个个变量来计算脉冲宽度*****************************************************/#include"msp430x14x.h"#include"lcd12864.h"uint start,end;uint width;//==用于存放脉宽==uint period;//==用于存放周期==uint frequency;//==用于存放频率==uint fy[7];//==用于存放频率显示数据==uint pd[7];//==用于存放周期显示数据==uint wh[6];//==用于存放脉宽显示数据==const unsigned char zhouqi[]={"周期为:(us) "};const unsigned char us[]={"us "};const unsigned char pinlv[]={"频率为:(Hz) "};const unsigned char hz[]={"HZ "};void process(void);//==函数声明==void delay();//==延时函数==void InitSys(); //==初始化时钟==/****************************************************主函数****************************************************/int main(void){WDTCTL = WDTPW + WDTHOLD;//==关狗==InitSys();//==初始化时钟,SMCLK,MCLK均为8M==P1DIR&=~BIT2;P1SEL = BIT2;//==设置P1.2端口为功能模块使用,即:做捕获源==TACTL = TASSEL_2+ID_3+TACLR+TAIE+MC1;//==定时器A时钟信号选择SMCLK,8分频,同时设置定时器A计数模式为连续增计模式==CCTL1 =CM_1+SCS+CAP+CCIE;//==输入上升沿捕获,CCI0A为捕获信号源==_EINT();//==开全局中断允许==Ini_Lcd();//==初始化液晶==Clear_GDRAM();//==清屏==Disp_HZ(0x80,zhouqi,8);Disp_HZ(0x88,pinlv,8);while(1){process();Write_Cmd(0x90);//==写地址==Write_Data(0x30+pd[6]);Write_Data(0x30+pd[5]);Write_Data(0x30+pd[4]);Write_Data(0x30+pd[3]);Write_Data(0x30+pd[2]);Write_Data(0x30+pd[1]);Write_Data(0x30+pd[0]);Write_Cmd(0x98);//==写地址==Write_Data(0x30+fy[6]);Write_Data(0x30+fy[5]);Write_Data(0x30+fy[4]);Write_Data(0x30+fy[3]);Write_Data(0x30+fy[2]);Write_Data(0x30+fy[1]);Write_Data(0x30+fy[0]);delay();}}/*****************************************************初始化时钟*****************************************************/ void InitSys(){unsigned int i;//--- 使用XT2振荡器---BCSCTL1&=~XT2OFF;//==打开XT2振荡器==do{IFG1 &=~OFIFG;//==清除振荡器失效标志==for(i = 0xFF; i > 0; i--);//==延时,等待XT2起振==}while((IFG1 & OFIFG)!= 0);//==判断XT2是否起振== BCSCTL2 =SELM_2+SELS;//==选择MCLK、SMCLK为XT2,8M== }/*****************************************************延时函数*****************************************************/void delay(){unsigned int i;unsigned int j=10;for(i=10;i>0;i--){while(j--);}}/***************************************************数据处理***************************************************/void process(void){while(end<start);< bdsfid="155" p=""></start);<>//while(endstart width = end-start;//==实际脉冲宽度的计算==period = 2* width;frequency=1000000/period;pd[6]=period/1000000;pd[5]=(period-1000000*pd[6])/100000;pd[4]=(period-1000000*pd[6]-100000*pd[5])/10000;pd[3]=(period-1000000*pd[6]-100000*pd[5]-10000*pd[4])/100 0;pd[2]=(period-1000000*pd[6]-100000*pd[5]-10000*pd[4]-1000*pd[3])/100;pd[1]=(period-1000000*pd[6]-100000*pd[5]-10000*pd[4]-100 0*pd[3]-100*pd[2])/10;pd[0]=period%10;fy[6]=frequency/1000000;fy[5]=(frequency-1000000*fy[6])/100000;fy[4]=(frequency-1000000*fy[6]-100000*fy[5])/10000;fy[3]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4])/10 00;fy[2]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4]-100 0*fy[3])/100;fy[1]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4]-100 0*fy[3]-100*fy[2])/10;fy[0]=frequency%10;}/***************************************************中断处理函数***************************************************/#pragma vector=TIMERA1_VECTOR //==定时器A中断处理==__interrupt void timer_a(void){switch(TAIV)//==向量查询=={case 2://==捕获中断==if(CCTL1&CM0)//==捕获到上升沿=={CCTL1=(CCTL1&(~CM0))|CM1;//==更变设置为下降沿触发== start=TAR;//==记录初始时间==}else if(CCTL1&CM1)//==捕获到下降沿=={CCTL1=(CCTL1&(~CM1))|CM0;//==更变设置为上升沿触发== end=TAR;//==用start,end,overflow计算脉冲宽度==}break;default: break; } }。

MSP430 定时器A

MSP430 定时器A

上次Cloud和大家一起学习完了MSP430的时钟配置,这一篇,我们来学习MSP430单片机的TimerA (定时/计数器A)。

MSP430单片机的TimerA具有非常强大的功能,相关的寄存器配置也相当复杂,Cloud花了好久才逐步理清学习思路,尤其是学习数据手册的相关描述。

在这里Cloud提醒大家,虽然现在网上有中文汉化版的数据手册,但Cloud阅读英文原版后对比发现还是英文原版对器件特性描述得更加清楚,而中文汉化版的省略掉了一些内容。

好吧,扯远了。

下面进入正题:一、MSP430的Timer结构首先让我们通过官方描述来初步了解一下MSP430单片机的Timer资源:定时器A是一个16位的定时/计数器。

定时器A支持多重捕获/比较,PWM输出和内部定时。

定时器还有扩展中断功能,中断可以由定时器溢出产生或由捕获/比较寄存器产生。

定时器A的特性包括:??·四种运行模式的异步16位定时/计数器??·可选择配置的时钟源??·可配置的PWM输出??·异步输入和输出锁存??·对所有TA中断快速响应的中断向量寄存器MSP430G2553单片机共有两个TimerA,分别是Timer0A和Timer1A。

OK,零零总总说了这么多,大家一定带有很多的疑惑,比如什么叫“捕获/比较”等,这里Cloud 先不作解释,会用才是王道。

我们呢先找来定时器A的结构图给大家初步了解一下定时器A的结构:我们先从上面部分开始解释。

中间红色的是一个16位的TimerA,TAR,这其实就是MSP430单片机内部的一个定时计数器了,类似于51中的TH0和TL0的合体。

既然可以拿来计时,那么肯定可以有时钟信号输入,让我们最左边黄色的框,是一个选择器,由上面的TASSEL来选择TACLK、ACLK、SMCLK、INCLK的其中一种时钟。

上次我们已经学习过ACLK和SMCLK,也知道如何配置这两个时钟了(这也是为什么先学习时钟的原因),另外两个是外部时钟源,其中TACLK可以由P1.0输入。

第6章MSP430单片机及设计实例

第6章MSP430单片机及设计实例

第6章MSP430单片机及设计实例本章将介绍MSP430单片机及设计实例。

MSP430是德州仪器(TI)公司开发的一种低功耗、高性能的16位RISC微控制器。

它广泛应用于嵌入式系统和便携式设备中,具有较低的功耗和丰富的外设。

首先,我们将介绍MSP430的基本特性。

MSP430采用的是Harvard架构,具有16位数据总线和16位地址总线。

它具有多种工作模式,包括运行模式、空闲模式和休眠模式,可以根据实际需求选择合适的模式以实现最低功耗。

另外,MSP430具有丰富的外设。

它包括通用输入/输出引脚、定时器、串口通信接口、模数转换器等。

这些外设可以满足各种应用的需求,并且具有灵活的配置和控制能力。

接下来,我们将介绍几个MSP430的设计实例。

首先是LED闪烁实例。

我们可以利用MSP430的通用输入/输出引脚和计时器来实现LED的闪烁,实现简单的灯光效果。

其次是温度监测实例。

我们可以利用MSP430的模数转换器和温度传感器来实现温度的实时监测,根据温度变化来控制其他外设的工作状态。

最后是无线通信实例。

我们可以利用MSP430的串口通信接口和无线模块来实现与其他设备的无线通信,如蓝牙通信或Wi-Fi通信。

以上这些设计实例只是MSP430的一小部分应用案例,MSP430还可以应用于很多其他领域,如智能家居、工业自动化、医疗设备等。

它的低功耗和高性能使其成为许多嵌入式系统的理想选择。

总之,MSP430是一种功能强大、灵活性高的单片机,通过灵活配置和控制外设,可以实现各种应用需求。

在接下来的学习中,我们将更深入地了解MSP430的内部结构和编程实践,为设计更复杂的嵌入式系统奠定基础。

MSP430-定时器A的使用(含OUTMOD模式详解及运用)

MSP430-定时器A的使用(含OUTMOD模式详解及运用)

MSP430-定时器A的使用(含OUTMOD模式详解及运用)第四讲第四讲第四讲第四讲定时器定时器定时器定时器A的使用的使用的使用的使用MSP430F413芯片中含有TimerA3模块,如图1-2所示。

其常用的外引线有三条:TACLK、TA1和TA2。

TACLK:定时器_A输入时钟(48脚),与P1.6和ACLK输出共用同一引脚。

TA1:定时器_A的第一通道输入、输出引脚(51脚)。

捕获方式:CCI1A 输入;比较方式:OUT1输出。

TA2:定时器_A的第二通道输入、输出引脚(45脚)。

捕获方式:CCI2A 输入;比较方式:OUT2输出。

1....定时器定时器定时器定时器A功能及结构功能及结构功能及结构功能及结构定时器A基本结构是一个十六位计数器,由时钟信号驱动工作,结构框图如图4-1所示。

图4-1定时器A结构图定时器A具有多种功能,其特性如下:(1)输入时钟可以有三种选择,可以是慢时钟(ACLK)、快时钟(SMCLK与单片机主时钟同频)和外部时钟。

(2)能产生的定时中断、定时脉冲和PWM(脉宽调制)信号,没有软件带来的误差。

(3)不仅能捕获外部事件发生的时间,还可选择触发脉冲沿(由上升沿或下降沿触发)。

定时器A功能模块主要包括:(1)计数器部分:输入的时钟源具有4种选择,所选定的时钟源又可以1、2、4或8分频作为计数频率,Timer_A可以通过选择4种工作模式灵活的完成定时/计数功能。

(2)捕获/比较器:用于捕获事件发生的时间或产生时间间隔,捕获比较功能的引入主要是为了提高I/O端口处理事务的能力和速度。

不同的MSP430单片机,Timer_A模块中所含有的捕获/比较器的数量不一样,每个捕获/比较器的结构完全相同,输入和输出都取决于各自所带控制寄存器的控制字,捕获/比较器相互之间完全独立工作。

(3)输出单元:具有可选的8种输出模式,用于产生用户需要的输出信号,支持PWM输出。

2....定时器工作模式定时器工作模式定时器工作模式定时器工作模式(1)停止模式:停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。

单片机MSP430 - Timer_A 定时器中断程序

单片机MSP430 - Timer_A 定时器中断程序

单片机MSP430 - Timer_A 定时器中断程序一、利用定时器定时功能,实现定时器单个溢出中断,实现P3.0 方波输出#include “cc430x613x.h”void main(){WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器P3DIR |= 0x04; // P3 口初始化,设置为输出模式TA0CCR0 = 32768; // 定义中断计数周期1s,时钟频率为32.768MHZ,32768 / 32768 = 1sTA0CCTL0 = CCIE; // TA0CCR0 捕获/比较中断寄存器中断使能TA0CTL = TASSEL_1 + MC_1 + TACLR; // TASSEL_1,ACLK 时钟源MC_1,增计数模式_BIS_SR(LPM3_bits + GIE); // 进入LPM3 低功耗模式,开启总中断}#pragma vector = TIMER0_A0_VECTOR__interrupt void Timer_A(void) // 定时器中断触发,P3 输出口异或,电平翻转{P3OUT – 0x04;二、利用定时器定时功能,实现定时器多个溢出,对应产生多个中断,实现P3.0 输出#include “cc430x613x.h”void main(){WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器P3DIR |= 0x04; // P3 口初始化,设置为输出模式TA0CCR0 = 32768; // 定义中断计数周期1s,时钟频率为32.768MHZ,32768 / 32768 = 1sTA0CCTL0 = CCIE; // TA0CCR0 捕获/比较中断寄存器中断使能TA0CCR1 = 3276; // 定义中断溢出周期100msTA0CCTL1 = CCIE; // TA0CCR0 捕获/比较中断寄存器中断使能TA0CTL = TASSEL_1 + MC_1 + TACLR; // TASSEL_1,ACLK 时钟源MC_1,增计数模式_BIS_SR(LPM3_bits + GIE); // 进入LPM3 低功耗模式,开启总中断}#pragma vector = TIMER0_A0_VECTOR__interrupt void Timer_A(void) // 1s 溢出中断P3OUT = ~0x04;}#pragma vector = TIMER0_A1_VECTOR__interrupt void Timer_A1(void) // 100ms 溢出中断{switch(TA0IV){case 2:P3OUT = 0x04;break;case 4:break;case 10:break;}}tips:感谢大家的阅读,本文由我司收集整编。

[精品]基于MSP430的便携式脉搏测试仪系统的设计与实现.doc

[精品]基于MSP430的便携式脉搏测试仪系统的设计与实现.doc

基于MSP430的便携式脉搏测试仪系统的设计与实现基于MSP430的便携式脉搏测试仪系统的设计与实现本便携式脉搏测试仪基于光电脉搏检测原理,采用MSP430单片机板作为核心控制器。

该设计通过红外发光二极管发射红外光,红外光透过率的改变反映手指血液容量的周期性变化,由光敏三极管接收受调制的光信号,经过滤波、放大等处理后,通过单片机AD采样获取脉搏信号。

测试仪采用128X64点阵型LCD液晶显示器,实现了实时显示每分钟的脉搏数以及光电脉搏信号波形动态图。

在此基础上该系统还实现了自启动测量、自动待机、数据回放及脉搏报警等功能。

【关键词】脉搏光电MSP430单片机全球人口老龄化、人们生活水平提高和偏远地区对医疗服务需求增加等因素正促使传统医疗方式的变革,移动性和便携性逐步成为影响医疗电子产业的关键。

另一方面,半导体技术的发展推动医疗创新的步伐以前所未有的速度向前迈进,在快速处理计算、高精度模数转换和无线网络技术进步的带动下,医疗电子产品走向便携式和小型化成为现实。

本系统设计的便携式脉搏测试仪是基于光电脉搏检测原理,通过红外发光二极管发射红外光,红外光透过率的改变反映手指血液容量的周期性变化,由光敏三极管接收受调制的光信号,经过滤波、放大等处理后,通过单片机AD采样获取脉搏信号。

测试仪采用128X64 点阵型LCD液晶显示器,实现了实时显示每分钟的脉搏数以及光电脉搏信号波形动态图。

1系统的总体方案脉搏信号是动脉血管中血流量的变化信号,随着心脏的跳动,动脉血管中血流量发生有节奏的周期性变化,通过这一现象来测得脉搏波信号。

本系统利用红外光透过手指,将脉搏信号转换成光信号,再通过光敏三极管接收转换成为电信号,将电信号进行放大,滤除杂波, 经过整形,利用单片机控制,通过LCD显示屏显示被测信号。

系统总体框图如图1所示。

2系统的参数分析与计算2. 1脉搏信号参数分析脉搏每分钟跳动的次数是一项重要的生理参数,它反应人体心脏工作的频率。

利用MSP430定时器A测量脉冲宽度范例

利用MSP430定时器A测量脉冲宽度范例
}
break;
case 10: //定时器溢出中断
overflow++;
break; //溢出计数加1
default:break;
}
}
2.功能:利用定时器A的捕捉能测量脉冲信号的脉宽
TACTL = TASSEL_2 + MC_2 ; //SMCLK=8M,L连续计数模式
_EINT(); //开总中断
LPM0;
_NOP();
pwm_wide=pwm_end-pwm_start;
while(1);
// | |
// | |
//说明:ACLK要进行8分频(4K),并将其作为外部的要捕获的脉冲;
//MCLK=SMCLK=8M;
*****************************************************************/
// | |
// | P1.5/ACLK|---+
// | | |
// | P2.0/TA2|<--+
1-程序描述
利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量。
本例程用到了定时器A的CCI1A端口(例如MSP430F14X的P1.2引脚)作捕获外部输入的脉冲电平跳变,同时结合简单的软件算法就能实现脉冲宽度的测量。在实际应用中可根据例程中的start,end,overflow三个变量来计算脉冲宽度。此功能模块在实际产品应用中体现出有较高的应用价值。
if(CCTL1&CM0) //上升沿
{
CCTL1=(CCTL1&(~CM0))|CM1;

利用MSP430的 定时器A(Timer_A)的比较捕获模式产生方波和PWM波

利用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波的波形和频率。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MSP430定时器A捕捉脉实例[调试通过,很好用]
微控论坛原创主贴作者:fangth
Microcontrol CODE
/*****************************************************************
//功能:利用定时器A的捕捉能测量脉冲信号的脉宽
//
//
// MSP430F449
// -----------------
// /|\| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// | P1.5/ACLK|---+
// | | |
// | P2.0/TA2|<--+
// | |
// | |
//说明:ACLK要进行8分频(4K),并将其作为外部的要捕获的脉冲;
//MCLK=SMCLK=8M;
*****************************************************************/
#include <msp430x44x.h>
int pwm_start,pwm_end,pwm_wide=0;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
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
FLL_CTL1 |= FLL_DIV_8; //ACLK要进行8分频,ACLK=4K
TACCTL2 =CAP+CM_3+CCIS_0+SCS+CCIE; //捕获模式,上升和下降都捕获,选择CCI2A,同步,捕获中断开
//Capture input select: 0 - CCI2A
TACTL = TASSEL_2 + MC_2 ; //SMCLK=8M,L连续计数模式
_EINT(); //开总中断
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;
}
检验方法:
在调试环境下,在watch 窗口观察pwm_end和pwm_start,然后相减!
我计算了一下。

在所给的例子中理论值pwm_end-pwm_start=976
通过观察的结果是978,还是有点误差,可能是由于晶振的值原因,计算上的舍入有点偏差。

相关文档
最新文档