EDA365电子论坛网
标题:
我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断测试,...
[打印本页]
作者:
ByGrith4
时间:
2020-7-29 13:48
标题:
我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断测试,...
#include <
msp430
x14x.h>
8 V0 Q6 L* C, B9 L8 X0 ]+ b
int i=0;
2 c0 [+ n9 L3 K8 S9 ^" ~- N
void init()//初始化
时钟
* m( I6 U9 k l5 L( t
{
6 |( M* P. }5 Z
unsigned int i;
% g! F2 ?6 R/ b/ ^; x$ O
_DINT();//__disable_interrupt()
- E0 Y7 r. A9 ^% p+ d5 P2 S
BCSCTL1 &=~XT2OFF;//Basic
clock
System Control 1,Enable XT2CLK
, J5 J3 [' W4 C* V1 S
//即打开XT2
0 J* d9 p# ?/ C3 v) g5 E" | j D
do
- F' l! z |6 o: C, l; I
{
# t6 ?4 t$ l s+ U" p
IF
G1 &= ~OFIFG; // IFG1:Interrupt Flag 1 // 清除
振荡器
失效标志
% Q0 h, B& c+ L6 t: Y& ~$ h
for(i=0xFF;i>0;i--);// 延时,等待XT2起振
- i y& W9 X! z9 m
}
' D2 j) d! j; M5 Y
while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振
! [7 V; c0 v$ Z% {: |
BCSCTL2 =SELM1+SELS; //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ
/ n* C" o1 Q9 K9 A' \6 w
//BCSCTL2:Basic Clock System Control 2
e& v6 k; {2 w" ^5 t. b$ Y
}
( F8 i g5 ]" [" p# A8 [, y# {+ ?
void count_init()
' j" m/ v! K' f* e
{
# H% b" a" b8 q! {) G \! x) I
P1SEL =0x00;
/ M. f8 ^0 H6 Z
P1DIR&=~(BIT0+BIT1);
& Q/ e& S% g4 V% U
P1DIR|=BIT6;
) M1 T5 s# o5 S' ]7 s
P1OUT=0X00;
4 R* H: W" n/ @6 p
P1IES = 0x00; // P1.0选择上升沿中断
, T- M% u) A A% Q- B
P1IE = 0x01; // 打开中断使能
8 s) t4 [( m% ^! o% r+ P! ?
}
% d6 G/ g' `7 w7 W
int main( void )
2 o% H1 Q) d0 n; L f
{
- p4 a8 P+ Y7 u) I5 c3 G- ^+ Q% Z
// Stop watchdog
ti
mer to prevent time out reset
2 W; T1 U5 R( B/ A
WDTCTL = WDTPW + WDTHOLD;
' y. j) H5 r0 e5 @0 |0 j9 [* n6 y
init();
) W! q( r/ i- _2 Y. X( ~( Q* h& l
count_init();
* X# _# Y5 @& j6 i
_EINT(); //开总中断
* a8 `) \( u2 |; {
return 0;
: j0 u8 _, ]; X! r0 k; }' W) J
}
4 R# Q: @0 M- V7 p+ K5 n) }0 C/ B3 v
#pragma vector=PORT1_VECTOR //
外部中断
计脉冲
2 M! T$ g- I# q7 I6 }
__interrupt void port1(void)
# ?0 R; @" V3 c7 u# O. }/ e
{
4 R$ [2 l& L B& ~# X4 W) T
+ n. [, F& A( M5 M/ g
if(P1IFG&BIT0==BIT0)
$ d$ d! s: E6 O* ^0 t
{
" o: U2 ~4 c% @2 a% D% @6 E
P1IFG=0X00;
4 n1 L7 q( N- |2 F
if((P1IN&BIT1)==BIT1)
: X! ^8 X& B" a5 N0 ~. y
i++;
6 j/ E2 O( h+ S
else
2 H9 C( v9 \* ?2 {$ [! S
i--;
6 L$ O+ A: s! \3 @! r
if(i>=100)//接收的脉冲大于100则P1.6输出高电平,灯亮
: W M1 o% q( A: ~, u
P1OUT|=BIT6;
! G# X8 y. z4 `2 g# [# p
else
5 Z1 s5 T8 H* _ e- A
P1OUT&=~BIT6;
$ |: E7 A% r& I7 I2 W' ^3 ]; v f8 }
}
% ]7 C) ]3 N5 Z! v- s0 _& E0 n, \' ~! P" s
}
9 ~% d# g3 ?0 U- b' N% f$ w
我打算用外部中断计电机脉冲个数,但是好像没有用,这是我写的一个外部中断
测试
,灯一直不亮,现在也不知道是什么原因,求帮助,已经困扰好久了,谢谢!
7 x( g/ Y2 r4 z( \: @1 W- O/ |9 {
作者:
messed
时间:
2020-7-29 14:24
可能是硬件出了问题吧 建议检查下硬件
作者:
nolita
时间:
2020-7-29 16:29
#include <msp430x24x.h>
1 A# f3 ~( U8 v" m y. H# d4 t
int i=0;
: [5 b" X* e, \3 d' p2 c
void init()//初始化时钟
- u1 R) T' Z7 ? w8 Q* f0 E
{
% M2 E: F7 w5 O9 ~& [* h' @
unsigned int i;
' v& p' b. z3 q6 k
BCSCTL1 &=~XT2OFF;//Basic Clock System Control 1,Enable XT2CLK
6 k- \/ a1 {8 j8 U2 e7 c' V/ N
//即打开XT2
' t3 l" q" b4 A; I1 R# O. f/ o
do
* q4 e9 R o/ m4 |1 J
{
; D: n" J7 p @3 k; N% F
IFG1 &= ~OFIFG; // IFG1:Interrupt Flag 1 // 清除振荡器失效标志
7 i1 V$ U3 \" I, m% J! B3 ?
for(i=0xFF;i>0;i--);// 延时,等待XT2起振
# I9 q2 c7 M- U( w C
}
1 L3 N9 j6 C7 P# G
while((IFG1 & OFIFG) != 0);// 判断XT2是否起振,OFIFG=0则起振
8 G' ?0 U2 U$ [& O" b5 d1 i
BCSCTL2 =SELM1+SELS; //MCLK(SELM1),SMCLK时钟为XT2,都为8MHZ
& e0 \/ P, N) B9 B5 W9 d
}
2 @' W, G5 K0 e* w6 x# j! f" Y
void count_init()
, h% l" \1 m% a3 o8 [
{
' L$ j5 o- n6 I" G' A/ U
P1DIR|=BIT6;
8 A+ S+ g# c! d& p6 X: s- N
P1IES = 0x00; // P1.0选择上升沿中断
9 N& N* }& l" q" p
P1IE = 0x03; // 打开中断使能
( P n, H6 s/ f% v
P1IFG = 0X00;
4 _% Z' [) I( n3 M% x/ `* f5 e
}
8 c1 {$ A+ v4 ^: G* }
void main( void )
" m) i, Y$ R3 }" i" g
{
' k6 O" U! @4 s* x# y
// Stop watchdog timer to prevent time out reset
) _6 x$ B) j4 b) J& |6 t J8 X
WDTCTL = WDTPW + WDTHOLD;
- T: p" G! C% I8 B3 d& c6 C3 t
init();
. ~6 l* a- I- i' p4 @
count_init();
' P5 n- \1 ~" b
_EINT(); //开总中断
+ y9 _2 Q" D7 @
}
1 p/ R4 S5 F0 J5 [# P4 f+ T1 Y4 m
#pragma vector=PORT1_VECTOR //外部中断计脉冲
2 U: B3 i2 l/ k9 o# b2 j0 f3 b
__interrupt void port1(void)
7 G. }0 _2 ~4 r9 X4 T0 U+ f
{
! W" }& P4 g6 L( i/ T* ?" L8 m" d
6 D6 B3 J0 i4 f/ w3 C4 U& d; l! c' Q
if(P1IFG&BIT0)
' w. E& c/ }; q' A, W4 b& O7 n# N. a
{
& P0 V* o# L7 G7 }. ?, ]; M% s4 T
P1IFG=0X00;
# X" `/ A, h7 J- k
P1OUT|=BIT6;
- ~$ W( k- l' T; O1 n. @
}
2 w s+ h3 J5 s! q) r1 ^
if(P1IFG&BIT1)
" F3 J' x' z0 [* n; t2 a
{
* h- v+ U( W% K' D
P1IFG=0X00;
; M( k6 z6 g* _
P1OUT&=~BIT6;
+ N, N f2 r2 X9 S. D, m
}
/ F2 _. g# H6 ~& H3 \' v, s
}
作者:
crime
时间:
2020-7-29 17:58
在主函数里是不是应该加上一个while(1);?
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2