单片机C语言简单中断问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 05:08:16
中断程序就是让beep=p3^7为0的时候,蜂鸣器响..但是我把p3^7接地之后,虽然蜂鸣器也响了,但是数码管还是在循环显示数字,只是变慢了..这是正常的么?中断了不就不会去执行主函数的程序了么?

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P3^7;

uchar code table[]={0xc0,0xf9, 0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar num;
uint i,j;
void yanshi();

void zhongduan() interrupt 0
{
beep=0;
}
main()
{
EA=1;
EX0=1;
TCON=0x01;
while(1)
{

P2=0x00;
for(i=0;i<10;i++)
{
beep=1;
num=table[i];
P0=num;
yanshi();
}
}
}

void yanshi()
{
j=50000;
while(j--);
}

中断是成功执行了,但是中断的时间一过,主程序还回到中断的下一条语句继续循环执行的。变慢了就是因主程序还会打断去执行中断的程序。

一个是软件清0,,一个是硬件清0
肯定会有你那样的问题的。中断会产生,但你那蜂鸣器不是由程序来控制的而是本身导致的。

void zhongduan() interrupt 0
{
beep=0;
}
中断执行此代码只要几微秒,过后就重新回到主程序执行,但beep=0; 的状态一直维持着,所以你的蜂鸣器在响但数码管还在走