EDA365电子论坛网
标题:
大家好,请教大神关于430看门狗的使用问题
[打印本页]
作者:
StepPeng33
时间:
2020-8-10 13:51
标题:
大家好,请教大神关于430看门狗的使用问题
想通过程序实现闪烁功能,不使用
看门狗
程序很容易就跑死了,现在还不明白看门狗怎么使用,请大家能够指点
9 U3 H( i9 |& F) o/ X
#include "
msp430
x14x.h"
- f' L( G w7 N7 T0 d7 N& F4 {
#define UINT8 unsigned char
) I. E m4 N4 m. o8 a/ R
#define UINT16 unsigned int
9 H/ {$ T% C7 N
#define False 0
" P; f- N/ X0 Y6 P" K+ G
#define True 1
5 |2 G0 @% o0 |
' P3 s" X1 v! J, Q* m1 K
UINT16
ti
mer_Counter = 0;
+ e: U' \+ F L
UINT8 Timer_Flag = False;
. q: `( n0 s( a3 M9 f9 x
UINT8 Light_Start = False;
! I; B; ~# c& b, v
UINT8 Fun_Choose = False;
. G* b5 p. C/ Q. F. T1 s2 H
6 I! d" b% M& q; V. _ E3 \
/***********
时钟
初始化函数***********/
9 B. i% }4 A7 f4 g
void clk_init()
$ R3 m9 W$ W( |6 j2 C
{
. N' \0 _7 J+ P0 S1 B
UINT8 i;
! j* t1 P+ v! y
BCSCTL1&=~XT2OFF; //打开高频
晶体
振荡器
8 F( s) \* S3 r1 ?5 O" Q
BCSCTL2|=SELM_2+SELS; //MCLK和SMCLK都选择XT2,8MHZ
# L: P$ v2 |" Q% i2 T; O, a( _6 M8 P
do
6 ]: c1 Y( B2 |( a% I# s5 v8 Z( h) x
{
! R, _* ~- @; r h
IF
G1&=~OFIFG; //清除振荡器失效标志
2 I5 | W( }2 S4 n5 L/ m7 F
for(i=0xff;i>0;i--); //延迟待稳定
- i- j9 q; p: Z! u
% i# f9 R! r( k$ J; J6 r& Q( o; I
}
3 b0 `2 ]) j& y% L0 j" j
while((IFG1&OFIFG)!=0);
# j1 k3 i; U+ c: B: n+ N
}
, [# o D7 Q4 b3 B: |& ~" k* ?
+ y% V; w- U& r- Z: ~4 t. a
void GPIO_Init()
4 J/ j# z8 f$ S. X( u
{
6 A& b1 B0 C/ C. _+ B) @) F
P1DIR &= ~BIT5;
0 L/ w4 I) V$ ]* W% V! b$ p* W. n
P1OUT |= 0xFF;
i1 N3 P ^. H; T
P2DIR |= BIT6;
) ~7 i2 c# P4 O: P9 p O
P2OUT &= 0x00;
# P2 o7 }" o6 x, s( h
3 k6 g3 Y# ]9 ^( ~. V# B
P5DIR |= BIT4;
9 m/ `6 @2 H7 F& d
P5OUT &= ~BIT4;
# _: s# I; ?+ K( i' g: E
}
0 Y6 G( _7 s' a& s
/*****************TimerA_Init*******************/
' t# V6 v3 b6 o' w, h' t
void TimerA_Init()
; D) p+ s N6 l
{
0 A7 u7 M6 u. w# c
TACTL|=TASSEL_2+MC0+TACLR+TAIE+ID_3;
9 k6 O g' h9 h4 i; e' u
CCTL0 = CCIE;
; c4 F' T3 `" V$ O- S) p! ^
TACCR0=29999;
, q) E6 S& [" N0 n' p. o
}
+ L! ^9 W; {. l2 I* k: K
//******************************************************
: @3 r7 E4 T) J, U' z, R! c# N
//352微秒延时程序
2 c$ T/ M% s* x% n' M1 q
void delay_352us(UINT16 i)//352us延时程序
" L+ w2 v: E1 P. Y" h: _) V7 [
{
: ^4 _9 y4 J5 V9 i9 W. w2 w
UINT8 j;
7 E& v0 Y' c; v5 {/ {, B4 d& P
while(i--)
5 t! ]) G. T% ~9 W* m& G! X. J$ j1 A
{
c5 d2 S; R/ I6 ^+ I5 V5 ~4 \& i
for(j=0;j<255;j++)
" L/ g$ q3 [! G+ k J) y
{
% C, R/ A! @$ P& j5 \: d
_NOP();
* P: e k% R7 J
_NOP();
- b5 X# |) W |6 C# G4 ?! `
_NOP();
1 } M N" ? o3 _2 e! _% U d
_NOP();
; |: F2 w9 y0 M
}
8 b& T2 Q6 _8 [/ a+ h8 ]* s
}
6 B& p' q4 o" ~ i* h' V! \
}
/ ^! s% s8 t+ ~( p- B# G5 s
3 ]" ~- g4 J1 z0 V) S! }
/************************************************/
; ^* p; Q' o$ |7 a# z: \' h
/* 主函数 */
3 n( E5 ]4 a( H5 U# t
/************************************************/
% q# R) A: o! m& T
void main(void)
' a, v" @. u+ C! S* i
+ Q4 \3 G, f; \4 Z( f
{
& F1 K8 o7 e# o2 |' v
* T0 ]1 z7 W( B4 }
// WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
% j6 H1 ~4 X$ x$ S6 Q
2 B; i- f, l3 i
WDTCTL = WDTPW + WDTCNTCL;
" T5 p t! Q5 i; p, {; X
) k3 k, f u% C" F3 @% k9 ~
P5DIR |= BIT4; // Set P5.4 to output direction
6 a8 u+ u- {& Y0 E2 B' p
P5OUT ^= BIT4;
1 |; F; j. V; a8 h$ V9 j" t: v) W7 i
clk_init();
( p; d* ~# E# G
1 _$ M9 N2 j7 c1 K
GPIO_Init();
1 T- u2 f# r) O( `
, k1 X6 e: B/ F7 N; W
TimerA_Init();
0 e; W) o& w) r* `7 W$ P* I( m
! j$ \9 c: Q7 b: R" }3 H! ]9 @; L, T
_EINT();
+ V0 ~, Q4 X5 `7 d, w) v7 s b
LPM0;
4 t, m+ s: @1 `5 G a
WDTCTL = WDTPW + WDTCNTCL;
: `% v* `- @& }" t3 u
0 ?" |! m% X9 T9 r: }
8 m# W1 [: V |: _1 o
( w' Y* G& V3 V
}
, w$ Q7 ]6 j/ C' k% k
* F' H' N8 A$ g, Z C2 |2 T) B4 M
/************定时器A中断函数******************/
* X" D' w% n5 e% m# V b
#pragma vector=TIMERA0_VECTOR
; N- L( {. u9 s& Y V7 I* z% y
__interrupt void timer0()
# N: u1 \& V1 x0 [# K) S
{
# {! t# q+ [0 G2 M
switch(TAIV)
?# G0 b; t S, p+ E
{
* } W( l1 f$ q) r$ j4 E+ |% c3 W
case TAIV_TACCR1:break;
' i% e8 ?3 G: S- B9 T
case TAIV_TACCR2:break;
" t7 ^0 Y7 c( L9 s7 F. h
case TAIV_TAIFG:
2 a8 s3 }8 P6 P6 B5 W: @* R
{
0 {# _" P6 E, e' W; p; }
Timer_Counter++;
" G5 @3 @# ]) C; N* L J
if(((P1IN & BIT5)>>5) == 1)
: l; j: y) ` \
{
3 `6 o0 n* G. f3 y- f
Fun_Choose = False;
1 ]9 h& M- U5 r: n! S$ y5 t
}
+ L- I4 f3 C8 S
else
; ]) i4 S9 V& @! Y+ m
{
1 Q! c, f$ D, {1 C' A
Fun_Choose = True;
* y/ D9 i5 }& c
}
; L# B; J" U# H
/ q: U% X* Q0 }& T% q
$ |' s7 M7 p/ u* A/ [: K
if(Fun_Choose == True)
' R3 f2 E7 h2 p B7 I! n, t
{
' ~ c) k( d# O C3 c" C! m5 M
if(Timer_Counter >= 11)
; m5 t# S# L2 j3 i) {
% I+ w9 e4 e. i, a% m
{
- B% L: l7 E0 ^' ?. I
! r) l. w- y7 F+ a6 u- F. p, q
Timer_Flag = 0;
b9 N9 _! a% k8 i
- z; J9 `! a2 u- M% F; O7 E
}
5 q7 K H; _; P( U" B
if(Timer_Counter >= 33)
- U/ |4 G8 X! V p0 T
{
1 h, l8 \2 N5 z8 Y' v( O
Timer_Counter = 0;
' }0 H5 x+ E: X- V, E% R+ h2 u' E
Timer_Flag = 1;
$ m4 g& N% C6 t% k E6 Z# |
}
- t* S( v: Z6 R3 B: O( {! Y7 K
if(Timer_Flag == True)
% H+ b; s4 t5 K- R& E. q+ p. @
{
m! m7 ^1 \; a' x8 e( g
P2OUT |= BIT6;
+ A6 O4 o6 y b2 i6 _+ h
P5OUT |= BIT4;
3 U6 c- @8 D( V2 v
}
8 q- t% S, N' l" ^/ a1 G: E4 m
else
& h7 S: S4 j3 |$ h
{
6 C5 c1 q" ~5 a1 Y. N1 J
P2OUT &= ~BIT6;
: o# r2 V2 L8 y. P" u+ ^$ g
P5OUT &= ~BIT4;
9 Y% J$ x: o* X0 I- p% v
}
?" n* a3 [9 a R! }2 g
}
: |( y5 F; u0 T3 t5 ]/ q% }7 @; i
else
) h: @8 @: V2 y7 l' W4 ~' S% D
{
" [" w* `, I# M0 c5 X8 R( l& ]2 o
P5OUT |= BIT4;
( h2 P% g) y& O5 E
P2OUT |= BIT6;
1 n7 L* m7 ]9 E6 r) x7 w# k# K
}
, G* ~6 L' o, q8 _# K# ~9 C& k
}
# Y0 I, Y" V, |( v4 L7 a2 i% m5 B0 _
break;
# e, p: ^2 I5 ~9 o. t: X9 H9 J
}
: H' e8 Q) a+ s
}
; c( I( P m- O5 Y) I1 r, j0 c* N
# l8 S( D# e, B; \0 Y. ]
作者:
nolita
时间:
2020-8-10 14:53
你的主函数连while都没有不死才怪。
作者:
TaylorA
时间:
2020-8-10 15:26
楼上说的对
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2