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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include <msp430x14x.h>
8 v! g' d* w/ C9 Z2 l' @int i=0;4 D( D5 P( O8 z1 r
void init()//初始化时钟+ Q1 {' f; J6 z- Y  T' E
{9 L, A7 M- Z+ j' m' t# H! D
   unsigned int i;
0 W5 G% b; a  f% T0 J   _DINT();//__disable_interrupt(); G6 ^; g& ?" q0 u
   BCSCTL1 &=~XT2OFF;//Basic clock System Control 1,Enable XT2CLK8 t5 C9 X' {# o8 x" L+ C# E
                      //即打开XT2
4 J6 w# l$ X5 \+ H   do
; X! H% N4 s* j   {
6 ^$ Z4 G8 A/ |8 u9 b. q8 x6 ?     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志  _+ A5 r, h. |3 T) k
      for(i=0xFF;i>0;i--);// 延时,等待XT2起振/ ^# X" O5 O8 M
   }
  G- k: }; }0 N# g5 i0 J. s. B8 k   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               
3 v* l9 _' P/ ~* Z; u   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ$ G$ @% b, l" }' H
//BCSCTL2:Basic Clock System Control 2
. F- i' \) T" ^+ T, D0 L}+ R) U& d$ U( A/ ~8 u# A
void count_init()
# _% |" f8 z* a8 M* s{, q' q( D+ p% d( d
   P1SEL =0x00;
& b7 Q' t- R- ]9 R- X" z   P1DIR&=~(BIT0+BIT1);; e* t$ R! [2 F. z, w' l
   P1DIR|=BIT6;
& f! X! x+ B$ n# n   P1OUT=0X00;! Q7 k! N* n$ w0 Q0 x
   P1IES = 0x00;               // P1.0选择上升沿中断/ c' A' a/ s7 h6 \1 d7 }, M  q6 u0 ?, [
   P1IE  = 0x01;               // 打开中断使能. O( M+ D  @- V4 m7 z
}
5 x4 t: Q# q# }9 o; t; Eint main( void )
( r* B, ^9 i- D8 o0 q9 {{% t1 q  u/ m5 ^' Q" w% ~1 d
  // Stop watchdog timer to prevent time out reset
7 U6 l6 _5 _) t1 s) z- |  D3 e- O  WDTCTL = WDTPW + WDTHOLD;4 ]  ^: I9 j- x% c) B
  init();0 y5 o6 i( m: D. n; Q) F
  count_init();, a' A' o( V% U. V& f
  _EINT();           //开总中断4 s8 u( D: A* `0 N( M& F- _
  return 0;
& v6 R3 {: |/ D; Y) c6 K4 W8 e}
( V4 R$ v6 s% `7 e$ W, }0 p6 e#pragma vector=PORT1_VECTOR   //外部中断计脉冲
9 p' q; a. Z0 T__interrupt void port1(void)
2 S* |, y$ w5 w2 e{% ]9 p6 e2 @0 s
9 R4 |2 E  {) q) r
  if(P1IFG&BIT0==BIT0)! T  Q8 i' \3 ?
  {  , S) q9 R7 h9 l' J/ s
    P1IFG=0X00;
3 _% c; Q2 [+ ^0 W# m8 C' Q    if((P1IN&BIT1)==BIT1)
% d# W3 ]2 T9 H    i++;
6 r. f' r& e: M- d    else
4 X. Z2 R  N7 D# G, S- A4 u# H    i--;
1 ^3 h- G2 S3 U7 t+ J    if(i>=100)//接收的脉冲大于100则P1.6输出高电平,灯亮
7 m# V' _# Z1 E" H      P1OUT|=BIT6;
$ U, _) w/ h8 A; W    else( K8 s' m  J7 c% R: ~
      P1OUT&=~BIT6;
  B' O: u1 G6 e+ n; h$ s  }
: A, Z! r+ O$ V7 R* B}9 v$ X  L. S: t9 m. X" q5 U
我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断测试,灯一直不亮,现在也不知道是什么原因,求帮助,已经困扰好久了,谢谢!1 `$ I* S2 n9 w

该用户从未签到

4#
发表于 2020-7-29 17:58 | 只看该作者
在主函数里是不是应该加上一个while(1);?

该用户从未签到

3#
发表于 2020-7-29 16:29 | 只看该作者
#include <msp430x24x.h>, b/ Q- T. L) V! T2 C  @
int i=0;
  c( S' T5 F/ e; d) O4 E# X0 Qvoid init()//初始化时钟7 s6 ^; D; p' l: J: m3 [/ ~* }
{
. h2 j! m, W8 S1 n* i3 ?  h) p   unsigned int i;3 t# t8 F2 g& Q) p
   BCSCTL1 &=~XT2OFF;//Basic Clock System Control 1,Enable XT2CLK
) F/ ~: k* ]' s% \; _. L                      //即打开XT26 O# s2 {% s* z% Y% |8 w4 M( m! w
   do
5 e" q4 s+ h( _   {) `6 N0 _2 Z. O9 T4 C; P
     IFG1 &= ~OFIFG;        // IFG1:Interrupt Flag 1                                                // 清除振荡器失效标志
$ {9 ]/ T+ b7 H: @      for(i=0xFF;i>0;i--);// 延时,等待XT2起振
+ L& Z1 A! S+ L1 j) s   }; |' O  E- B7 i  A$ \8 i  Z- ^. f
   while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振               & O: Z3 s2 O( _$ q# f% H% c2 h
   BCSCTL2 =SELM1+SELS;       //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ
% j) H9 o6 L4 E}$ R( i5 [" k/ z, m
void count_init()
1 h) u+ W$ V) a6 M/ R1 j7 y3 ]* C{
9 Y" G1 ]4 \5 _* [  I$ s   P1DIR|=BIT6;. F8 _; L' o4 l6 r/ Q: Z
   P1IES = 0x00;               // P1.0选择上升沿中断( g4 L  K, K; E7 [
   P1IE  = 0x03;               // 打开中断使能
& P5 p! ?% D) j/ L. y) {   P1IFG = 0X00;5 F8 [" B: b  y/ E0 L. \
}( C6 w. ~  B  G+ ^
void main( void )6 S( I( u; O8 P3 n% P. H
{
# V" j% V3 n- |9 \2 ], o  // Stop watchdog timer to prevent time out reset
1 G! J2 I; s! T. k8 J  WDTCTL = WDTPW + WDTHOLD;
) K' B! `* V: m! w6 c# R% @  init();
8 t; X! D5 k9 m, z0 x  count_init();
: |: y. N5 F: v2 X  _EINT();           //开总中断% }$ D. I! Q- L
}
& x- `1 @' f+ q5 y6 k1 \: X#pragma vector=PORT1_VECTOR   //外部中断计脉冲) X  o2 R: c& U3 k
__interrupt void port1(void)& q* B; {' W, Q0 Y  U
{4 q4 P0 w2 F4 U
1 A( v! o* m* t( i# n& h
  if(P1IFG&BIT0)+ D! m( N9 w4 v1 M- Z7 A
  {  
; ~8 Y; Z2 P) X& G% T" ~! }3 q$ @    P1IFG=0X00;
: w1 J4 M+ [; ?6 C    P1OUT|=BIT6;
, m5 Z: Y7 d$ ^2 M' {  }7 f; L* w; G) v# Z1 P8 [8 T
  if(P1IFG&BIT1)
6 ?- }3 s% F: B( t7 L  {
2 W7 N: O: ~$ g3 }* B3 U    P1IFG=0X00;
$ D+ K& V/ S; f1 [+ g% [, E5 b6 u    P1OUT&=~BIT6;
! t; i7 t$ ?% X, Z  }+ ?+ m4 n" q" x" U9 f0 J8 B# O! S
}

该用户从未签到

2#
发表于 2020-7-29 14:24 | 只看该作者
可能是硬件出了问题吧   建议检查下硬件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 22:09 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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