单片机通信问题 ,按一个键,输出1

void interruptet1() interrupt 3
{

while(1)
{ if(TI)
{
TI=0;
if(KEYIN1==0)

{
delay(2000);
if(KEYIN1==0)
{
SBUF=1;
}

}

while (TI==1);
TI=0;

}

}
}
我是菜鸟,请问什么是串口中断和定时器中断?
我把整个程序贴一下
#include<reg51.h>
#include "LX.h"

void uart(void)
{
SCON=0X50;
TMOD|=0X20;TMOD&=0XEF;
TH1=0XFD;TL1=0XFD;
TR1=1; EA=1;ET1=1;
}
void delay(uint16 i)
{
while(i--);
}
void main()
{
KEYOUT1=0;KEYOUT2=1;KEYOUT3=1;KEYOUT4=1;
uart();
while(1);这里为什么要加个while啊,不加可以吗

}

void interruptet1() interrupt 3
{

while(1)
{

if(KEYIN1==0)

{
delay(2000);
if(KEYIN1==0)
{
SBUF=1;
}

}

while(TI==1);这里的while是什么意思
TI=0;

}
}

从整体上来说,这程序是错误的。

不应该开 T1 的中断。
不应该编写 T1 的中断程序。
不应该在 T1 的中断程序中,进行串口发送。

while(TI==1);这里的while是什么意思
--这一句,也是错误的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-29
你进的是定时器中断,是否要进串口中断?
如果你只要发送一个数据,开始的判断不要。
while(1)
{
if(KEYIN1==0)

{
delay(2000);
if(KEYIN1==0)
{
SBUF=1;
}

}

while (TI==1);
TI=0;

}追问

请问什么是定时器中断和串口中断,有什么区别吗?
还有,我又把整个程序都贴出来了,你看看

追答

1,你应该再补下单片机,单片机的中断分定时器中断,串口中断,外部中断。
2,interrupt 3就是进入串口中断时执行的程序,计算机发信息给单片机就会进入此中断,我看你的程序是不需要这个中断程序的。
3,你程序里的KEYIN1不知定义是什么?
4,while(1)是循环,防止程序不断复位。

第2个回答  2013-11-29
建议你先学习一下C语言基础。追问

请问我的程序哪里有错误

追答

ET1=1; 这个错了,不能为1

第3个回答  2013-11-29
是不是程序死了??最后的WHILE做什么用的,后面还有个TI=0????
相似回答