|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
想通过程序实现闪烁功能,不使用看门狗程序很容易就跑死了,现在还不明白看门狗怎么使用,请大家能够指点
; Z: q2 r) l( o' E' Z- V- c C& r" ]9 x#include "msp430x14x.h"
! b+ ~- w6 p# ~ e( F. M#define UINT8 unsigned char! m/ E. ~& U, H+ ?# r( C' ?
#define UINT16 unsigned int5 P+ w7 ^% h* F& @8 E5 \
#define False 04 u5 J: j0 i" C2 ^2 Z3 Q! B% s
#define True 12 A* m i: g; \. q1 z+ E( f8 d
]3 E/ E9 H P
UINT16 timer_Counter = 0;
8 L' D/ R) e: R5 J5 b& cUINT8 Timer_Flag = False;
2 _! k5 J. w7 _8 [3 C* {UINT8 Light_Start = False;* @+ w. F& P/ u% y% x( E
UINT8 Fun_Choose = False;
& t# J7 a$ c ^, h1 `: ~
* ^# f) i1 j; g9 Q, Z/***********时钟初始化函数***********/ 9 \! ]% p- E% m& S' `& Z+ l
void clk_init()
+ }) X0 T1 Y* Y$ P" |{: I1 I/ ]/ [4 {+ _) h
UINT8 i;
( M2 S9 V( v0 ^8 l" D& x, O" B BCSCTL1&=~XT2OFF; //打开高频晶体振荡器
7 f) r/ m# N; G+ r' Z' s) x4 F BCSCTL2|=SELM_2+SELS; //MCLK和SMCLK都选择XT2,8MHZ
7 w! X( X& s6 i' n* f/ N do) c' O6 x3 G6 h9 |1 W2 L& S; t/ P
{ U. j" N, D$ ?+ x9 G
IFG1&=~OFIFG; //清除振荡器失效标志
/ Y# H9 H& q, j7 f6 b; l1 U for(i=0xff;i>0;i--); //延迟待稳定0 W5 b( P) E2 u G* C
0 d7 I) C* e' _* m5 M$ t4 s } ! j( s' f: p5 ^, Y' C) c4 x! z
while((IFG1&OFIFG)!=0);
& b9 e' a' R2 U) l0 c* r% C6 D} ! V$ ]$ ^- i8 Q/ X7 `
/ y2 I. ~" C( g* g' h3 {4 [$ C
void GPIO_Init() U% [# L7 `9 v
{2 S9 O- w: N6 W* S8 c6 K
P1DIR &= ~BIT5;- z! E! [5 v# \( z9 }4 A" A
P1OUT |= 0xFF;- y: s0 r0 A0 \( r
P2DIR |= BIT6;
3 U9 d, n5 Y. ^$ S k D P2OUT &= 0x00;8 Y4 R/ ^/ F' Y J/ C8 q
. L- F: i2 T& r# Y& q
P5DIR |= BIT4;
1 D( S2 y# w( o2 M P5OUT &= ~BIT4; & j: H8 U+ l0 O
}
; v, l# Y0 i$ q8 b' E0 G/*****************TimerA_Init*******************/: S+ r, a: v+ T
void TimerA_Init()# T3 {9 z( Z4 y3 G
{
$ N+ \/ f4 L/ s2 m TACTL|=TASSEL_2+MC0+TACLR+TAIE+ID_3;, U# i6 ?' l n! {! y
CCTL0 = CCIE;
. o) t* r6 p3 H# ]: J$ | TACCR0=29999;
1 |. @- O% B# {4 \) {}) P$ n& |7 D7 z) R$ V1 `7 E
//******************************************************
& [- x8 U9 w* B5 N//352微秒延时程序. i2 N8 B& S- X0 I- r7 L: f+ }
void delay_352us(UINT16 i)//352us延时程序3 h+ |; S0 v" s* l% @7 N/ Y- g
{
* [6 p& M" i- ] A0 t0 Y- w UINT8 j;
' J! `+ x# g+ r, z! o# A, f- h while(i--). q: J& W6 t5 [, g9 o/ s: j
{
: x# y0 M4 o% g3 Y for(j=0;j<255;j++)
9 A+ U" {# N- z5 W9 e { * B, @" m" ^ ?* @8 X2 E9 k
_NOP();, f7 ]8 ?4 T7 R1 M) i! ~) E; m$ d
_NOP();
1 {/ V: R8 f& L, X8 e& b$ {6 P _NOP();
" O" c" A) X& D+ l _NOP(); + j; I& A- L% e" C# ?7 G0 O
}
" U$ i8 ?9 G. x, A, P }
5 |6 z7 f: a& P7 D. p1 j}
+ z4 K; m& b% c* a L3 U8 v. y: o7 y7 u# X" r
/************************************************/ ^+ Q$ d3 |2 m1 C- j W* t
/* 主函数 */. i% V) r/ g! ~
/************************************************/2 L2 ` ` S m! }
void main(void)
. Y1 `) F* ^# c. o: M% L) L# { R' F, [( y8 P
{
& v! ~& K A! N' V( D+ C: I2 N" @. C! l2 {
// WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
$ {9 w0 {. k# J
. t3 o+ a, p- ~( C, ?4 O WDTCTL = WDTPW + WDTCNTCL;5 f l$ b' A0 h5 \
* i c- V( u; d5 h6 U
P5DIR |= BIT4; // Set P5.4 to output direction- _: ~2 T! ]& o( I2 b- w" R5 [
P5OUT ^= BIT4; # ~7 v7 @' k1 H" h9 P( @& k
clk_init();
! }& n/ l: _: B& C7 I m # a' d9 Q% C1 `: A
GPIO_Init();
' E! k* f, }) T8 B, ^0 b0 C; l1 \
; C9 r5 m; E6 J/ y& _) w TimerA_Init();
7 x3 t, s) y( a$ \. x
! C& {2 `, l( r# }# \( P& ? _EINT();. E" g7 M! ~! H2 Z9 P6 f
LPM0;
5 @! }) r6 p, U: o4 I+ S3 |* c WDTCTL = WDTPW + WDTCNTCL;4 Y1 G' _# d* {4 j+ r' u. ?
7 s- Y$ U$ i- R+ Z# V! c
|; q5 E; o* A' n. v
7 F5 `3 e: h9 s6 D! R
}8 F* r N$ s/ a) ?
/ I8 }, ]# ?+ U( S) k: @6 J0 k8 R* h
/************定时器A中断函数******************/& Z+ k% P0 h9 L& _
#pragma vector=TIMERA0_VECTOR: H* r) E1 j6 K' R/ Q f6 T" B. @
__interrupt void timer0()& ]" V `3 D4 _+ }7 U" ?
{, y1 B( u! W: D' U& ]
switch(TAIV)3 U% g* {. [2 Y& ?( J) a' l8 I
{7 j$ E) T! ~5 P8 M. W" N: |
case TAIV_TACCR1:break;1 q* s; L e; k5 n
case TAIV_TACCR2:break;
. z7 j+ ]2 J: k( W case TAIV_TAIFG:
9 S/ E; H! {) g8 J/ Q6 g { # y5 ~8 }! j. l! ^7 P$ k9 `$ ]
Timer_Counter++;: J' [+ g$ U( `& @" y# n# i
if(((P1IN & BIT5)>>5) == 1)0 i: i1 @" q' r- d" `5 Q
{' y9 |0 _: \5 s8 \3 f# l
Fun_Choose = False; # r4 g. q) M( x/ m' i& @% i' ?& n
}! S2 v; B1 Y: G+ R, l
else
. ]5 T6 v" q' x7 u: M8 B( T+ q { ) O- Q+ r1 N' P+ o" _" J, H
Fun_Choose = True;
3 ?3 y0 ?( w3 v' j5 H# j }1 N" H3 k3 E5 X |8 j* U# f, E
/ ~) ?. q) y: e) ~
1 m% ^: K) Q D, [5 G8 J if(Fun_Choose == True). x& k1 S i. y9 g9 ~2 i7 f* i9 p
{, V9 F" n% [& y$ v: b+ e$ ]' a
if(Timer_Counter >= 11)8 O( `( j7 g1 W A6 {0 {
0 ]# k/ J( q: c0 B Z s0 z8 p {
{
) ?* n. e/ R) P E) ]: M
4 N8 a" `% D8 I& {# b1 M4 w Timer_Flag = 0;/ A2 l5 M4 k' Q9 T
4 W/ { W+ {$ e; @+ l }
. l' t! m8 f2 i2 D7 H if(Timer_Counter >= 33)1 n& ]2 |4 Z6 B
{
7 ?7 T, V) w2 A Timer_Counter = 0;
: m2 k7 F1 T' q) X4 s Timer_Flag = 1;
4 k' r1 Q# J0 k5 r }
; c1 P' E4 \4 ^9 @3 I if(Timer_Flag == True)
# W+ j) A& G/ ~" ^ d2 D {6 ]( H4 n {) ~2 N
P2OUT |= BIT6;$ d6 ?- ^+ t; m' w4 a( X
P5OUT |= BIT4;
! V5 B+ W& B7 X* y }- {; x2 O- `2 @) |) L' f5 n
else) H% P! H( D; @! d6 @) B z
{: e/ ~, O% }) X0 o$ m/ O* V
P2OUT &= ~BIT6;8 l+ z$ }! w0 m; s9 z
P5OUT &= ~BIT4;
! {$ l/ s" Q3 i, i } & V, G, u0 Q& \1 V" G
}: k1 d+ j! P) D' S
else
( s, y: z, d% y1 t0 Q {
5 N) e9 P( a; X; \ P5OUT |= BIT4;
2 q$ E- H+ ~' Q( t P2OUT |= BIT6;
/ y+ V1 b# a# f0 O3 s* N } 2 X7 b; U& T" n3 x! ]
}# L7 L/ W5 Y e/ y* H
break;! _$ \( ^% p; H
}
' D- f9 M$ [7 P& S}! C' q5 f! r1 E+ {
2 x% Q( L' X* r' w* N% H
|
|