本帖最后由 woaimcu123 于 2014-12-18 17:08 编辑
目的:使用外部中断,在进入中断服务程序后,向串口发送数据;
硬件:AT89c52,郭天祥的开发板
现象:单片机P1口接了8个led灯,进入外部中断服务程序后,点亮一个小灯,表明进入,并且向串口发送数据,但是将串口发送程序(没有用串口中断,直接用查询法)写在外部中断程序或是主程序中,小灯都不亮,将串口发送程序屏蔽掉以后,小灯亮了;将外部中断改为定时器中断后,一切正常;
程序如下:
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar i,flag,num;
void init()
{
//设置外部中断
EA=1;
IT0=1;
EX0=1;
TMOD=0x20;
SCON=0x50; //确定串口的工作方式
TH1=0xfd; //串口波特率 o
TL1=0xfd;
ES=1; //开串口中断
TR1=1; //启动定时器1
i=1;
}
void txbyte(uchar temp)
{
SBUF=temp;
while(TI==0);
TI=0;
}
void main()
{
init();
while(1)
{
if(flag)
{
flag=0;
P1=0XFb;
}
}
}
void time0() interrupt 0
{
//ES=0;
//txbyte(0x30+i);
//ES=1;
i++;
if(i==10)
i=0;
P1=0xfe;
flag=1;
}
望高手解惑
|