LED只在发送的时候亮,假设你的波特率是9600,那么你发送一次才7、8个毫秒,人眼看起来当然是闪一下啊。
上电时,引脚状态是不确定的,此时,如果引脚上有波动,单片机也会把波动作为正常的数据接收进来
另外,在发送6个字节的时候,while(!TI)后面没有分号
而且,在while(flag==1)之外应当再包一层while(1),否则程序最多只能执行一次(基本上等不到)
你的flag变量没有初始化,系统默认是0,第一次的while不执行,直接发送数据,串行中断,而后程序执行完毕
那个LED1是在P1.1输出什么电平亮呢?是输出0亮,还是输出1亮?
你想要什么时候亮呢?
其实,不管是LED什么时候亮,就程序本身是有错误的,主程序是不能用while(flag==1)的,你确定能发送数据吗?
你这个程序编译也不能通过吧,中断子程序中有个全角的分号:
led1=0;//为什么程序刚烧进单片机灯就亮了
这个:是全角的,编译是不会通过的。
主程序应该这么写
void main()
{
init();
while(1) //必须这么写
{
if(flag==1) //要用if来判断
{
led1=1;
ES=0;
for(i=0;i<6;i++)
{
SBUF=table[i];
while(!TI); //少了;号
TI=0;
}
SBUF=a;
while(!TI);
TI=0;
flag=0;
ES=1;
}
}
}
for(i=0;i<6;i++)
{
SBUF=table[i];
while(!TI) //这地方少了’;‘
TI=0;
}