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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include <msp430x14x.h>! R4 Y" g, a- n' m# R
int i=0;1 b3 x& L, A5 h! O: s
void init()//初始化时钟" K9 Y: J1 F  b$ c
{4 H0 ~+ G0 g" C& F$ c" K. G" _
   unsigned int i;. ?* G! v. p& R6 u' ?3 I3 x
   _DINT();//__disable_interrupt(): C3 l5 t( i7 A; Q1 M
   BCSCTL1 &=~XT2OFF;//Basic clock System Control 1,Enable XT2CLK
1 T" j3 {( ?; `- [# x2 H                      //即打开XT26 h; @+ _/ @9 M8 j& s5 z
   do
5 w, u7 |7 Z8 a* F; {! ^, q  |   {
" N$ J! T1 r0 [! \& C& h     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志, X, t) V% w) [6 {3 S
      for(i=0xFF;i>0;i--);// 延时,等待XT2起振% P0 S8 {2 e; h0 y
   }& F& {3 X! u$ t! L4 [# M1 E
   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               4 {8 s1 C; L6 `9 A! D+ ~, \
   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ
/ R& l8 X- l9 u/ {; e0 D) G, I; B7 o//BCSCTL2:Basic Clock System Control 2
. W* x- j- D6 O" _. W; J- }) b}
  T0 H0 W9 S. P2 b* q7 o: P( Bvoid count_init()
, _8 B3 S: Z- }{# D" m) S: c2 Y% N. Y$ s1 [/ j; r( {
   P1SEL =0x00;. G( M' l6 b$ j8 |- Y1 ~
   P1DIR&=~(BIT0+BIT1);* M% z+ G! W" {+ I: i
   P1DIR|=BIT6;9 R$ Z/ M# e$ b1 d$ a/ }8 E9 D
   P1OUT=0X00;
, E  f9 X- X' p  m" h, n8 f   P1IES = 0x00;               // P1.0选择上升沿中断! ~; o/ B% t/ y5 T$ F; s( ?  m+ G# |
   P1IE  = 0x01;               // 打开中断使能
4 ]1 \. [  a  X3 J7 ]! ]+ r/ C* ], e}
% t7 {! A' b" n2 Oint main( void )
) y+ h! i9 _* s: r% ]  U{
0 {; W0 {/ C( B' h0 n  // Stop watchdog timer to prevent time out reset( s2 E$ h9 ^! \) c4 O
  WDTCTL = WDTPW + WDTHOLD;
% A, Z3 j0 ]; Q& F0 J  init();% X3 h1 f3 u0 h5 f/ ]
  count_init();
( y3 _% Q$ Z/ i: ^  R, O7 K6 g  _EINT();           //开总中断- v! O% i- _  M- s: m3 J
  return 0;
" m6 c! t3 p4 M5 r}
# Z( D1 x3 L7 J6 [! Z#pragma vector=PORT1_VECTOR   //外部中断计脉冲
8 z8 h, {# J+ s5 x; ?5 U__interrupt void port1(void)
7 f" U, v3 h! C  v7 }{
1 d$ w, `- I4 f- y  n4 S) _; ?# O- g+ B3 U5 [
  if(P1IFG&BIT0==BIT0)
) m; ^9 W1 O# G& `  {  / l4 b  ^! t$ W. O4 d) w
    P1IFG=0X00;0 G6 k& g4 w) e( j9 g: B
    if((P1IN&BIT1)==BIT1)1 N' M  j! K+ b7 u0 o% [
    i++;. h- u- b; a' j# B/ G; w4 O
    else: f$ Q: g( Y/ }, O6 j& v& r3 Y
    i--;
' z8 x9 i4 A$ I3 X  y    if(i>=100)//接收的脉冲大于100则P1.6输出高电平,灯亮
+ b% S1 E; t! u* r      P1OUT|=BIT6;
+ R$ k7 _+ Q7 y( v* F/ q    else# J/ `/ |" s9 [! f# t
      P1OUT&=~BIT6;5 D- }- u; g5 p
  }. S+ G! M* V( v  k" i, z
}  x3 S7 K* J( k  |% y$ `! z
我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断测试,灯一直不亮,现在也不知道是什么原因,求帮助,已经困扰好久了,谢谢!
9 {1 q, B: G* G  J( X

该用户从未签到

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

该用户从未签到

3#
发表于 2020-7-29 16:29 | 只看该作者
#include <msp430x24x.h>; k; g' v# [6 k- l
int i=0;
5 O7 ?9 J1 E6 z7 {. f6 u5 N7 [void init()//初始化时钟( [# h- F' M& r  z
{1 F0 r+ J, X' g3 ]. u
   unsigned int i;. y0 T2 f. P3 K* j! F4 n0 j: K
   BCSCTL1 &=~XT2OFF;//Basic Clock System Control 1,Enable XT2CLK
2 f: E8 n& L1 y3 o+ G3 q                      //即打开XT2
; y5 {& P# ^% Y, C1 e   do
0 G$ u) X$ d8 v/ k: _   {5 O1 }' q2 |4 L4 ?5 g
     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志8 Y) e/ r. f  X4 V2 W, K" R0 }
      for(i=0xFF;i>0;i--);// 延时,等待XT2起振8 V. h, x% j1 g+ Q
   }
" N) w. o: S$ `# o9 m& H   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               
+ U% d. Z& p; C   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ
3 x% ]  z9 o/ j! o5 T}& M( z1 o- ?- T) X# Q. @, U
void count_init()
2 W9 y: M" g$ f& |4 ^{
4 ]# U+ M7 C. ~4 h# r  X   P1DIR|=BIT6;
8 {# c; Q9 N3 L% @4 Z8 ]   P1IES = 0x00;               // P1.0选择上升沿中断2 k, X2 H3 t" j, N, B3 y( k1 {1 m
   P1IE  = 0x03;               // 打开中断使能% U) P, A: |6 v
   P1IFG = 0X00;1 w& k+ X" Z1 V& H& n
}
/ |( l) m; }' p, B8 F  jvoid main( void )
$ t/ F3 S, {) `; L& p3 O5 ]" d{
2 Y3 a* `4 q; C6 _  // Stop watchdog timer to prevent time out reset
7 m6 t, L# o5 H$ x  WDTCTL = WDTPW + WDTHOLD;1 |' t4 C. P" M6 R4 m4 i7 L4 q
  init();0 I# }/ N* i0 q( J$ }9 L( {' q
  count_init();& h5 C% X; p' m6 J9 u9 q' \
  _EINT();           //开总中断
8 `* g1 S+ i9 y+ ~$ m6 N9 D}3 z8 |' b7 E$ x9 q& P6 d
#pragma vector=PORT1_VECTOR   //外部中断计脉冲
6 D* [7 H: W4 n3 L2 |9 b' [) O__interrupt void port1(void)
, ?3 v1 p! ]4 h, I, N{
# W- p1 i  S, D, {3 `# ?" U' A, f5 w2 c) K! r
  if(P1IFG&BIT0)
0 J+ H6 i% m' k% Z: z3 ?  L% g  {  . k4 K! r. R/ U" G6 u
    P1IFG=0X00;: [" ~. X& _, a$ d" ?' O4 C
    P1OUT|=BIT6;% J: k" Z. J% w. i6 `8 [" Q( S( [* L
  }
& l0 ?% f: b( {$ v3 P* z! G) e$ a6 g  if(P1IFG&BIT1)2 A- n1 N7 \0 w6 ]7 e4 A- n' `
  {* a% }* k  h5 D* B( U8 V
    P1IFG=0X00;
" ]: o* T/ x9 ]2 l8 S! M( v4 H    P1OUT&=~BIT6;
- H: ]5 _) G  @$ Z4 v  }
# U. G5 t6 y0 P( p1 K+ h! C}

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 12:05 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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