综合时候,IO中断服务程序的问题?

scuahui   2008-1-14 22:08 楼主
我使用的芯片是2274。
采用TA中断,周期为254 us, 中断服务程序内,AD转换使能,在该周期内用TA.OUT1触发一次采集。这部分单独使用没有问题。
然后我再使用P1.2按妞中断。在中断处理程序内,点亮LED(对应P1.0),延迟0.5s左右,然后关闭。当我按下按钮时候,LED仅点亮一下,就立即熄灭。无论我怎么改延迟的时间,没有变化,
请问大虾帮忙,这是什么缘故?

下面是相关的程序:
P1DIR |=BIT0; //P1.0 P1.1为输出方式,输出为0
P1OUT &=~(BIT0);
P1DIR &=~BIT2; //P1.2输入,
P1IE |= 0x04; // P1.2 interrupt ena××ed
P1IES |= 0x04; // P1.2 Hi/lo edge
P1IFG &= ~0x04; // P1.2 IFG cleared


#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{

Delay(2);//延迟,抖动
if(0==((P1IN&BIT2)>>2)) //BIT2=0x04
{ P1IFG &= ~0xBIT2; // P1.2 IFG cleared
P1OUT |=BIT0; //led 0.5s
Delay(500);
P1OUT &=~BIT0;
}
//
}

void Delay(unsigned int n)//ms单位.1Mhz主时钟,。。4个指令周期(!自己测试过!)。
{
unsigned int i,j;

for(i=N;i>0;i--)
{for(j=250;j>0;j--) ;}
}

回复评论 (4)

延时程序里的变量n和N是一样么?

另外将中断程序改为如下
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{

Delay(10);
if(!(P1IN&BIT2))
{
P1OUT |= BIT0; //led 0.5s
Delay(500);
P1OUT &=~ BIT0;
}
P1IFG = 0; // P1.2 IFG cleared
}
试试
点赞  2008-1-14 23:52
竟然有N的错误。faint。延迟防抖10ms。

谢谢版主
点赞  2008-1-15 21:06
C语言是区分大小写的呀,你定义的n,程序里用N当然不对了。
点赞  2008-1-18 12:57
呵呵,其实每个人都有不小心的时候。估计楼主就是一时大意而已啦。。^^
点赞  2008-1-19 00:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复