在下面的程序中,我设置的发送数据时也采用中断为什么不可以呢?而如果在红色的部分加以改动那运行就正常了,(即把注释了的TI=0变成不注释的,把中断程序中的红色部分删去),请问大神这是为什么呢
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code zifu[]={'l','i','y','a','o','h','u','a','\0'};
sbit p14=P1^4; //p14对应的是一个按键
delay1ms(uint i) //延迟1ms函数
{
uchar j;
while(i--)
{
for(j=0;j<115;j++)
{}
}
}
void csh() //串行口初始化
{
TMOD=0X20; //定时器1工作方式2
TH1=TL1=0XFD; //产生9600的波特率
SCON=0X50; //串行口工作在方式1,并且可以接受数据
PCON=0X00; //smod=0,即不加倍
EA=1; //开总中断
ES=1; //开串行口中断
ET1=0; //定时器1关中断
TR1=1; //运行定时器1
}
void send_zfc() //发送一个字符串
{
uchar j;
for(j=0;zifu[j]!='\0';j++)
{
SBUF=zifu[j];
while(!TI);
//TI=0;
}
}
void send_char(uchar i) //发送1个字节
{
SBUF=i;
while(!TI);
//TI=0;
}
void main()
{
csh(); //串行口初始化
while(1)
{
if(p14==0) //当按下按键时(p14=0),发送字符串的内容
{delay1ms(20);
if(p14==0)
{send_zfc();
delay1ms(1000);
}}
}
}
void cxk(void) interrupt 4 //中断函数
{
uchar i;
if(TI==1) //发送中断,使TI清0
{
TI=0;
}
if(RI==1) //接受中断,使接收到的数据再发送出去
{
RI=0;
i=SBUF;
send_char(i);
}
} |