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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include <msp430x14x.h>1 P* ]1 R, Q! J3 Q4 v
int i=0;
; j$ U# a' D& V1 wvoid init()//初始化时钟& L% Q' U2 ]/ S* e8 q3 k5 e
{
6 V) p8 r& ~1 N# @   unsigned int i;
) Y- j* Y# Z# ~, H   _DINT();//__disable_interrupt()* f# d) `9 U/ S: D" _7 f
   BCSCTL1 &=~XT2OFF;//Basic clock System Control 1,Enable XT2CLK
0 F2 g, S: {  X6 D                      //即打开XT24 \+ l; h* H) M1 e( x2 I/ f  m
   do
* l  m; M+ y6 V5 d) q% I* `   {7 A5 L) G5 y  P
     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志
: i% ^2 _( K9 O      for(i=0xFF;i>0;i--);// 延时,等待XT2起振" B' A4 y; o) Y9 ?# q0 n
   }  k# E& z* U8 N9 C: ~: y& B
   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               # d) L0 }- _+ Y
   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ7 X. I1 V- P/ }2 r5 q  H) d
//BCSCTL2:Basic Clock System Control 2
$ ^. f4 L8 E% A$ H' J& e+ ?}9 K' t& y1 ]& }- G# m
void count_init()) [( y5 f9 z( m; G* S, e' b
{
  I) z" j$ }3 p4 J  v1 `/ b   P1SEL =0x00;% L+ u% g1 Z8 P+ u5 v4 K* R+ _
   P1DIR&=~(BIT0+BIT1);
+ k- A  z" i# \) u   P1DIR|=BIT6;
' ]2 X8 Z# M. m( y2 z6 t   P1OUT=0X00;. ^! K0 W, o! {8 t2 n
   P1IES = 0x00;               // P1.0选择上升沿中断
( N  p$ d) f7 C0 [   P1IE  = 0x01;               // 打开中断使能! N/ r7 Q- u' [) {/ e
}$ L% M# W, t; q; t8 k
int main( void )
+ J; ]. s! L8 d: V{
1 U* @' p3 M' `; n6 \  // Stop watchdog timer to prevent time out reset
# E6 c! o2 M1 s* j1 B# U3 {  WDTCTL = WDTPW + WDTHOLD;, D& n- V8 G8 n* `
  init();2 L! i7 T* v& _  L' ]: F
  count_init();% w8 x! c; U! @  V6 }4 H
  _EINT();           //开总中断8 `9 Z5 c/ `0 ~$ C
  return 0;! V9 e# ]* m: t) D4 Y! g0 U7 O
}
9 p- l& W$ M! F& T6 R#pragma vector=PORT1_VECTOR   //外部中断计脉冲
- N( s% R5 {: h: C; Z/ B! A__interrupt void port1(void)$ Y$ ]  m7 T" q2 M  S6 K. D4 U
{4 @* A6 s/ a, `. n& r
, e7 H6 P6 J  H
  if(P1IFG&BIT0==BIT0)- J# W7 r4 B$ g6 w
  {  ) {8 P* b4 w$ f7 i
    P1IFG=0X00;" v, t+ h8 y4 g/ |
    if((P1IN&BIT1)==BIT1)1 t# z  u9 T% r5 k/ q7 d& q* W
    i++;6 U4 W2 i6 @6 Y2 v- s5 u
    else. H% T7 q7 m1 P& o2 C7 A
    i--;, O; x8 v6 ?4 o) r& [
    if(i>=100)//接收的脉冲大于100则P1.6输出高电平,灯亮
7 O* q3 P% `8 W. x3 e  T+ Q8 y* ~      P1OUT|=BIT6;4 |& G7 G- i$ t& A( X- x! @& D
    else  c  X( E+ l) E! f
      P1OUT&=~BIT6;
9 e* r" y0 f: m/ n/ V  O" W  }9 n1 q8 S3 |: Y
}4 k- s/ `% U* ^, P% b
我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断测试,灯一直不亮,现在也不知道是什么原因,求帮助,已经困扰好久了,谢谢!; H: i1 z- c1 n0 S6 P3 p: _

该用户从未签到

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

该用户从未签到

3#
发表于 2020-7-29 16:29 | 只看该作者
#include <msp430x24x.h>
; D9 @2 n* y; P3 s3 A& _int i=0;
+ V) @6 L9 P: Rvoid init()//初始化时钟
8 d- v# C; J2 U( X{. g2 k7 [# |# y3 x+ p
   unsigned int i;
1 G- V$ k- l4 F4 W9 B   BCSCTL1 &=~XT2OFF;//Basic Clock System Control 1,Enable XT2CLK* N2 x" b* x) W
                      //即打开XT2
/ k9 M6 q  X6 C3 q   do
4 k' V' _) h6 k& N2 j; i# z   {
( h; G# D* ]; a* E% x; s7 @: a5 c     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志
/ c5 N6 H" g9 I% [( a      for(i=0xFF;i>0;i--);// 延时,等待XT2起振& x8 {3 C3 u3 [9 |# h; T0 Z
   }
0 b5 N( }6 b' P+ N! R7 k. k" {6 Y+ N   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               
# U( l  ^" s8 S; M2 ?3 j   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ
& t7 J! m0 L. F9 ?. W}
" R4 _& H8 N" j* D1 }: G$ V( ]void count_init()1 I! j1 _" ]" ~+ P9 s
{
* H* J$ h# G4 U  H6 Z   P1DIR|=BIT6;
, a; {$ O* c9 m8 D% v   P1IES = 0x00;               // P1.0选择上升沿中断
  o. F. ^# e8 I3 N! O# a. N$ X   P1IE  = 0x03;               // 打开中断使能
( g1 E7 p) I! |- [   P1IFG = 0X00;
' y1 K- e  }: Q; W}
5 @! `$ s0 ^2 x, c% v5 dvoid main( void )0 p% c/ z. d( A* t. E) R9 h
{  D* Y0 k7 ^; b, Z6 c
  // Stop watchdog timer to prevent time out reset% V. x: I2 t0 q# ^8 a4 U
  WDTCTL = WDTPW + WDTHOLD;. h: ^$ M. r! d5 s0 ]( s
  init();
  `3 J; |. H. o  count_init();  d, H" [& w$ A' [9 ^% [+ S
  _EINT();           //开总中断. l1 K6 m/ V7 k& X' \1 w
}
& R3 r) w3 g. F5 g1 V7 F9 B! J3 O#pragma vector=PORT1_VECTOR   //外部中断计脉冲8 o6 e, l! r! m
__interrupt void port1(void)" h/ I! s* f1 z& ^$ `4 _$ d: i
{# J" p- L4 Y; k' x3 o
6 i3 a: n! Y" b  d' f6 W, {7 i* J& N
  if(P1IFG&BIT0)
% _9 ]$ Z* m3 @; T/ a) y, Q  {  
* \: C  B5 z4 |8 Q9 b$ Y    P1IFG=0X00;
. C& J( h' P$ H    P1OUT|=BIT6;) K' z; a2 ]6 X0 v& w; j
  }! ?7 _2 [4 [8 v+ M- i
  if(P1IFG&BIT1)6 P! J( B2 L  `- o: G
  {9 p& H# |: j# k9 n6 N
    P1IFG=0X00;
: g* l  U+ r6 M' A    P1OUT&=~BIT6;# _" }0 s- \5 w& A  N* N
  }
0 `0 p- @7 l8 u1 z2 U}

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 20:40 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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