|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
想通过程序实现闪烁功能,不使用看门狗程序很容易就跑死了,现在还不明白看门狗怎么使用,请大家能够指点. P) K! g1 ^% Z9 M4 |+ X; o) l
#include "msp430x14x.h"$ ?: Q) m: @! ]( K J9 N& m
#define UINT8 unsigned char" s$ a" U2 T# y' K, L' V/ S
#define UINT16 unsigned int
0 o8 F* S0 ^9 e#define False 0- U2 Q' o; Z, L- x/ q7 Q& I( U
#define True 14 z, l" ~) A: k: W+ T7 P. j
0 L2 Q% |: u0 v6 Q5 h
UINT16 timer_Counter = 0;# p: O8 I) R6 V2 t* G! O0 B; I: \1 n
UINT8 Timer_Flag = False;
0 X1 O% p4 s: a a8 [UINT8 Light_Start = False;
* H5 s/ |8 K3 H- M/ F7 j+ d0 jUINT8 Fun_Choose = False;
- `8 b9 @, f! w8 }5 [9 a6 D( r* M" }& J
/***********时钟初始化函数***********/
7 ^3 @% k* Y- ?1 c' H$ |9 Qvoid clk_init()+ w2 R1 @% ]; e* r+ n! b
{: k/ Y& R7 ^6 k5 E% g' `
UINT8 i; 2 M I6 ^ g: b/ i% m: s
BCSCTL1&=~XT2OFF; //打开高频晶体振荡器3 m1 Y; s9 p3 Z% l" K. D7 K
BCSCTL2|=SELM_2+SELS; //MCLK和SMCLK都选择XT2,8MHZ
4 V4 K( f0 }* @9 ]4 Z do
% O/ O4 T( E% d! ~2 j. `2 v {
9 O: r* P7 T9 T& d9 @+ c1 U IFG1&=~OFIFG; //清除振荡器失效标志
) i/ R: I" Z. ^: J+ T2 g2 U2 P# n for(i=0xff;i>0;i--); //延迟待稳定
" C, G. ]( F! X% m ]! }
2 h( `9 b1 X) K( o0 I. _ }
# O' W4 K: ]% w- {6 v! U5 } while((IFG1&OFIFG)!=0);3 |, G) q! [ D+ |1 Y# a6 `
} % |9 {! x# @1 I. \+ X0 l5 R
6 f8 t' r! M+ r8 Z, S* |; X+ U& Wvoid GPIO_Init()( ]5 D9 Q! A8 h8 S; c2 V" E6 S5 b
{
# J3 B# D! {6 u P1DIR &= ~BIT5;+ P8 x' g% A+ D" E# l, R0 p' a a7 E; w; U
P1OUT |= 0xFF;* Z7 ^5 I+ t, C: c* i: ~7 ^. D
P2DIR |= BIT6;7 l8 |! I$ f0 M" O: i( I0 u& Y
P2OUT &= 0x00;
`% s( L0 L+ V3 v+ y! U$ f
7 f7 G# [% m/ j4 A8 O P5DIR |= BIT4;
! K7 v# V: l- {& I/ | P5OUT &= ~BIT4; ( ^' x! ^" c- J
}# V) E* e4 d3 v) R& H1 F
/*****************TimerA_Init*******************/3 [- Y( f, {, I) Y" {
void TimerA_Init()3 ]( ~& G0 z& c9 z
{
" t1 F2 a* ^: L' }6 @. J TACTL|=TASSEL_2+MC0+TACLR+TAIE+ID_3;, m9 ^, A1 d6 k$ |$ u* _
CCTL0 = CCIE; 1 X* ]# u0 y# B. |' j
TACCR0=29999;
* F' R& o# U/ e& W; ~& s}' b; l& Y! N+ y# S6 X' A
//******************************************************0 Q& w: i8 C7 F: Y' q4 Z
//352微秒延时程序
) [' F- Y. ~1 |6 Y0 Jvoid delay_352us(UINT16 i)//352us延时程序
+ h# b i2 s$ J7 t8 A9 S2 z H, [; B{
% l) \2 l( S9 D7 E; V8 K, a6 F UINT8 j;# M @" J$ s, i) Z$ X6 ~- S6 H! |
while(i--)
) r( f3 ]: g4 J: d+ w0 ] {9 A/ G4 d- h- Q7 F
for(j=0;j<255;j++)
4 `, }* ~$ Q3 d) Q { & X H7 _1 `0 N: J# |
_NOP();' T, _/ T& ^$ K \4 }6 j- S) ~
_NOP();" r1 G6 R1 h; P4 q( j% M5 ]
_NOP();
; X+ q' @9 L, `9 b _NOP(); 3 ~# w* X {2 H5 ?. S2 ^
}/ m2 f k2 Z' t6 I9 ]
}
' V' W' \7 M: b4 c}
# {+ k0 \, l6 m9 v1 \6 o0 m) h% }) F6 f6 |1 ~3 Y6 g- c
/************************************************/
- y8 S8 v4 F9 x _2 w+ ]' k$ Z/* 主函数 */9 G# ~: R7 z+ G4 y3 X
/************************************************/4 d+ `+ f* t) V2 b1 t" `( J% N
void main(void)$ o; j+ O2 b! l; d
6 a7 b$ J4 h+ E. h{
; F: u- t" C1 A
) K5 R& R1 {" j5 h6 Q# G) G3 Q// WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer) B0 |5 I1 l8 T7 D
" Y# y9 I5 b# ?0 v1 F
WDTCTL = WDTPW + WDTCNTCL;
2 S+ S; Z$ O. K9 u5 c$ k
$ f8 s# J+ m# ] P5DIR |= BIT4; // Set P5.4 to output direction
0 R$ n0 B* b9 c, S+ N P5OUT ^= BIT4; 2 x" i8 |7 S. c/ Y6 A6 V+ m' s9 j
clk_init();, `& z7 c2 k% ?: y2 y! ]( p
* P5 U3 f, W5 }: ?5 [
GPIO_Init();! c, |% s4 _- b9 E* D/ O
# |# ~6 u# X0 G TimerA_Init();) i# I4 \( G' Z; i1 V2 s
}1 x+ S8 \: Q% |$ ~4 I S
_EINT();. Q/ v+ ?/ L, ^3 r9 F& @
LPM0; " y) Q/ f7 t) _- ~$ f
WDTCTL = WDTPW + WDTCNTCL;8 b) [1 g& ^! z d( I' O5 X |. ^2 C; {
5 J3 `7 j# ?/ t6 R8 J
, ~- E& h" A1 I) t
: [ U4 O5 [# V: a! ^9 J: a {
}4 m2 U) {0 j8 x+ I9 v$ I, ]
! u% T5 O8 j- E( P/************定时器A中断函数******************/% Z7 @7 x- i( K- u/ o0 `
#pragma vector=TIMERA0_VECTOR
( U) c# X% U) w* b5 R/ i__interrupt void timer0()% V0 F* x2 m$ ~- b8 t
{
# j4 X3 s5 |3 t: h$ k" Q, X switch(TAIV)
% n* G2 t, g$ G% u$ F6 F& h {
- H3 O+ d9 v8 L P5 g% X& q case TAIV_TACCR1:break; A* r8 d- [9 a5 q
case TAIV_TACCR2:break;
2 ?2 V3 ^) f' T- z4 s case TAIV_TAIFG:
9 j$ \$ d3 c& U { 2 V& o. ~( M$ ?; ~% p8 M- A" O
Timer_Counter++;, T) K8 ~# t6 Y: V; ] c) a
if(((P1IN & BIT5)>>5) == 1)/ E2 I' J; o5 v: b
{
+ B4 b: U! x5 \! n3 ~6 Z Fun_Choose = False; ' Q, r) t" z. D
}& x$ t$ q$ \* I1 o
else
% p# U* h' ^$ e2 [" e7 F { ) d7 K4 J$ O3 j1 u7 n1 ?
Fun_Choose = True; c" V9 j5 Q5 V4 _& K, Y9 M
}$ ^9 I+ Y* `9 g6 _5 B3 H% C
0 j1 L9 l' r/ ?. C% |
# Z2 x, \! i4 q; X if(Fun_Choose == True)
$ G8 U' F0 r7 b' m {8 ^0 J. |! M/ X7 v* L
if(Timer_Counter >= 11)1 e5 R4 K) T2 O" y2 n- @
% q6 i5 h) ]1 [! f& i
{' H" x: _* J- _; s
: L* z1 t: g- h4 `+ k- P
Timer_Flag = 0;5 Q( t- k9 c/ _$ [0 V
, p m' B3 k0 L5 C* f% r! p3 y
}
8 F8 x* B4 @2 @9 P5 g$ Q if(Timer_Counter >= 33)
: J* A7 H( {6 U* b1 G* T( Z/ C& Z {
) k) k& A' t; \ Timer_Counter = 0;
! {& m9 `+ e& P( r! T* ] Timer_Flag = 1;
" ]2 p1 r, Y7 d: k2 n7 N9 I } $ q: Z5 ^& x* c% N, G
if(Timer_Flag == True): @' i( P$ ]* v l& c8 h& I
{* \; M# ~2 L& D! D. [) |+ ~
P2OUT |= BIT6; L: z, Q) [% \) h# q
P5OUT |= BIT4;8 c; x: K. |" ^! f1 m
}: r; t, N* g8 G# ~
else Y) V- K( ~$ v9 G. g
{
8 r( n) U8 D) f) O+ k5 y" h P2OUT &= ~BIT6;
4 U+ _. M0 ]: M# w, w+ H P5OUT &= ~BIT4;/ H( K4 Z/ k) c& H% d2 ^
}
& G, J% f* k; Q/ A }& c2 \2 w& ?. i+ l6 |- ^0 ^0 f
else
6 V, I9 H& Y4 j9 `( |5 c: h {- ~$ P/ i0 G' o
P5OUT |= BIT4;
; v# \/ b c. a& l2 \8 p2 p, L P2OUT |= BIT6;, Y: i" ?* D: p# O. [1 ?! b
} ( I; a% y! B2 v* ?
}
) }% z9 g. j N+ S break;, D1 B" D) p1 C% v% E' H& x% Y7 n
}
/ A/ Y/ o! _1 h, _" E7 ]2 K2 M}( _+ X& J8 {$ L
' b3 T l+ u' T G+ V
|
|