|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
想通过程序实现闪烁功能,不使用看门狗程序很容易就跑死了,现在还不明白看门狗怎么使用,请大家能够指点
& j6 b0 t1 ~, L$ E# {) d% Y, f4 J#include "msp430x14x.h"
7 @0 s' W/ ?) r, H; M* I3 I$ i#define UINT8 unsigned char( G+ j; G% h+ ?$ o
#define UINT16 unsigned int2 j6 ~5 e5 p6 F1 X
#define False 0
( @5 E, }* @) ^! V#define True 1) R! c- Y, H# V3 [/ n: e; q4 P4 v
! S" ~0 T! E& F: Z2 H0 R3 d
UINT16 timer_Counter = 0; |- }* _! r; ^3 H, C6 e
UINT8 Timer_Flag = False;/ X* G# Y# o6 Y" c0 P! n
UINT8 Light_Start = False;5 `0 A& v. P: t& z: P
UINT8 Fun_Choose = False;
! f: M- ~4 `5 h4 d. Z0 W! X9 E* a8 f7 _4 J3 n2 O) v
/***********时钟初始化函数***********/
$ n' G" i. u, w9 A1 pvoid clk_init()
* Z: q0 |- Q7 S6 I* S0 a$ h{0 |, d& U2 P6 f! U t1 X+ b% m
UINT8 i;
% b( L0 k. @: a' g3 ~ R) @- U2 q BCSCTL1&=~XT2OFF; //打开高频晶体振荡器
) M3 ~1 ] F5 b, R* ]% | BCSCTL2|=SELM_2+SELS; //MCLK和SMCLK都选择XT2,8MHZ
# g! s( k, a% h# m! g3 K U do
( G# m% b' k: l! `2 J {/ L. j5 I# @( _" v, a
IFG1&=~OFIFG; //清除振荡器失效标志7 r7 k* ?9 R, n% a% D
for(i=0xff;i>0;i--); //延迟待稳定
" v* p" }; P. J q* J- q $ B) e O: @1 A$ [, d
}
, `6 v& r: F3 _2 H) P while((IFG1&OFIFG)!=0);- b( x' q5 u9 Z( a
} 3 H+ w+ ~# ^$ G/ ^) D/ a. ], w' d
) q' I2 n% `2 \' B# vvoid GPIO_Init()
2 ]0 a2 |+ S6 H# S1 g{
; p- h5 i! [& ^8 G8 w P1DIR &= ~BIT5;3 R. s( {3 S2 M4 F
P1OUT |= 0xFF;
$ g% Y7 o8 g; s4 d9 e) V P2DIR |= BIT6;
0 g8 @# y. h5 e9 N P2OUT &= 0x00;+ v5 D; J0 Y2 r8 K+ T
* ?$ t( Z- i( W* [ P5DIR |= BIT4;5 D7 N. e1 c- |$ J" s
P5OUT &= ~BIT4; 2 N" p* J Q: h
}
2 {0 E" _1 e |# \1 W0 m% U/*****************TimerA_Init*******************/- Z" U) }2 c+ ^3 l" R6 f
void TimerA_Init()7 x" o; w* I. k* t6 ?
{- e6 P& N, @& r2 L4 K" n
TACTL|=TASSEL_2+MC0+TACLR+TAIE+ID_3;
2 H5 S% K* G6 |1 G& O% b5 V7 @ CCTL0 = CCIE;
/ [5 O" X% }. v) b% d0 b8 D7 a TACCR0=29999; ^3 ^/ L$ v! }5 p" k- a, s
}
. y+ P# t. k ?. e# L: g* {& |//******************************************************
8 I, i$ {" _8 `; O7 ~; R% v//352微秒延时程序/ H0 v# H" i A
void delay_352us(UINT16 i)//352us延时程序
3 N- p& q! p* j: j5 z$ Z{9 s8 v8 _$ d" t
UINT8 j;
: G2 r( p& K# p' k, w4 r5 k while(i--)2 F/ w( x- _" ?2 C
{* R0 X) i# b0 P1 E& t' y
for(j=0;j<255;j++)5 e+ Q; u; O9 }8 M" X t4 n! A! ]# L
{ ! j$ O; e; @, [5 u9 x `
_NOP();. U$ i( j) R9 ?' S9 X) _+ n
_NOP();
, k) i/ Q2 I- u( @: t$ F4 C- b _NOP();4 _/ E) H2 ?! c5 d* z( M
_NOP(); # Y! u; T: s( F4 g: h$ f4 ]5 d
}
" B8 v3 G/ b) u: a } R: m: P% J. ~/ b
} 2 T+ V9 W! k: J) O. J) R
+ _1 H$ J$ y& L3 F6 R, F2 |
/************************************************/
$ G4 V! z& n$ U6 ]) u! `9 |/* 主函数 */
) m1 I6 }, f+ L/************************************************/
8 X# F$ T5 v9 E5 V0 t. P! tvoid main(void). X/ F |4 i% {* g0 e
) y" F6 s$ M0 x$ Z8 \7 p
{& j7 d: I$ u# C3 ]5 c2 H* f
4 U; }# Y! {, o1 F0 ~// WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer. P- O! e1 _$ z. K
; E; V! f) s! H1 d5 S
WDTCTL = WDTPW + WDTCNTCL;* ~8 J, F3 ?* k" C2 m* z5 e+ D. f
- l! @$ x: I ^6 N. J) I P5DIR |= BIT4; // Set P5.4 to output direction
9 P" ?. R5 x; W; o P5OUT ^= BIT4; , |1 Q) k. L0 H+ b' _
clk_init();
3 E: B% z& L3 h3 X
2 d+ b- T1 d8 Q' g GPIO_Init();" m: P0 ?4 P1 A+ r% }4 g' O6 p
0 K4 o5 f: l; y0 n
TimerA_Init();
/ a1 i$ \! s% t& j# v
0 f% E5 P+ e4 L( s6 t: S. T5 U$ K3 _% C' k _EINT();7 ^% m% W: n& F/ ?0 u
LPM0;
" b% g3 r9 z6 J# ~ WDTCTL = WDTPW + WDTCNTCL;
( l" @/ a* N7 ~5 |* c$ b. V* n4 C% `& N& p& \
3 Y" X3 |! s5 _, a& z! }
( ]4 t( c/ Z6 t2 n$ L}
& M6 E5 `5 M/ K" m" R
9 u9 y' P( O3 N/************定时器A中断函数******************/9 {8 s1 v4 {/ a! E+ _
#pragma vector=TIMERA0_VECTOR$ w$ U M/ K5 [/ `6 V! F0 A; b$ D
__interrupt void timer0()) K9 T; Z& V+ [) f) S6 ~: t
{
# S- U. o% U( W' Z# _ switch(TAIV)# r7 H* o) ]: F0 h. m
{
! m* \: x, L& e3 N) v3 h' V case TAIV_TACCR1:break;9 B1 h! l$ V& @; E4 h1 Y, w2 ]
case TAIV_TACCR2:break;
. F; v+ T# _# i1 H case TAIV_TAIFG:
- [; v8 w& I& ^7 Y, |8 N {
/ N- R8 m2 g5 ~# C/ J# k+ ?& a Timer_Counter++;
" c" ?& Q' f# N2 g' J2 S+ z if(((P1IN & BIT5)>>5) == 1)
. ^1 V l; X, [8 x" } {
' ~6 c# ]; k& G7 |1 `* G' y Fun_Choose = False; 8 S F2 w# a- N+ J+ C( }* m
}
4 ?- @& n! }, e# O& D; s% q4 N else& j( N# T/ y1 W) c
{ ; I! {1 Z; _( X% E+ v( T
Fun_Choose = True;- c2 J0 _8 Q, x
}
. M0 A% r, F0 `/ e% q9 L3 L
3 M# f2 {: }; L7 V! \ ! h4 f7 \: s4 [; S* T. f* h
if(Fun_Choose == True)
4 Z z. `' S" ~' q( R {
# H" V( i7 ?! B. c2 R if(Timer_Counter >= 11)
1 @1 H( e6 w) X- Q0 S3 U
( ^7 f. }% r5 f. u {( K8 F. ~2 }8 g, ~; F
% F8 ~: G6 B$ T! I! Q) t( \7 V5 C Timer_Flag = 0;
+ u! B$ r; z' j, Q; ] F# d; p 4 n5 k9 f0 {9 v
}
, c# ~( ^# q& V3 v' K/ f7 x* a( Y* ] if(Timer_Counter >= 33)
# i) C/ z, y* Y6 p3 y/ o {' I, N3 C) ^+ i2 R/ L& l
Timer_Counter = 0;7 E9 @$ t5 T$ i+ m+ y
Timer_Flag = 1;
0 ?: p5 [ p+ L0 A! @$ X } " G0 l7 A0 D. u9 ~8 X. j) ]5 u
if(Timer_Flag == True)
0 @0 V. h( k0 p7 p/ m* X {
' x( F& {7 ^( e) r5 w P2OUT |= BIT6;6 ]( m; ]3 k; u3 Z1 N' w
P5OUT |= BIT4;+ ?( e& s5 J$ e4 ]
}
0 G; [* S6 }, X1 h: Q7 y else
- l9 f/ f7 c' G: C9 R0 L1 ?8 W+ F {, C6 @- [5 |7 U( C. o7 c" T
P2OUT &= ~BIT6;8 k" [+ F- ?8 B2 }
P5OUT &= ~BIT4;7 `8 y6 ^8 |6 Z% w! p/ o' ]& z
}
: M) P6 @- e: c4 X. y `3 g }4 I1 E8 P0 n+ k8 d9 ]2 D
else
& y( A2 F( S, V; I. c8 | {) I/ _: s9 [6 I( f& q+ q: u
P5OUT |= BIT4;# E# K3 z+ D9 | H5 E5 ^3 i- q9 _
P2OUT |= BIT6;
+ z4 l& z+ I9 ]; v) ? } ! q S+ G) d C
}4 W& ]4 q" M% G2 d
break;
9 R, [- b' |0 |5 ] }7 M, y. G. y, x( K3 r5 ?$ F* }
}+ A* s4 A$ z+ a/ w' P# B
' N$ X! S9 ?) S- z
|
|