单片机C51外部中断程序问题

2024-11-20 01:47:33
推荐回答(2个)
回答(1):

程序设计的要求是什么?
说的不太清楚。

简单改了改:

#include
#include

void delay()
{
    unsigned  int  i, j;
    for(i = 0; i <= 800; i++)    for(j = 0; j <= 200; j++);
}

void delay2()
{
    unsigned  int  i, j;
    for(i = 0; i <= 800; i++)    for(j = 0; j <= 200; j++);
}

void init_tx()
{
    EA = 1;
    EX0 = 1;
    IT0 = 1;
}

void main()
{
    init_tx();
    while(1)  {  P1 = ~P1;  delay(); }
}
    
void tx0() interrupt 0
{
    static unsigned char i = 0xfe;
    P1 = i;  delay2();
    i = _crol_(i, 1); 
    P1 = 0x00;
}

在中断函数中,进行延时,楼主的这个思路,是错误的。
特别是和主函数共用同一个延时函数,更加添乱。

回答(2):

外部中断0设置为低电平触发,去掉while循环后一直按下按键实际代码为
delay();
P1=0xfe;
delay();
EX0=0;
P1=_crol_(P1,1);
delay();
EX0=1;
P1=0X00;
一直重复.

之前的代码进入中断后会一直循环,并不会退出中断。正确做法中断应该改为:
void tx0() interrupt 0 using 0
{
unsigned char i;
delay();
P1=0xfe;
delay();
EX0=0;
while(1)
{
P1=_crol_(P1,1);
delay();
if(P3&0x04) //判断是否松开中断0的按键

{
break;

}

}
EX0=1;
P1=0X00;
}