MSP430G2433定时器开启1秒计时
msp430设计数字秒表

使能中断
判断按键是否按下 判断是否处于暂停 状态
是
是
判断按下的按键是 哪个
否
计数值自加 1
是暂停按键
否
是清零按键
改变模式,暂停计 数值增加
清零计数值
中断结束
判断 num参数的值 并显示
作品完整度展示:实物图
团队协作展示
队员能力及团队分工 队员:范昊洋:算法设计与程序编写 周云浩:查阅相关资料并debug 姚 冠:基础部分驱动程序编写
设
置
TASSEL_1+MC_1
+TACLR +ID_0 操 作 为 : 时 钟挂载ACLK,定时器计数器 自动清除,预分频为1(不分 频),逐增模式(计数到 CCR0 值 时 清 零 重 新 开 始 并 产生中断)
程序分析
程序流程图
定期器中断标志位 置1 初始化硬件IO 口, OLED屏,定时器 设置
“最小系统设计实验答辩” “数字秒表系统设计”
“第七组” “万事屋” “队员:范昊洋 周云浩 姚冠”
目
录
1
整体简述
3 4
思考过程
作品技术实现展示 作品完整度展示
5
团队协作展示
整体简述: 设计作品
本次试验制作的是 一个数字秒表。根 据题目要求,设计 一个有暂停,清零 功能的数字秒表设 备。
定时器A
{ delay(10); num = 0; LCD_CLS(); }
}
else mode = 1; }
if(!(P1IN&BIT1)== 1)
程序分析
while(1)
{ keyscan(); if(num<10)
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的使用

第四讲定时器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-定时器模块(定时、计数、捕获)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同步/异步捕获模式选择位,然后连接到捕获比较寄存器。
第4讲MSP430单片机定时器2

定时器 A —— 主要内容
◆
定时器A的特性
◆ 定时器A的结构 ◆ 定时器A的工作原理
定时器工作模式 捕获/比较模块 输出单元 Timer_A中断
◆ 定时器A的典型应用
定时器 A —— 特性(1/1)
◆ 定时器 A 由一个16位定时器和多路捕获/比较通道组成。 ◆ MSP430X5XX
/ 6XX系列单片机的Timer _A有以下特性:
看门狗定时器 —— 概述
◆ 看门狗定时器,主要作用:
用于在“程序跑飞”时,WDT就会产生溢出,从而产生系 统复位,CPU需要重新运行用户程序,这样程序就可以又回 到正常运行状态。
◆ MSP430 看门狗模块具有以下特性:
8 种软件可选的定时时间 看门狗工作模式 定时器工作模式 带密码保护的 WDT 控制寄存器 时钟源可选择 为降低功耗,可停止 时钟失效保护
【例1】 利用TA0定时器,使其工作在增计数模式,采用SMCLK作为其计数参考时钟,并启用 TA0CCR0计数中断,在TA0中断服务程序中反转P1.0口状态,以便于用示波器进行观察。 #include <msp430f6628.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 P1DIR |= 0x01; // P1.0 设为输出 TA0CCTL0 = CCIE; // CCR0中断使能 TA0CCR0 = 50000; TA0CTL = TASSEL_2 + MC_1 + TACLR; // SMCLK, 增计数模式, 清除TAR计数器 __bis_SR_register(LPM0_bits + GIE); // 进入LPM0,使能中断 } // TA0中断服务程序 #pragma vector=TIMER0_A0_VECTOR __interrupt void TIMER0_A0_ISR(void) { P1OUT ^= 0x01; // 反转P1.0口输出状态 }
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。
MSP430G2433的DS18B20程序

程序说明:由于DS18B20的时序要求比较严格,即使同一程序,在不同平台或者在同一平台不同晶振频率下,都很容易出现调试出现错误,最好的解决办法就是通过示波器查看其驱动时序是否按照说明书的要求。
本程序使用的平台是MSP430G2433,使用内部晶振1M频率,MSP430G2433有内部上拉电阻,DS18B20可以不用接上拉电阻。
#include "io430.h"#include "in430.h"#include <stdlib.h>#include "DS18B20.h"unsigned int temperature;void UartPutchar(unsigned char c);unsigned char UartGetchar();//-----------------------------------------------------------------------------//主函数void main (void){WDTCTL = WDTPW + WDTHOLD; // Stop WDTBCSCTL1 = CALBC1_1MHZ; // Set DCODCOCTL = CALDCO_1MHZ;_EINT(); //使能全局中断while(1){temperature=Do1Convert();}}///////DS18B20.hvoid DelayNus(unsigned int n);unsigned char Init_18B20(void);void Write_18B20(unsigned char wdata);unsigned char Read_18B20(void);void Skip(void);void Convert(void);void Read_SP(void);unsigned int ReadTemp(void);unsigned int Do1Convert(void);unsigned char DS18B20_ReadBit(void);void DS18B20_WriteBit(unsigned char Data);//DS18B20.c#include "io430.h"#include "in430.h"typedef unsigned char uchar;typedef unsigned int uint;#define DQ1 P1OUT |= BIT0#define DQ0 P1OUT &= ~BIT0#define DQ_in P1DIR &= ~BIT0#define DQ_out P1DIR |= BIT0#define DQ_val (P1IN & BIT0)/*******************************************函数名称:DelayNus功能:实现N个微秒的延时参数:n--延时长度返回值:无说明:定时器A的计数时钟是1MHz,CPU主频8MHz 所以通过定时器延时能够得到极为精确的us级延时********************************************/void DelayNus(uint n){CCR0 = n;TACTL |= MC_1; //增计数到CCR0while(!(TACTL & BIT0)); //等待TACTL &= ~MC_1; //停止计数TACTL &= ~BIT0; //清除中断标志}/*******************************************函数名称:Init_18B20功能:对DS18B20进行复位操作参数:无返回值:初始化状态标志:1--失败,0--成功********************************************/ uchar Init_18B20(void){uchar Error;DQ_out;_DINT();DQ0;DelayNus(500);DQ1;DelayNus(55);DQ_in;if(DQ_val){Error = 1; //初始化失败}else{Error = 0; //初始化成功}DQ_out;DQ1;_EINT();DelayNus(400);return Error;}/******************************************* 函数名称:Write_18B20功能:向DS18B20写入一个字节的数据参数:wdata--写入的数据返回值:无********************************************/ void Write_18B20(uchar wdata){uchar i;_DINT();DQ_out;DQ1;for(i = 0; i < 8;i++){DQ0;if(wdata & 0X01) DQ1;else DQ0;wdata >>= 1;DelayNus(50); //延时50usDQ_out;DQ1;_NOP();_NOP();_NOP();}_EINT();}/******************************************* 函数名称:Read_18B20功能:从DS18B20读取一个字节的数据参数:无返回值:读出的一个字节数据********************************************/ uchar Read_18B20(void){uchar i;uchar temp = 0;_DINT();for(i = 0;i < 8;i++){temp >>= 1;DQ0;_NOP();_NOP();DQ1;_NOP();DQ_in;if(DQ_val) temp |= 0x80;DelayNus(10); //延时45us_NOP();_NOP();_NOP();_NOP();DQ_out;DQ1;_NOP();_NOP();_NOP();_NOP();DelayNus(10); //延时10us }_EINT();return temp;}/******************************************* 函数名称:Skip功能:发送跳过读取产品ID号命令参数:无返回值:无********************************************/ void Skip(void){Write_18B20(0xcc);}/******************************************* 函数名称:Convert功能:发送温度转换命令参数:无返回值:无********************************************/ void Convert(void){Write_18B20(0x44);}/******************************************* 函数名称:Read_SP功能:发送读ScratchPad命令参数:无返回值:无********************************************/ void Read_SP(void){Write_18B20(0xbe);}/******************************************* 函数名称:ReadTemp功能:从DS18B20的ScratchPad读取温度转换结果参数:无返回值:读取的温度数值********************************************/ uint ReadTemp(void){uchar temp_low;uint temp;temp_low = Read_18B20(); //读低位temp = Read_18B20(); //读高位temp = (temp<<8) | temp_low;return temp;}/*******************************************函数名称:ReadTemp功能:控制DS18B20完成一次温度转换参数:无返回值:测量的温度数值********************************************/ uint Do1Convert(void){uchar i;for(i = 20;i > 0;i--)DelayNus(60000); //延时800ms以上do{i = Init_18B20();}while(i);Skip();Convert();for(i = 20;i > 0;i--)DelayNus(60000); //延时800ms以上do{i = Init_18B20();}while(i);Skip();Read_SP();uint t=0;float tt=0;t=ReadTemp();tt=t*0.0625; //精确到0.0625t= tt*10; //放大100倍输出return t;}。
msp430g2553定时一秒的程序

#include "msp430g2553.h"//定时一秒unsigned char num;void main(){WDTCTL = WDTPW + WDTHOLD;BCSCTL3 |= LFXT1S_2; // Set LFXT1为vol时钟即12kHZCCTL0|= CCIE; //设置捕获/比较控制寄存器,CCIE=0x0010,使能捕获比较中断CCR0 =12000; //设置捕获/比较寄存器,初始值为12000,对于ACLK时钟频率为12khz的频率,相当于1sTA0CTL = TASSEL_1 +TACLR+MC_1; // 设置定时器A控制寄存器,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引脚取反,就是使发光二极管闪烁}#include "msp430g2553.h"unsigned int times,time1;void TimerA_Init(void){TACTL = TASSEL_1 + ID0 + TACLR ;CCTL0 = CCIE;CCR0 = 16432;TACTL |= MC0;}int main( void ){WDTCTL = WDTPW + WDTHOLD; TimerA_Init(); //定时器初使化P1DIR=0x01;_EINT(); // interrupt enablefor(;;);}#pragma vector = TIMER0_A0_VECTOR __interrupt void Timer_A (void){times++;if(times == 2){times = 0;P1OUT^=BIT0;}。