本帖最后由 秋水水天 于 2015-3-29 11:29 编辑
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag;
sbit key=P2^0;
sbit led=P0^0;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--)
;
}
void init()
{
TMOD=0x21; //计时器1工作在方式2
TH1=0xfd; //设初值,TH1的值自动重装到TL1
TL1=0xfd;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
ET0=1;
SCON=0x50;
PCON=0x80;
TR1=1; //开计时器
EA=1; //开总中断
ES=1;
}
void main()
{
init();
P0=0;
while(1)
{
while(key==1);
SBUF=0xff;
while(!TI);
TI=0;
led=0;
while(!flag);
flag=0;
led=1;
}
}
void ser() interrupt 4
{
RI=0;
if(SBUF==0xff)
{
flag=1;
}
}
这段程序的功能是按键发送一个ff,发光二极管是灭的,然后接收一个ff,二极管亮。
问题在于第一次发送ff,正常,接收灯亮,
从第二次开始,按下后会发送很多ff,不用接收二极管常亮,个人感觉问题出在flag上,但是flag我有清零,又或者说发送进入中断使flag变一,但是,问什么呢? |