前辈您好:我在进行CC2430基础实验 外部中断时 怎么调试也没有达到我要的结果。我是实验思路是 D31~D34交替闪烁,当P0_6接地时也就是下降沿时 执行中断 让D35闪烁!我的程序如下(麻烦您给指正一下) 其中 D31~D34分别与P1.0~P1.2 D35与P2.0相连 ,P0.6只是往外引出来一个接口。:
#include <ioCC2430.h> #define D32 P1_0 #define D33 P1_1 #define D34 P1_2 #define D35 P2_0 void Delay(unsigned char n) { unsigned char i; unsigned int j; for(i=0;i<n;i++) for(j=1;j;j++); } void init_xtal(void) { SLEEP &=~0x04; while(!(SLEEP&0x40));//0x40=0100 0000 CLKCON&=~0x47;// 0x47=0100 0111 SLEEP|=0x04; } /*void init_led(void) { P0SEL=0x00; P1SEL=0x00;//设置P1为普通I/O口 P2SEL=0x00;//设置P2为普通I/O口
P0DIR=0x00;//设置p0为输入 P1DIR=0x07;//设置p1.0~p1.2为输出 P2DIR=0x01;//设置p2.0为输出
D32=1; D33=1; D34=1; D35=1;
}*/ void init_interrupt(void) { P0INP&=~0x40;// 设置p0.1的输入状态 1:三态;0:丄拉|下拉 EA=1; P0IE=1; PICTL|=~0x11;//设置P0_4~P0_7 为中断使能并且设置P0 为下降沿触发 P0IFG&=~0x02;//P0口中断标志位 0000 0010 } void main(void) { void init_interrupt(); P0SEL=0x00; P1SEL=0x00;//设置P1为普通I/O口 P2SEL=0x00;//设置P2为普通I/O口
P0DIR=0x00; P1DIR=0x07; P2DIR=0x01;
D32=1; D33=1; D34=1; D35=1; while(1) { D32=0; Delay(10); D32=1; Delay(10);
D33=0; Delay(10); D33=1; Delay(10);
D34=0; Delay(10); D34=1; Delay(10);
/* D35=0; Delay(10); D35=1; Delay(10);*/
}
}
# pragma vector = P0INT_VECTOR __interrupt void P0_interrupt (void) { EA=0; Delay(100);
if((P0IFG&0x02)>0) { P0IFG&=~0x02; //D35=!D35; D35=0; Delay(10); D35=1; Delay(10); } //P0IF=0; EA=1; }
辛苦了!!!
我的邮箱是chezkp@163.com
|