EDA365电子论坛网

标题: 我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断测试,... [打印本页]

作者: ByGrith4    时间: 2020-7-29 13:48
标题: 我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断测试,...
#include <msp430x14x.h>
8 V0 Q6 L* C, B9 L8 X0 ]+ bint i=0;
2 c0 [+ n9 L3 K8 S9 ^" ~- Nvoid init()//初始化时钟
* m( I6 U9 k  l5 L( t{6 |( M* P. }5 Z
   unsigned int i;
% g! F2 ?6 R/ b/ ^; x$ O   _DINT();//__disable_interrupt()- E0 Y7 r. A9 ^% p+ d5 P2 S
   BCSCTL1 &=~XT2OFF;//Basic clock System Control 1,Enable XT2CLK, J5 J3 [' W4 C* V1 S
                      //即打开XT20 J* d9 p# ?/ C3 v) g5 E" |  j  D
   do- F' l! z  |6 o: C, l; I
   {# t6 ?4 t$ l  s+ U" p
     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志
% Q0 h, B& c+ L6 t: Y& ~$ h      for(i=0xFF;i>0;i--);// 延时,等待XT2起振
- i  y& W9 X! z9 m   }
' D2 j) d! j; M5 Y   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               
! [7 V; c0 v$ Z% {: |   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ/ n* C" o1 Q9 K9 A' \6 w
//BCSCTL2:Basic Clock System Control 2
  e& v6 k; {2 w" ^5 t. b$ Y}
( F8 i  g5 ]" [" p# A8 [, y# {+ ?void count_init()
' j" m/ v! K' f* e{# H% b" a" b8 q! {) G  \! x) I
   P1SEL =0x00;
/ M. f8 ^0 H6 Z   P1DIR&=~(BIT0+BIT1);
& Q/ e& S% g4 V% U   P1DIR|=BIT6;) M1 T5 s# o5 S' ]7 s
   P1OUT=0X00;4 R* H: W" n/ @6 p
   P1IES = 0x00;               // P1.0选择上升沿中断, T- M% u) A  A% Q- B
   P1IE  = 0x01;               // 打开中断使能8 s) t4 [( m% ^! o% r+ P! ?
}% d6 G/ g' `7 w7 W
int main( void )2 o% H1 Q) d0 n; L  f
{- p4 a8 P+ Y7 u) I5 c3 G- ^+ Q% Z
  // Stop watchdog timer to prevent time out reset
2 W; T1 U5 R( B/ A  WDTCTL = WDTPW + WDTHOLD;
' y. j) H5 r0 e5 @0 |0 j9 [* n6 y  init();
) W! q( r/ i- _2 Y. X( ~( Q* h& l  count_init();* X# _# Y5 @& j6 i
  _EINT();           //开总中断* a8 `) \( u2 |; {
  return 0;: j0 u8 _, ]; X! r0 k; }' W) J
}4 R# Q: @0 M- V7 p+ K5 n) }0 C/ B3 v
#pragma vector=PORT1_VECTOR   //外部中断计脉冲2 M! T$ g- I# q7 I6 }
__interrupt void port1(void)# ?0 R; @" V3 c7 u# O. }/ e
{
4 R$ [2 l& L  B& ~# X4 W) T
+ n. [, F& A( M5 M/ g  if(P1IFG&BIT0==BIT0)
$ d$ d! s: E6 O* ^0 t  {  
" o: U2 ~4 c% @2 a% D% @6 E    P1IFG=0X00;4 n1 L7 q( N- |2 F
    if((P1IN&BIT1)==BIT1): X! ^8 X& B" a5 N0 ~. y
    i++;
6 j/ E2 O( h+ S    else
2 H9 C( v9 \* ?2 {$ [! S    i--;6 L$ O+ A: s! \3 @! r
    if(i>=100)//接收的脉冲大于100则P1.6输出高电平,灯亮: W  M1 o% q( A: ~, u
      P1OUT|=BIT6;
! G# X8 y. z4 `2 g# [# p    else5 Z1 s5 T8 H* _  e- A
      P1OUT&=~BIT6;
$ |: E7 A% r& I7 I2 W' ^3 ]; v  f8 }  }% ]7 C) ]3 N5 Z! v- s0 _& E0 n, \' ~! P" s
}9 ~% d# g3 ?0 U- b' N% f$ w
我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断测试,灯一直不亮,现在也不知道是什么原因,求帮助,已经困扰好久了,谢谢!
7 x( g/ Y2 r4 z( \: @1 W- O/ |9 {
作者: messed    时间: 2020-7-29 14:24
可能是硬件出了问题吧   建议检查下硬件
作者: nolita    时间: 2020-7-29 16:29
#include <msp430x24x.h>
1 A# f3 ~( U8 v" m  y. H# d4 tint i=0;
: [5 b" X* e, \3 d' p2 cvoid init()//初始化时钟
- u1 R) T' Z7 ?  w8 Q* f0 E{
% M2 E: F7 w5 O9 ~& [* h' @   unsigned int i;' v& p' b. z3 q6 k
   BCSCTL1 &=~XT2OFF;//Basic Clock System Control 1,Enable XT2CLK6 k- \/ a1 {8 j8 U2 e7 c' V/ N
                      //即打开XT2' t3 l" q" b4 A; I1 R# O. f/ o
   do* q4 e9 R  o/ m4 |1 J
   {
; D: n" J7 p  @3 k; N% F     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志
7 i1 V$ U3 \" I, m% J! B3 ?      for(i=0xFF;i>0;i--);// 延时,等待XT2起振
# I9 q2 c7 M- U( w  C   }
1 L3 N9 j6 C7 P# G   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               
8 G' ?0 U2 U$ [& O" b5 d1 i   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ& e0 \/ P, N) B9 B5 W9 d
}2 @' W, G5 K0 e* w6 x# j! f" Y
void count_init(), h% l" \1 m% a3 o8 [
{' L$ j5 o- n6 I" G' A/ U
   P1DIR|=BIT6;8 A+ S+ g# c! d& p6 X: s- N
   P1IES = 0x00;               // P1.0选择上升沿中断
9 N& N* }& l" q" p   P1IE  = 0x03;               // 打开中断使能( P  n, H6 s/ f% v
   P1IFG = 0X00;
4 _% Z' [) I( n3 M% x/ `* f5 e}8 c1 {$ A+ v4 ^: G* }
void main( void )" m) i, Y$ R3 }" i" g
{' k6 O" U! @4 s* x# y
  // Stop watchdog timer to prevent time out reset
) _6 x$ B) j4 b) J& |6 t  J8 X  WDTCTL = WDTPW + WDTHOLD;
- T: p" G! C% I8 B3 d& c6 C3 t  init();. ~6 l* a- I- i' p4 @
  count_init();
' P5 n- \1 ~" b  _EINT();           //开总中断+ y9 _2 Q" D7 @
}1 p/ R4 S5 F0 J5 [# P4 f+ T1 Y4 m
#pragma vector=PORT1_VECTOR   //外部中断计脉冲2 U: B3 i2 l/ k9 o# b2 j0 f3 b
__interrupt void port1(void)7 G. }0 _2 ~4 r9 X4 T0 U+ f
{! W" }& P4 g6 L( i/ T* ?" L8 m" d

6 D6 B3 J0 i4 f/ w3 C4 U& d; l! c' Q  if(P1IFG&BIT0)
' w. E& c/ }; q' A, W4 b& O7 n# N. a  {  & P0 V* o# L7 G7 }. ?, ]; M% s4 T
    P1IFG=0X00;# X" `/ A, h7 J- k
    P1OUT|=BIT6;- ~$ W( k- l' T; O1 n. @
  }
2 w  s+ h3 J5 s! q) r1 ^  if(P1IFG&BIT1)
" F3 J' x' z0 [* n; t2 a  {* h- v+ U( W% K' D
    P1IFG=0X00;
; M( k6 z6 g* _    P1OUT&=~BIT6;+ N, N  f2 r2 X9 S. D, m
  }/ F2 _. g# H6 ~& H3 \' v, s
}
作者: crime    时间: 2020-7-29 17:58
在主函数里是不是应该加上一个while(1);?




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2