|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
想通过程序实现闪烁功能,不使用看门狗程序很容易就跑死了,现在还不明白看门狗怎么使用,请大家能够指点( f# t: @$ Z* l9 }0 d7 Q
#include "msp430x14x.h"+ K: o5 D* L, ~
#define UINT8 unsigned char
1 y; B+ k3 H0 a# |1 z* U. C8 Y#define UINT16 unsigned int
2 B' Q) d# o' m' @#define False 05 D: `+ t5 P$ T
#define True 1; M% k9 Z9 C* g8 A. O
D2 d% H) K1 H) e5 t3 Z; B% M: AUINT16 timer_Counter = 0;
V, f9 D! R4 ~UINT8 Timer_Flag = False;9 Y. f3 [, b' O; ~# J( ?. H' @
UINT8 Light_Start = False;6 @* L( }0 Y- t$ H6 ^5 D" O+ [
UINT8 Fun_Choose = False;: g k" s0 X/ V9 v8 s, D% h( O" b
4 f3 U W2 H( m# z& G! ~8 k; g9 }/***********时钟初始化函数***********/
8 K( n/ B5 ?* ~void clk_init(). r1 J7 r9 q, P* d) O' L' I
{' K2 x; d7 p% s0 L9 l
UINT8 i;
4 h7 [, ^4 m7 t) a* I: E: o% i BCSCTL1&=~XT2OFF; //打开高频晶体振荡器7 r0 @* N2 `& f5 U- C! w& e# S
BCSCTL2|=SELM_2+SELS; //MCLK和SMCLK都选择XT2,8MHZ( b2 L' `5 I/ @1 h4 }5 w6 t5 V0 f
do# s) [" b1 x$ S& ^# L- I' P' q
{# B% R5 E6 a! w/ W
IFG1&=~OFIFG; //清除振荡器失效标志( |' k( b5 Z$ B- y! p
for(i=0xff;i>0;i--); //延迟待稳定
# M; ]8 |) W, I2 h
% i: J2 h. _/ g5 o9 W } ( a0 r( o, h: d' C
while((IFG1&OFIFG)!=0);
$ I- e5 s" K3 ^/ O6 I- J}
! h3 U; i8 V6 ` q8 w. d: h4 z
+ L, e2 p% ] P5 {void GPIO_Init()
' c; J }+ A3 s+ |6 S% d. }. N* {# ?{0 s( W" M0 @; f. N+ V. O$ B
P1DIR &= ~BIT5;; W5 L; {% `: j( D
P1OUT |= 0xFF;9 E0 }3 X& Q! T2 Z# _8 `8 O
P2DIR |= BIT6;6 D, \/ g2 M8 x& n4 y
P2OUT &= 0x00;3 I! e" a( U h/ L4 J' }
( g8 F$ G1 Z0 p, u/ v4 E P5DIR |= BIT4;* q5 h8 t! ?2 L0 d5 O
P5OUT &= ~BIT4; ) K z# Y. s1 o2 f2 w: d* F/ z% H
}, g6 {* t: Y2 H- f! I9 x
/*****************TimerA_Init*******************/' o6 @# m/ i% w% h; ~
void TimerA_Init()8 H, ?2 ?+ e" J5 w2 d7 i5 W5 C" A
{& |' F/ w9 ?$ }$ {( `
TACTL|=TASSEL_2+MC0+TACLR+TAIE+ID_3;; _2 T1 A7 ~6 w" T7 E
CCTL0 = CCIE; ) L5 ~) T+ s4 x8 j+ w, i/ p8 u
TACCR0=29999;
8 W+ U( j3 [3 D4 Q& y4 I}6 G( ~: V4 `: X) f2 w
//******************************************************
* o8 @6 b: y/ l/ h A, x1 ]//352微秒延时程序2 |: i# H& @, A ^( _4 u t
void delay_352us(UINT16 i)//352us延时程序+ q- ]( }; k8 j @2 @3 f2 U0 R
{ A/ s) O1 V! e. I" X
UINT8 j;
/ _& ?0 y: B' i while(i--)2 S5 n: ]! N: D
{
) T; {& H' O4 t' H/ r for(j=0;j<255;j++)7 q$ v ?) b1 a; \- }& s. o
{
* k% i" ^; s8 N+ e- K2 u _NOP();
- g# C8 j8 P r4 y9 f8 Z6 ? _NOP();' m+ n2 v1 v9 x/ x3 z1 O# E
_NOP();
3 s1 i9 j. k4 ^5 R! R0 q( J _NOP(); 4 A% I( A% ^ B7 ]$ p
}; K6 o- B; O+ A7 U% A0 [2 W: c8 q
} ! }3 i( f: S3 J
}
) q! m- X. f8 D- i* U* G5 A7 ]/ U2 k9 w- A" p; }' ]
/************************************************// f/ ^( ^; ^8 `$ o! K& _
/* 主函数 */: t. @! p9 J2 Z0 X0 G k
/************************************************/
# r* w( @& S9 T" y% j% D% Q) L' hvoid main(void): n0 e. K, n8 o+ n) k9 g) m+ U9 G% d
5 z4 Z% E+ t: P1 d7 Z( z. D
{; T, Q" j% O8 @8 ]/ t3 |' V
9 F, {" G- ]* [" z$ L5 ?
// WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer( }3 {6 r/ i" [5 L
2 \. T t* [0 `$ j4 Q( ? WDTCTL = WDTPW + WDTCNTCL;: U4 g: }" a7 Y' m, W
- A" y/ f4 d1 l; @9 h8 H# r5 J- } P5DIR |= BIT4; // Set P5.4 to output direction0 O/ {+ F- {" c, R+ D
P5OUT ^= BIT4; / a% P8 r$ b6 W: F2 p
clk_init();7 k5 y! P7 a2 ~6 W6 X- h: {
1 Q) e2 L$ h8 v/ L
GPIO_Init();; C2 R8 s0 E; |' ?1 I: L$ c
) ?- [' c/ a7 a- N* M3 [' n TimerA_Init(); X0 G; |0 C& x# m$ e! T
# n/ S# U9 ?/ T8 C, k9 d
_EINT();0 G0 _/ P n; \, S5 `
LPM0;
" P. B. Z( Z0 d5 r WDTCTL = WDTPW + WDTCNTCL;" n8 E ^; H; k, T
* h; B' k3 Q5 T1 K1 o& { T3 g r* ?2 v: B* x( n5 [
9 ?* z) c% h3 _# z; {
}
# O+ x) _+ Y/ z1 `8 k) _, B* A# H0 q* _; G$ J' W
/************定时器A中断函数******************/
9 `2 B/ M; d) k# e) ]/ P# s, x; G/ ]#pragma vector=TIMERA0_VECTOR9 t- ~8 {8 b, C: k3 U& L0 i
__interrupt void timer0()
) d- a# \; `: a/ i( v{& m5 M: w4 l2 M, E5 X3 _ w! a
switch(TAIV)
9 \8 \( t0 F8 X" O9 n. H {
9 {/ u- @) i1 I; m: Z8 d, q6 y case TAIV_TACCR1:break;
1 S8 L- L: p; {: F% k case TAIV_TACCR2:break;- [7 a b9 A- l, `
case TAIV_TAIFG:# \- A$ O7 V! t; P$ N
{ 5 D6 U+ c+ b. B( n+ [' j: `
Timer_Counter++;
5 [+ I4 h5 @9 V6 l- X$ V if(((P1IN & BIT5)>>5) == 1)) t8 L& ^* E }) r9 w3 }+ U# c
{
' ~1 w% p6 \2 h; e. w Fun_Choose = False; / i. q- ]; |! q/ I, `' S6 X
}9 { P. ` `) n" f
else
& W% l+ J" D4 L0 P8 c- E8 \ { . V. |& t- U3 D% D I
Fun_Choose = True;
y$ @0 I' W0 ^! u }2 b& m% R2 [% Y* i9 R4 Q, x& t
- r' \7 I8 f1 j' [6 \7 O% x+ j ) N: l' c" Z( l+ n8 {
if(Fun_Choose == True)+ Q9 o/ j- O- G G
{
7 m2 r- }: y) A' f" Y% B0 { if(Timer_Counter >= 11)' {9 \3 H2 ^: ?% P
% b$ i7 M) ^2 s" \# M2 _( m9 l% @
{
6 P6 E3 t' s3 @' L( _: l: P7 l3 C
7 c$ v. n: o: V [ Timer_Flag = 0;$ B7 A, `; @& ^( p; a
% w; J# s2 U' l- ?( W9 n9 d$ _ }
' k3 B/ ~; D+ p k. z: F$ Z* k$ ? if(Timer_Counter >= 33)6 v5 z& g7 X7 [; _' h
{
6 [' q f% P1 L8 g Timer_Counter = 0;. O! Q$ g" s1 R5 X; R# C4 ]* m
Timer_Flag = 1;$ W% C z ^/ K0 ?+ Q7 H
} 0 m, o7 ^9 o/ ?' U
if(Timer_Flag == True)6 G4 u% t, e! s" N4 [0 F
{, M% G- D0 C+ I1 ?# ~5 w$ ^* z
P2OUT |= BIT6;/ n4 f4 K* g" a. X
P5OUT |= BIT4;" i! B6 J5 V: D7 q7 w0 h5 g
}) S& c" o- Y I/ i% F# f& |
else( D% d. x) J: {
{
& K: h8 U1 P ^% M) Q P2OUT &= ~BIT6;
) B: V+ y) U/ {6 t7 c9 Q# N) l P5OUT &= ~BIT4;
P# V+ F& r4 |1 @% O( ? }
: v* T4 S- G( A }6 X1 U/ {1 }& E: u2 ^
else
+ o. C! o, r4 b4 P2 }& ] {
/ R# u- m' }2 z% e/ u4 X P5OUT |= BIT4;
9 {8 k- E5 O3 P1 {5 Z. I P2OUT |= BIT6;) c& L H+ L3 ?* {4 y) S
} . M# O4 [1 w6 l* U: p% {
}
! w4 Z/ I7 L6 \! n/ f7 g1 q break;
- s' z! C. N8 V" r }, h3 P+ F/ k! ]9 ]# h
}% k/ I) d5 m% [ e
- \) I- Q4 i8 u- W i
|
|