找回密码
 注册
关于网站域名变更的通知
查看: 403|回复: 3
打印 上一主题 下一主题

我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断测试,...

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-7-29 13:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
#include <msp430x14x.h>  M8 p) ?5 i" n% _# G' `6 x
int i=0;- l: g, W5 L( F8 o3 J
void init()//初始化时钟( T0 T6 B$ ?* k% V6 ?
{: }: V' t+ Y3 w4 r1 T) v/ m
   unsigned int i;
; n. J( H0 Q8 ~: `# e   _DINT();//__disable_interrupt()
( O) F! s9 H" D( l$ o0 G: {   BCSCTL1 &=~XT2OFF;//Basic clock System Control 1,Enable XT2CLK1 S$ }) i3 Q' Y' c
                      //即打开XT2
( ~" U6 ^7 R5 a  p   do# V+ U) U7 t0 ^# c( D! ?
   {
+ P" d, G" b  c+ s     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志' Q8 S* i% P; \1 U" ~# }% ?
      for(i=0xFF;i>0;i--);// 延时,等待XT2起振
8 Z% W* ^1 U, k5 C/ a   }
; r8 Z( c! {4 k& _   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               
1 V. @! [5 F+ e5 e! P   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ
, q0 B% Q0 _5 b9 u# |) w$ o( Q. ]//BCSCTL2:Basic Clock System Control 2+ Q% _+ h- N. C/ }& Z2 w
}
6 E' K  x8 G& C" n2 j& {void count_init()( W/ U( c+ R3 }. j; ?* C; E, ^) b
{
% S. K# k( R1 j3 Y; t   P1SEL =0x00;9 q$ \' o: D7 F" J4 L
   P1DIR&=~(BIT0+BIT1);
, {2 v. i( N; K- w2 ?   P1DIR|=BIT6;
. L, F5 Q: s6 ?7 v9 S) S) y' d( m8 c   P1OUT=0X00;
) a) N3 a8 y$ Y   P1IES = 0x00;               // P1.0选择上升沿中断
6 l! L  ^4 T5 Q5 E3 R  |2 N$ w   P1IE  = 0x01;               // 打开中断使能
" P* u, k9 L" x8 `9 Q' U}) l0 d: I  ^9 i- n+ @& d
int main( void )* h( n" Q* |, p  m
{, X/ d; E+ M. T% }( M# a4 `2 C% n
  // Stop watchdog timer to prevent time out reset
+ ^/ S1 O8 U% p) b8 ^  WDTCTL = WDTPW + WDTHOLD;, v( ^3 S4 E8 P1 S: @7 ~, E( `
  init();$ m' n& N* R2 Z
  count_init();
$ p0 ]" X! e6 L- R3 i  _EINT();           //开总中断
  v" O1 ]; }; {  v$ M+ d  return 0;
7 `; j0 q- A4 w0 x}4 e$ M$ X3 I5 W3 i+ G
#pragma vector=PORT1_VECTOR   //外部中断计脉冲
  k, K  S7 {* J__interrupt void port1(void)7 k4 [: Y& t) B. b3 f
{" Z2 L/ O5 s2 L3 Q7 B5 s: F
9 C: ~* U; i; k5 v  T1 d5 [
  if(P1IFG&BIT0==BIT0)
  v) _5 J& k# O/ r  {  * `' ?. k+ n& G+ f  c+ v) S
    P1IFG=0X00;0 X: e6 |: b2 ]" m/ p* p' U
    if((P1IN&BIT1)==BIT1)8 C4 [5 X1 J& `+ l; X2 Y) F
    i++;
/ S9 J. m. p! k9 P4 e    else- L$ x( m& Q0 ?5 l
    i--;2 _6 q0 V) @3 l, s
    if(i>=100)//接收的脉冲大于100则P1.6输出高电平,灯亮
2 L$ g/ k1 d, C( @, }3 Y      P1OUT|=BIT6;
0 \7 B6 }: q5 Q2 x    else' D0 S) e# g( U' {  a9 R+ q. Y! u
      P1OUT&=~BIT6;
2 Z  j! g& }& M4 V  }& m6 l* F$ x, a  X
}
8 J7 H' i. o# a我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断测试,灯一直不亮,现在也不知道是什么原因,求帮助,已经困扰好久了,谢谢!1 a& j* d# O# b7 k4 ^: a

该用户从未签到

2#
发表于 2020-7-29 14:24 | 只看该作者
可能是硬件出了问题吧   建议检查下硬件

该用户从未签到

3#
发表于 2020-7-29 16:29 | 只看该作者
#include <msp430x24x.h>
1 k( r, \0 ?8 |% C; z9 l: P9 ~int i=0;1 o9 ~7 ?9 n: `; P& I/ f
void init()//初始化时钟" ^/ ~( X+ p6 ?4 I
{
+ L) x6 u8 c3 e6 e   unsigned int i;
$ N& G+ B/ j2 L, a4 U" z0 \% z   BCSCTL1 &=~XT2OFF;//Basic Clock System Control 1,Enable XT2CLK
6 d+ X' {& b6 R/ V) b/ F                      //即打开XT2
% M* K, L5 ]! I* m   do* V( X6 e* X' H9 R5 v% f: }0 _+ K9 }
   {
  _3 F% X% j" P9 I3 d     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志
' F% j; x4 h- I9 [      for(i=0xFF;i>0;i--);// 延时,等待XT2起振
0 ~1 V" p8 N  X. V- u2 L   }
3 t4 w( b; y2 F9 Z8 b! B- Q   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               5 V) B- i8 f( G9 g3 M) ~" l
   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ/ Q4 ^- i5 d1 i! h. e
}
6 w/ t$ E' F* c( Zvoid count_init()
7 D+ O2 ]. R* l! \, J2 _* X* r{
5 v- S" w  X4 s) a   P1DIR|=BIT6;5 |, i* B" g/ J6 S; C9 b
   P1IES = 0x00;               // P1.0选择上升沿中断
& Q! E, r5 C+ O3 r, q   P1IE  = 0x03;               // 打开中断使能6 {; `+ V9 z1 y% \2 f  i
   P1IFG = 0X00;
2 e: f9 f& B+ A5 Z% P. F' {}
+ Q1 |' [7 _' v; m3 v) Tvoid main( void )3 F" t, P( q, h* l2 v0 Y
{
( S/ \9 Y9 t# W8 F( s3 m, [7 N  // Stop watchdog timer to prevent time out reset
! k' \; [% z+ F9 W5 G6 \1 A$ L  WDTCTL = WDTPW + WDTHOLD;
" x, _, d$ r' F) d) N# q. w8 O1 a  init();* A7 K* l! w$ @5 m: I/ x. m
  count_init();
  Q  x% b4 {+ P$ C! f  _EINT();           //开总中断
. S8 E$ D; n& ]+ \4 }# e) h5 t; C5 i}5 _3 }! K; Z9 z& O6 s
#pragma vector=PORT1_VECTOR   //外部中断计脉冲! e6 m3 Y# V9 D  D  I9 C/ F5 E( O
__interrupt void port1(void)
: l. h% @( Y0 D0 u{" P, t% e% M9 i) X7 T
  W9 q1 ^* s6 n
  if(P1IFG&BIT0)
- z* l! }5 m4 Q6 m  {  4 H3 `; e  y: _
    P1IFG=0X00;8 Z6 S5 O& U- f% `
    P1OUT|=BIT6;
3 x$ n7 y. ~. f  }
8 f5 }! }# m5 ?" G  if(P1IFG&BIT1)  {2 m% Y* r7 m4 k
  {+ _, B9 k6 x8 |4 p  T/ w. o
    P1IFG=0X00;
9 c) t/ n! o8 }, s. U1 }0 g    P1OUT&=~BIT6;+ V- ?5 r) L) `4 a: j" s8 p
  }
$ ]( }9 F4 n/ g" M/ [1 u}

该用户从未签到

4#
发表于 2020-7-29 17:58 | 只看该作者
在主函数里是不是应该加上一个while(1);?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-12 23:35 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表