MSP430教程10:MSP430单片机WDT看门狗定时器解析
MSP430寄存器手册
2-时钟模块
微控网为你准备的 MSP430F 单片机入门必修课
微控网
MSP430F1XX 系列时钟模块图 时基模块结构如上图 : MSP430 系列单片机基础时钟主要是由低频晶体振荡器,高频晶体振荡器,数字控制 振荡器(DCO),锁频环(FLL)及 FLL+等模块构成。由于 430 系列单片机中的型号不同, 而时钟模块也将有所不同。虽然不同型号的单片机的时基模块有所不同,但这些模块产 生出来的结果是相同的.在 MSP430F13、 14 中是有 TX2 振荡器的, 而 MSP430F11X,F11X1 中是用 LFXT1CLK 来代替 XT2CLK 时钟信号的.在时钟模块中有 3 个(对于 F13,F14)时钟 信号源(或 2 个时钟信号源,对于 F11X、F11X1): 1-LFXT1CLK: 低频 /高频时钟源.由外接晶体振荡器,而无需外接两个振荡电容器.较 常使用的晶体振荡器是 32768HZ。 2-XT2CLK: 高频时钟源.由外接晶体振荡器。需要外接两个振荡电容器,较常用 的晶体振荡器是 8MHZ。 3-DCOCLK: 数字可控制的 RC 振荡器。
微控网为你准备的 MSP430F 单片机入门必修课
微控网
1-复位模块
MSP430 单片机系统复位电路 从上 MSP430 系统复位电路功能模块图中可以看到了两个复位信号,一个是上电复位信 号 POR(Power On Reset)和上电清除信号 PUC(Power Up Clear)。 POR 信号是器件的复位信号,此信号只有在以下的事件发生时才会产生: □器件上电时。 □RST/NMI 引脚配置为复位模式,当 RST/NMI 引脚生产低电平时。 当 POR 信号产生时, 必然会产生 PUC 信号; 而 PUC 信号的产生时不会产生 POR 信号。 会引起产生 PUC 信号的事件: □POR 信号发生时。 □ 启动看门狗时,看门狗定时器计满时。 □ 向看门狗写入错误的安全参数值时。 □向片内 FLASH 写入错误的安全参数值时。 MSP430 单片机系统复位后器件的初始 当 POR 信号或 PUC 信号发生时引起器件复位后,器件的初始化状态为: □RST/NMI 引脚配置为复位模式。 □ I/O 引脚为输入模式。
看门狗定时器课件教学文案
#define WDT_ADLY_250 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0)
#define WDT_ADLY_16 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1)
寄存器宏定义
#define __MSP430_HAS_WDT__
SFR_16BIT(WDTCTL);
#define WDTIS0
(0x0001)
#define WDTIS1
(0x0002)
#define WDTSSEL
(0x0004)
#define WDTCNTCL
(0x0008)
#define WDTTMSEL
1
0
1
1
1
0
0
1
1
0
0
1
0
1
0
IS0
定时时间 / ms
1
0.056 Tsmclk * 26
0
0.5 Tsmclk * 29
1
1.9 Taclk * 26
1
8 Tsmclk * 213
0
16 Taclk * 29
0
32 Tsmclk * 215
1
250 Taclk * 213
0
1000 Taclk * 215
看门狗定时器课件
看门狗定时器
MSP430X5XX / 6XX系列单片机的看门狗定时器原理, 如下图所示:
WDT 的相关寄存器
一、WDT寄存器包括WDTCNT和WDTCTL,两个寄存器在 上电和系统复位内容全部清零 ,就是说MSP430的看门狗 在此时处于默认开启的状态。
MSP430
MSP430MSP430一、上电复位POR 和上电清除PUC二、低功耗控制但系统时钟发生器基本功能建立之后,CPU内的状态寄存器SR中的SCG1、SCG2、OscOff、CpuOff是低功耗的重要控制位;系统工作模式一共有6种,1种活动模式和5种低功耗模式;可以通过设置控制位使MSP430进入低功耗模式,由中断唤醒CPU,在执行完中断服务程序之后再回到低功耗模式,也可以在执行中断程序的时候间接访问堆栈修改状态寄存器的值,这样中断程序执行完之后就会进入另外一种低功耗模式或者处于活动模式。
三、时钟模块(一)、MSP430F149有三个时钟输入源:1、LFXT1CLK:如果LFXTCLK没有作用于SMCLK、MCLK信号,可以用OscOff置位以禁止LFXT1CLK工作;2、XT2CLK:若XT2CLK没有作用于SMCLK、MCLK信号,可以用控制位XT2OFF 关闭XT2;3、DCO振荡器:MSP430F149的两个外部振荡器产生的时钟信号都可以经过1、2、4、8分频后用作系统主时钟MCLK;当外部振荡器失效后,DCO 振荡器会自动被选作MCLK 的时钟源;(二)、MSP430F149提供3三种时钟信号:1、ACLK----辅助时钟,一般用于低速外设,由LFXT1CLK信号分频而得;2、MCLK----系统通过主时钟,一般用于CPU和系统,由以上三个时钟源任意一个分频而得;3、SMCLK---主要用于高速外设,由XT2CLK+XT2CLK 或LFXT1CLK+DCO分频而得。
(三)、如何控制MSP430的DCOCLK频率?——时钟模块的控制由5个寄存器来完成1、DCOCTL:定义8总频率之一2、BCSCTL1:控制XT2CLK的开启与关闭;控制LFXT1CLK的工作模式(低频或高频,高频下需要接高频时钟源);控制ACLK分频。
3、BCSCTL2选择MCLK时钟源;选择MCLK分频;选择SMCLK时钟源;选择SMCLK时钟源分频。
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。
第四章 MSP430F149看门狗定时器
#include <msp430x14x.h> void main(void) {
WDTCTL=WDT_ADLY_1000;//1000ms 定时 //WDT_ADLY_1000=WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL
P6DIR |=BIT0;//P6.0 输出 P6OUT |=BIT0;//P6.0 输出高电平关闭 LED 灯 IE1 |=WDTIE;//允许 WDT 中断 _EINT();//开放系统中断 while(1) {
例:设置看门狗间隔定时器模式,选择 ACLK(32768Hz)时钟源,定时 1s。
WDTCTL=WDTPW + WDTTMSEL + WDTCNTCL + WDTSSEL;
口令
定时工作模式 清除计数器
选择 ACLK
思考:
选择 ACLK(32786Hz)时钟源,定时 250ms/16ms/1.95ms,如何设置 WDTCTL?
说明:
WDTPW——口令,固定格式。
WDTCNTCL——计数器清零
WDTCTL.2(WDTSSEL)——WDTCTL 第二位时钟源选择位,
0:选择 SMCLK
1:选择 ACLK
WDTISx——定时间隔选择控制位,T 为时钟源时钟周期。
WDTISx=00,定时间隔 T×215 WDTISx=01,定时间隔 T×213
2、IE1 中断使能寄存器 1
7
6
5
4
3
2
1
0
NMIIE
WDTIE
rw-0
rw-0
NMIIE:非屏蔽中断允许控制位。
NMIIE=0,禁止 NMI 中断
016:MSP430_WDT看门狗定时器
016:MSP430_WDT看门狗定时器1, 看门狗定时器概述看门狗定时器(WDT)是 MSP430 系列单⽚机中常⽤的⼀种部件。
在⼯业现场,往往会由于供电电源、空间电磁⼲扰或其他原因引起强烈的⼲扰噪声。
这些⼲扰作⽤于数字器件,极易使其产⽣误动作,从⽽失去应有的控制功能,引起 MSP430 发⽣“程序跑飞”事故。
若不进⾏有效的处理,程序就不能回到正常的状态,从⽽失去应有的控制功能。
看门狗定时器正是为了解放这类问题⽽产⽣的,尤其是在具有循环结构的程序任务中更为有效。
在正常操作器件,⼀次 WDT 定时时间到,将产⽣⼀次器件复位。
如果通过编制程序使 WDT 定时时间稍⼤于程序执⾏⼀遍所⽤的时间时,并且程序执⾏过程中都有对看门狗定时器清零的指令,使计数器重新计数,则程序正常执⾏时,就会在 WDT 定时时间到达之前对 WDT 清零,不会产⽣ WDT 溢出,如果由于⼲扰使程序跑飞,则不会在 WDT 定时时间到达之前执⾏ WDT 清零指令,WDT 就会产⽣溢出,从⽽产⽣系统复位 CPU 需⽤重新运⾏⽤户程序,这样程序就可以⼜恢复正常运⾏状态。
MSP430 看门狗除了具有上述系统监测的特定⽤途之外,还可以作为内部定时器来使⽤,当选择的时间到达之后,和其他定时器⼀样产⽣⼀个定时中断。
此外 WDT 还可以被完全停⽌活动以⽀持超低功耗应⽤2 看门狗定时器结构3 看门狗定时器寄存器[1] WDTCTL 看门狗控制寄存器WDTCTL 由两部分组成:⾼ 8 位是对 WDT 操作的控制命令。
要写⼊操作 WDT 的控制命令,出于安全原因必须先正确写⼊⾼字节看门狗⼝令。
⼝令位 5AH,如果⼝令写错将导致系统复位。
读 WDTCTL 时,不需要⼝令,可直接读取地址 120H 中的内容,读出数据低字节位 WDTCTL 的值,⾼字节始终位 69H。
WDTCTL 除了看门狗定时器的控制位之外,还有两个⽤于设置 NMI 引脚功能。
WDTISx:选择看门狗定时器的计时输出其中 T 是 WDTCNT 的输⼊时钟源周期。
msp430 TIMER实验报告.
Msp430系列单片机的定时器实验1.看门狗定时器(WDT)1.1实验介绍计数单元WDTCNT:不能直接通过软件存取,必须通过WDTCTL来控制。
控制寄存器WDTCTL高8位为口令:写5AH,读69H低8位为WDT操作的控制命令HOLD:停止看门狗定时器工作。
0 :激活;1 :停止WDTSSEL:时钟源选择TMSEL:工作模式选择。
0:看门狗;1 :定时CNTCL:该位为1时,WDTCNT清除IS2、IS1、IS0:选择看门狗定时器的定时长度1.2 实验目的学会使用看门狗定时器(WDT)。
熟悉WDT相关寄存器1.3 实验原理1.4 实验步骤(1) 将PC 和板载仿真器通过USB 线相连;(2) 打开CCS 集成开发工具,选择Project->Import Existing CCS Eclipse Project,导入MSP430F6638_DemoV2.0\11.WTD 文件夹中的工程;(3) 选择对该工程进行编译链接,生成.out 文件。
然后选择,将程序下载到实验板中。
程序下载完毕之后,可以选择全速运行程序,也可以选择单步调试程序,选择F3 查看具体函数。
也可以程序下载之后,按下,软件界面恢复到原编辑程序的画面。
再按下实验板的复位键,运行程序。
(调试方式下的全速运行和直接上电运行程序在时序有少许差别,建议上电运行程序)。
1.5 实验现象实验板上对应的LED灯以一定周期闪烁。
1.6 关键代码实验一:#include<msp430f6638.h>void main(void){volatile unsigned int i;volatile unsigned int count=0;WDTCTL = WDTPW+WDTHOLD; // Stop WDTP4DIR |= BIT1 + BIT2 + BIT3; // P4.1,P4.2,P4.3 set as outputP4OUT &= ~(BIT1 + BIT2 + BIT3); // P4.1,P4.2,P4.3 set "0"for (i=0;i<60000;i++) ; //延时大约60msP4OUT |= (BIT1 + BIT2 + BIT3); // P4.1,P4.2,P4.3 set "1"for (i=0;i<60000;i++) ; //延时大约60msWDTCTL=WDTPW+WDTIS_4; //启动看门狗while(1) ; // continuous loop}实验二:#include<msp430f6638.h>void main(void){volatile unsigned int i;volatile unsigned int count=0;WDTCTL = WDTPW+(WDTCTL&0xff)+WDTHOLD; // Stop WDTP4DIR |= BIT1 + BIT2 + BIT3; // P4.1,P4.2,P4.3 set as outputP4OUT &= ~(BIT1 + BIT2 + BIT3); // P4.1,P4.2,P4.3 set "0"for (i=0;i<60000;i++) ; //延时大约60msP4OUT |= (BIT1 + BIT2 + BIT3); // P4.1,P4.2,P4.3 set "1"for (i=0;i<60000;i++) ; //延时大约60msWDTCTL=WDTPW+(WDTCTL&0xff)-WDTHOLD; //启动看门狗while(1){// WDTCTL=WDTPW+WDTCTL&0xff+WDTCNTCL; //计数器清零};分析:实验一与实验二结果相同,只不过在每个周期结束启动看门狗定时器时修改的寄存器参数不同。
MSP430单片机看门狗的使用
MSP430单片机看门狗的使用
1、看门狗有三种工作模式:停止模式,计时器模式,看门狗模式。
2、其中后两种模式可以选择的时钟源有:SMCLK 和ACLK。
3、使用后两种模式时要注意单片机所处的状态下看门狗能否工作,如单片
机处在LPM3 时只有ACLK 时钟,处在LPM4 下,没有时钟可以使用。
4、看门狗模式的使用方法
当看门狗计数溢出时,程序复位。
在程序中开启看门狗,在计数溢出前清空看门狗,或重置看门狗,以使其重新计数。
若程序跑飞,看门狗可能没有被清空或重置,就会溢出,使程序复位。
5、MSP430F2274 中,看门狗模式下可以计时最长为1s,若需要以更长的时间复位,可采取的方法,使用其他计数器,计数满后执行((void(*)())
RESET_VECTOR)();或计数满后往看门狗控制寄存器写个错误值或执行一条无效命令:如((void(*)())0x170)();0x170 是外围模块的一个地址,不可能是一个函数地址,所以执行此句将使程序复位。
6、看门狗的具体使用
6.1、停止模式:关闭看门狗
C 语言实现:WDTCTL = WDTPW + WDTHOLD
6.2、计时器模式:作为一个计时器使用,计数器满产生中断时执行看门狗中断函数。
C 语言实现:
主程序中开启看门狗计时器,如:WDTCTL = WDT_MDLY_8;
看门狗中断函数为:
#pragmavector=WDT_VECTOR。
MSP430学习点滴——看门狗定时器
MSP430学习点滴——看门狗定时器看门狗有三种工作模式:停止模式,计时器模式,看门狗模式。
控制寄存器WDTCTL 由两部分组成,高8 位用作口令,低8 位实现对WDT 的控制操作。
要实现对WDT 的操作控制,必须先写入高字节看门狗口令。
口令为5AH,头文件里一般将WDTPW 宏定义为5AH.WDTCTL 寄存器各位定义如下:15~8 7 6 5 4 3 2 1 0 口令HOLD NMIES NMI TMSEL CNTCL SSEL IS1 IS0IS0 IS1 选择看门狗定时器的定时输出,其中T 是WDTCNT 的输入时钟源周期。
一般宏定义WDTIS0 为0x0001,WDTIS1 为0x0002. 0 T*2(PUC 复位后的值)1 T*22 T*23 T*2SSEL选择WDTCNT 的时钟源。
一般宏定义WDTISSEL 为0x0004. 0 SMCLK (PUC 复位后的值) 1 ACLKCNTCL 当该位为1 时清除WDTCTL。
一般宏定义WDTCNTL 为0x0008.TMSEL 工作模式的选择。
一般宏定义WDTTMSEL 为0x0010. 0 看门狗模式(默认) 1 定时器模式NMI选择RST/NMI 引脚功能,在PUC 后被复位。
一般宏定义WDTNMI 为0x0020.0 RST/NMI 引脚为复位端 1 RST/NMI 引脚为边沿触发的非屏蔽中断输入。
NMIES 选择中断的边沿触发方式。
一般宏定义WDTNMIES 为0x0040. 0 上升沿触发NMI 中断1 下降沿触发NMI 中断HOLD 停止看门狗定时器工作降低功耗。
一般宏定义WDTHOLD 为0x0080. 0 WDT 功能激活1 时钟禁止输入,计数停止。
因此,可以根据WDTCTL 寄存器的TMSEL 和HOLD 控制位设置WDT 工作在看门狗模式、定时器模式和低功耗模式。
C 语言实现低功耗模式的语句:WDTCTL = WDTPW + WDTHOLD;C 语言实现定时器模式的语句:WDTCTL =WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0;C 语言实现看门狗模式的语句:设置看门狗:WDTCTL = WDT_MRST_0_5。
MSP430单片机硬件结构及原理讲解
3.3 MSP430单片机的中央处理器
15
16
MSP430CPU的主要特征
RISC指令集,27条内核指令和7种寻址模式 寄存器资源丰富 寄存器操作为单周期 16位地址总线 常数发生器 直接的存储器到存储器访问 位、字和字节操作方式
17
MSP430 CPU的寄存器
简写 功能
R0
程序计数器PC,指示下一条将要执行的指令地址。
20
(2)堆栈指针SP
系统堆栈在系统调用子程序或进入中断服 务程序时,能够保护程序计数器PC.
然后将子程序的入口地址或者中断矢量地 址送程序计数器,执行子程序或中断服务 程序。
子程序或者中断服务程序执行完毕,遇到 返回指令时,将堆栈的内容送到程序计数 器中,程序流程又返回到原来的地方,继 续执行.
可屏蔽
0FFF6H
11
看门狗定时器
WDTIFG
可屏蔽
0FFF4H
10
串口0接收
URXIFG0
可屏蔽
0FFF2H
9
串口0发送
UTXIFG0
可屏蔽
0FFF0H
8
ADC
ADCIFG
可屏蔽
0FFEEH
7
定时器A
CCIFG0
可屏蔽
0FFECH
6
定时器A
CCIFG1~2 , 可屏蔽
0FFEAH
5
TAIFG
P1
P1IFG.0~7
16位RISC中央处理器,125ns指令周期。可以 用较少的代码空间实现高性能的应用。
在系统可编程的FLASH,为开发编程提供便利。
4
MSP430x14x主要包括以下功能部件:
1. CPU 2. 存储器: 3. 外围模块:主要包括:时钟模块、
MSP430程序指南
MSP4301.时钟控制:430三个时钟源:LFXT1CLK低频时钟源,XT2CLK,高频时钟源,DCOCLK数控RC 振荡器。
2.三种时钟源可提供三种时钟信号:1.ACLK辅助时钟:ACLK是LFXT1CLK信号经过1、2、4、8分频得到的。
ACLK可由软件选作外围器件的时钟信号。
2.MCLK系统主时钟:可由软件来设置来源于低频时钟源,高频,数控。
之后可再经过1、2、4、8分频得到。
MCLK主要用于CPU和系统。
3.SMCLK:可有软件选这高频时钟来源,用于高速外围设备。
其中P1.4/SMCLK, P2.0/ACLK, P5.5/SMCLK, P5.6/ACLK。
时钟信号输出,可由PnSEL|=0xXX,l来设置特殊功能端口。
4.三个振荡器的控制位:1.低频LFXT1:OscOff;2.高频XT2CLK:XT2OFF;3.DCO:SCG0;5.一、时钟模块主要由三个寄存器来进行控制。
1.DCOCTL DCO控制器高三位:DCO.2、DCO.1 DCO.0定义8种频率之一,相邻两位相差10%,第五位详细调整频率。
其中DCO为7时表示选择最高频率。
2.BCSCTL1基本时钟控制器1位数7(最高)---XT2OFF:控制XT2的开启与关闭,0:开启;1:关闭。
6---------XTS:控制LFXT1工作模式:0:低频工作模式32768HZ;1:高频工作模式(前提接了相应的高频晶振)。
5,4--------DIV.1、DIV.0:控制ACLK分频(ACLK时钟来源于LFXT1)0:不分;1: 2分;2: 4分;3:8分;3-------XT5V:此位设置为0;2,1,0-----Rsel.0~Rsel.2 :0~7:最低标频~最高标频。
3.BCSCTL27,6-------SELM.1,SELM.0:选择MCLK时钟源(系统主时钟)0,1:DCOCLK为时钟源2:XT2CLK为时钟源3:时钟源为LFXT1CLK5,4-------DIVM.0,DIVM.1 选择MCLK分频。
MSP430看门狗定时器
MSP430看门狗定时器2.WDT interrupt:看门狗有两种工作模式,watchdog mode, interval mode。
WDTIFG 置位的两种情况:在看门狗模式下发生看门狗溢出。
在间隔定时模式下发生定时溢出,且全局中断使能GIE 和WDTIE 均开启。
WDTIFG 在中断服务程序后会自动清除该标记。
3.WDTCTLWDTPW:必须写0x5A.WDTHOLD:停止看门狗就设为1.WDTNMIES: NMI下降沿为1,上升沿为0.WDTNMI: NMI 为1.WDTTMSEL:间隔定时器模式设为1.WDTCNTCL:通过该位来清除WDT 计数器的值通常设为1 表示清除到0.WDTSSEL:设置时钟源ACLK(辅助系统时钟)为1,SMCLK(子系统时钟)为0.WDTISx:设置时间间隔。
0-3 对应不同的分频。
4.WDT 程序:默认在中断中SR 清零,也就是GIE 是0,所以默认不会发生中断嵌套。
只有在中断服务程序中打开GIE 才能发生中断嵌套。
#include unsigned int i=0;void main(void){WDTCTL = WDT_MDLY_32;// Set Watchdog Timer interval to ~30msIE1 |= WDTIE; // Enable WDT interruptP2DIR =0xFF; // Set P1.0 to output directionP2OUT = 0xFF;_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Watchdog Timer interrupt service routine#pragma vector=WDT_VECTOR__interrupt void watchdog_timer(void){P2OUT =。
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
MSP430教程10:MSP430单片机WDT看门狗定时器
看门狗定时器用来防止程序因供电电源、空间电磁干扰或其它原因引起的强烈干扰噪声而跑飞的事故。
程序中设置看门狗清零指令 WDTCTL=WDTPW+WDTCNTCL,当程序跑飞不能及时清零看门狗,导致看门狗溢出复位,这样程序可以恢复正常运行状态。
一、WDT寄存器包括WDTCNT和WDTCTL,两个寄存器在上电和系统复位内容全部清零1.记数单元WDTCNT:WDTCNT是16位增记数器,由MSP430选定的时钟电路产生的固定周期脉冲信号对记数器进行加法记数。
WDTCNT不能直接软件存取,必须通过看门狗定时器的控制寄存器WDTCTL来控制。
2.控制寄存器WDTCTL:WDTCTL由两部分组成,高8位用作口令,即5AH(头文件中定义为WDTPW),低8位是对WDT操作的控制命令。
写入WDT控制命令时先写入口令WD TPW,口令写错将导致系统复位。
读WDTCTL时不需口令,低字节WDTCTL的值,高字节读出始终为69H。
bit 15-8 7 6 5 43 2 1 0口令 HOLD NMIES NMI TMSEL CNTCL SSEL IS1 IS 0IS1 SI0 选择看门狗定时器的定时输出,T为WDTCNT的输入时钟源周期。
TMSEL WDT 工作模式选择0 0 T*2的15次方 0 看门狗模式0 1 T*2的13次方 1 定时器模式1 0 T*2的9次方 NMI 选择RST/NMI引脚功能1 1 T*2的6次方 0 RST/NMI为复位端SSEL 选择WDTCNT的时钟源 1 RST/NMI为非屏蔽中断输入0 SMCLK1 ACLKNMIES 选择NMI中断的边沿触发方式 HOLD 停止看门狗定时器工作0 上升沿触发NMI中断 0 看门狗功能激活1 下降沿触发NMI中断 1 时钟禁止输入,记数停止二、WDT的操作1.用户通过设置WDTCTL中的TMSEL和HOLD控制位使WDT工作在看门狗模式、定时器模式和低功耗模式三种模式。
看门狗定时器课件
程序对 WATCHDOG 计数溢出的控制 WDT看门狗模式 本程序中,不断对 WDT的看门狗计 数器及时清零, LED不再闪烁,主 要程序运行正常, 看门狗不会使程序 复位, 同时也保证了一旦 程序发生异常,可 以立即恢复到初始 状态
WDT_RESET
#include<msp430f6638.h> void main( void ) { unsigned int i; WDTCTL=WDTPW+WDTHOLD; //关闭看门 狗 P4DIR |=BIT0; P4OUT &=~BIT0; //暗 for(i=0;i<6000;i++); P4OUT |=BIT0; //亮 for(i=0;i<6000;i++); WDTCTL=WDTPW; //启动看门狗 while(1); }
#define __MSP430_HAS_WDT__ SFR_16BIT(WDTCTL); #define WDTIS0 (0x0001) #define WDTIS1 (0x0002) #define WDTSSEL (0x0004) #define WDTCNTCL (0x0008) #define WDTTMSEL (0x0010) #define WDTNMI (0x0020) #define WDTNMIES (0x0040) #define WDTHOLD (0x0080) #define WDTPW (0x5A00) #define WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTCNTCL) #define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0) #define WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1) #define WDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0) #define WDT_ADLY_1000 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL) #define WDT_ADLY_250 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0) #define WDT_ADLY_16 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1) #define WDT_ADLY_1_9 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) #define WDT_MRST_32 (WDTPW+WDTCNTCL) #define WDT_MRST_8 (WDTPW+WDTCNTCL+WDTIS0) #define WDT_MRST_0_5 (WDTPW+WDTCNTCL+WDTIS1) #define WDT_MRST_0_064 (WDTPW+WDTCNTCL+WDTIS1+WDTIS0) #define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTSSEL) #define WDT_ARST_250 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0) #define WDT_ARST_16 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1) #define WDT_ARST_1_9 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0)
msp430非常详细有用的讲解和例程
7
6
5
DCO.2 DCO.1 DCO.0
4 MOD.4
3 MOD.3
2 MOD.2
1 MOD.1
0 MOD.0
DCO.0-DCO.4 定义 8 种频率之一,可以分段调节 DCOCLK 频率,相邻两种频率相差 10%。而频率由注入直流发生器的电流定义。
MOD.0-MOD.4 定义在 32 个 DCO 周期中插入的 Fdco+1 周期个数,而在下的 DCO 周期 中为 Fdco 周期,控制改换 DCO 和 DCO+1 选择的两种频率。如果 DCO 常数为 7,表示 已经选择最高频率,此时不能利用 MOD.0-MOD.4 进行频率调整。
低功耗设置的技巧问题: 1、LPM4:在振荡器关闭模式期间,处理机的所有部件工作停止,此时电流消
耗最小。此时只有在系统上电电路检测到低点电平或任一请求异步响应中断的外部中断 事件时才会从新工作。因此在设计上应含有可能需要用到的外部中断才采用这种模式。 否则发生不可预料的结果。
2、LPM3:在 DC 发生器关闭期间,只有晶振是活动的。但此时设置的基本时序条 件的 DC 发生器的 DC 电流被关闭。由于此电路的高阻设计,使功耗被抑制。注:当从 DC 关闭到启动 DC0 要花一端时间 (ns-us)
微控网供应 MSP430 单片机系列开发工具,欢迎订购。 模块列表 1- 复位模块 2- 时钟模块 3- IO 端口模块 4- WDT 看门狗模块 5- Timer A 定时器模块 6- 比较器 A 模块 7- ADC12 数模转换模块 8- USART 串行异步通讯模块 9- CPU 模块及全局资料 10-MSP430 其它应用介绍
3-SMCLK: 子 系 统 时 钟 , SMCLK 是 由 2 个 时 钟 源 信 号 所 提 供 . 他 们 分 别 是 XT2CLK(F13、F14)和 DCO,如果是 F11、F11X1 则由 LFXT1CLK 代替 TX2CLK。同样 可设置相关寄存器来决定分频因子及相关的设置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
**description :PORT1中断服务函数,按键S1按下时在P1.7
**description产生中断,此时更新CCR0值,实现更改LED
**description闪烁频率的增减
**input:延时时间(ms)
**output:N/A
****************************************************/
}
}
interrupt[WDT_VECTOR] void watchdog_timer(void)
{
P1OUT^=0x01;}源自// MSP430x5xx
// -----------------
// /|\| XIN|-
// | | XOUT|-
// --|RST |
// | P1.7|-->S1
// | P1.0|-->LED
unsigned int CCR0 = 100;
unsigned int step = 1;
unsigned int step_default = 1;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
clk_set();
P1DIR |= BIT2; // P1.2 output
三、看门狗应用
使用看门狗定时器产生一个方波(周期性取反P1.0)
#include "msp430x201x.h"
void main(void)
{
WDT=WDT_MDLY_32;
IE1 |=WDTIE;
P1DIR |=0x01;
_EINT();
for(;;)
{
_BIS_SR(CPUOFF);
_NOP();
二、WDT的操作
1.用户通过设置WDTCTL中的TMSEL和HOLD控制位使WDT工作在看门狗模式、定时器模式和低功耗模式三种模式。
a.看门狗模式(TMSEL=0 ,HOLD=0)如果记数时间到,就会产生复位和激活系统上电清除信号,系统从上电复位的地址重启动中断向量为RESET_VECTOR
b.定时器模式(TMSEL=1,HOLD=0)这一模式产生选定时间的周期性中断中断标志位为WDTIFG中断向量为WDT_VECTOR
c.低功耗模式(TMSEL=X,HOLD=1) WDTCTL=WDTPW+WDTHOLD;
2.WDT通过SSEL和IS0 IS1 3位可以确定与8种时钟源相关的时间(ACLK=32768Hz,SMCLK=1MHz)
WDT_MDLY_32 WDT_MRST_32
WDT_MDLY_8 WDT_MRST_8
P1DIR |= BIT3+BIT4+BIT5;
P1OUT &= 0xC7;
P1SEL |= BIT2;
timerA0_ini();
timerA1_ini();
S1_ini();
_EINT();
while(1);
}
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
# pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
#include <msp430f5529.h>
//函数声明
void timerA0_ini(void);
void timerA1_ini(void);
void clk_set(void);
void S1_ini(void);
unsigned int flag = 0;
unsigned int flagFREQ = 3;
看门狗定时器用来防止程序因供电电源、空间电磁干扰或其它原因引起的强烈干扰噪声而跑飞的事故。程序中设置看门狗清零指令 WDTCTL=WDTPW+WDTCNTCL,当程序跑飞不能及时清零看门狗,导致看门狗溢出复位,这样程序可以恢复正常运行状态。
一、WDT寄存器包括WDTCNT和WDTCTL,两个寄存器在上电和系统复位内容全部清零
1.记数单元WDTCNT:WDTCNT是16位增记数器,由MSP430选定的时钟电路产生的固定周期脉冲信号对记数器进行加法记数。WDTCNT不能直接软件存取,必须通过看门狗定时器的控制寄存器WDTCTL来控制。
2.控制寄存器WDTCTL:WDTCTL由两部分组成,高8位用作口令,即5AH(头文件中定义为WDTPW),低8位是对WDT操作的控制命令。写入WDT控制命令时先写入口令WDTPW,口令写错将导致系统复位。读WDTCTL时不需口令,低字节WDTCTL的值,高字节读出始终为69H。
{
if (flag == 0)
{
TA0CCR1 += step;
if (TA0CCR1 >= TA0CCR0)
{
flag = 1;
}
}
else if (flag == 1)
{
TA0CCR1 -= step;
if (TA0CCR1 <= 0)
{
flag = 0;
}
}
}
/***************************************************
bit 15-8 7 6 5 4 3 2 1 0
口令HOLD NMIES NMI TMSEL CNTCL SSEL IS1 IS0
IS1 SI0选择看门狗定时器的定时输出,T为WDTCNT的输入时钟源周期。TMSEL WDT工作模式选择
0 0 T*2的15次方0看门狗模式
0 1 T*2的13次方1定时器模式
1 0 T*2的9次方NMI选择RST/NMI引脚功能
1 1 T*2的6次方0 RST/NMI为复位端
SSEL选择WDTCNT的时钟源1 RST/NMI为非屏蔽中断输入
0 SMCLK
1 ACLK
NMIES选择NMI中断的边沿触发方式HOLD停止看门狗定时器工作
0上升沿触发NMI中断0看门狗功能激活
1下降沿触发NMI中断1时钟禁止输入,记数停止
WDT_MDLY_0_5 WDT_MRST_0_5
WDT_MDLY_0_064 WDT_MRST_0_064
WDT_ADLY_1000 WDT_ARST_1000
WDT_ADLY_250 WDT_ARST_250
WDT_ADLY_16 WDT_ARST_16
WDT_ADLY_1_9 WDT_ARST_1_9