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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include <msp430x14x.h>
9 d& x% D2 N- w- vint i=0;& A- \8 d9 B: p3 d: f$ b" F
void init()//初始化时钟
2 j& O( m# y7 k3 b" `, w5 u{
( r! L, o8 \/ Q. }0 n4 z* S+ ~7 h. F; u   unsigned int i;
* [  e! R$ P4 H% I5 A  Z4 o% N$ j   _DINT();//__disable_interrupt()
: z  v: h! A0 u6 K   BCSCTL1 &=~XT2OFF;//Basic clock System Control 1,Enable XT2CLK
5 }8 J0 n# G: q                      //即打开XT27 |$ P( M2 \7 G4 a; ]
   do
. s2 g' i! u3 c2 n# U: o   {7 v# P  n* u$ o8 a* s( i# E$ ]
     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志& ]  D$ K1 D; h, C% q+ p! r1 O
      for(i=0xFF;i>0;i--);// 延时,等待XT2起振. g9 J9 f# {  V
   }$ Y- h, t8 |) \6 k5 @5 Z
   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               
& C$ v1 `$ o2 e   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ
+ p7 ^7 H+ r$ {3 B' D4 W: V1 U3 w//BCSCTL2:Basic Clock System Control 2+ C$ |, u( n2 {2 ]5 R+ n- R
}3 [3 _' c0 a; s! |  N
void count_init()
/ O7 I9 a, x; W! v# t7 p3 O* N{
  r# y' W# q# b( \6 @   P1SEL =0x00;+ Y0 t- R) X. v' q, x7 f* v
   P1DIR&=~(BIT0+BIT1);
. z4 V* b: x2 R, p   P1DIR|=BIT6;
- I% ]8 k5 N9 V, {8 L' c   P1OUT=0X00;
- L# l2 ^) T! s6 |( e! D* x# z   P1IES = 0x00;               // P1.0选择上升沿中断
. ~3 }" T% _2 S3 L7 k; X   P1IE  = 0x01;               // 打开中断使能
' O  p; d5 x$ b4 {; D}% @9 o2 V; T7 f, v
int main( void )! u. j& a, K, u: O
{
, w7 w$ z& e$ A% N" g  // Stop watchdog timer to prevent time out reset- ]" `, s5 _, m- D& C
  WDTCTL = WDTPW + WDTHOLD;
7 A. V$ C* }& {: Q  init();
0 O$ \) m! B: v) \  count_init();
9 d1 _# J( b( `, L- L1 ]$ V7 \# p& d  _EINT();           //开总中断1 z4 e+ E+ F6 S
  return 0;
% O- S: {  E2 V: y0 b7 d8 ^+ _}: v# l1 J2 p$ T1 @+ j' P
#pragma vector=PORT1_VECTOR   //外部中断计脉冲
6 S2 E4 S' ]2 i" n. ^9 _% C__interrupt void port1(void)9 s5 ?0 v1 c$ v% u% l
{4 M# E+ p$ |6 }9 w/ L
- w  p" q( x3 Y; J4 R: X  S
  if(P1IFG&BIT0==BIT0)
& z5 @$ K* M! E  ~. p$ ]  {  + V1 L" b' V" l& ~" o
    P1IFG=0X00;
; X$ ?1 D7 r( k: ]& k9 |# W    if((P1IN&BIT1)==BIT1)
( F4 ^0 G: G* ?) O) }+ B6 w    i++;; [; Q; x  m# Q& {! _- ]" |
    else; F. W: K: I8 K* n* }, @
    i--;
" P) O( D; ]9 a$ f: m) R    if(i>=100)//接收的脉冲大于100则P1.6输出高电平,灯亮
! K4 i, \0 `$ g6 j3 L/ A, I      P1OUT|=BIT6;
, m2 z$ j& l( t3 O0 ~4 \: k. [    else9 a  P: V2 K/ x' h: `8 U7 Z
      P1OUT&=~BIT6;
* }" w3 M# x% `  }2 A/ f0 L) l8 y# L- s& m
}; e! y2 D0 X8 r' q4 a7 a3 d
我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断测试,灯一直不亮,现在也不知道是什么原因,求帮助,已经困扰好久了,谢谢!
% X6 \" y6 w; d9 @7 v

该用户从未签到

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

该用户从未签到

3#
发表于 2020-7-29 16:29 | 只看该作者
#include <msp430x24x.h>
# v; U# Z8 Z9 ~* t. S' j' Yint i=0;
& t! U' u# M2 S6 `void init()//初始化时钟
& M7 n7 [/ j* A% g{! b( x( V: J  M4 g
   unsigned int i;8 `$ }. j1 a& k  L- f0 Z
   BCSCTL1 &=~XT2OFF;//Basic Clock System Control 1,Enable XT2CLK: T4 N. Z# ^6 m. h
                      //即打开XT2
( H0 f0 C2 z$ i, p6 Q   do; a+ W' o9 T7 e% T4 d. d' Q
   {
( s- O* C/ T* w' [$ x     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志1 U% m1 H2 U5 l7 l9 ~% Z7 g
      for(i=0xFF;i>0;i--);// 延时,等待XT2起振7 o& w" B5 W* Q+ o; B7 J; n3 z
   }
  L% h4 f; v: H1 _) V: |# o, j   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               , Y5 C( i; C/ p3 J) |& ]
   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ! ]# F$ p: r$ a
}
' p- ]+ Y, J! l1 z% \8 P" \0 k9 t. Vvoid count_init()7 I7 F) P6 ?; k' }4 K/ F4 y
{
6 H6 \% Z( H- Z5 G/ S   P1DIR|=BIT6;/ ^2 d1 x' ~7 U7 y
   P1IES = 0x00;               // P1.0选择上升沿中断) W2 k# b6 @( B5 R- I  @
   P1IE  = 0x03;               // 打开中断使能
( D) O0 ^5 X, r/ S' `0 \/ u   P1IFG = 0X00;% A. c: |- c8 ^
}' q9 j  h6 V/ {" Q2 t) H
void main( void )
- q& U' T2 i$ D  W" R. [; ~* U4 o{
- v! G8 F3 q& z4 t  W  // Stop watchdog timer to prevent time out reset
* b7 {7 ]0 r0 Y) n% i3 v$ d  WDTCTL = WDTPW + WDTHOLD;
9 a: W& ]! R) O2 l6 `& x& \  init();
/ P$ \8 X5 D( L8 @# s  count_init();
6 J* c7 G6 m7 |) _/ O  _EINT();           //开总中断
, I5 \6 I. v; [3 Q. M) i2 O* V}
! g# G) o) F' c#pragma vector=PORT1_VECTOR   //外部中断计脉冲
8 L4 y# {* k( d9 W8 P: Q  y0 F__interrupt void port1(void)
2 _2 s3 B$ Q) I; ?1 b; \; q! V{
) n% t) ]% k; R+ M( E0 x! u
& Y* e8 w* {' q  if(P1IFG&BIT0)8 h3 o1 G: ?; v+ a
  {  
# k  w* N: f5 H: c* S+ _0 P    P1IFG=0X00;/ v7 O+ U& a' C  m
    P1OUT|=BIT6;
% L- ]% i  L0 Q) T  }
5 C, W. a" K, z$ @5 W4 }/ f1 Q  if(P1IFG&BIT1)# }% R: p! X) h( e4 Z8 t
  {/ R$ ~; i+ |# Z, l
    P1IFG=0X00;
. Y. s7 S) z9 r2 N4 c0 S8 l+ T# T    P1OUT&=~BIT6;
) A' L2 [6 k2 r* o0 u4 f' L  }
7 r( T5 k* i# y0 _6 Q) R8 w}

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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