大家看看哪出错了,麻烦帮下忙,谢谢!!!
#include <reg52.h>
unsigned char a,b,c,d;
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}
void SendOneByte(unsigned char c)
{
SBUF = c;
while(!
ti);
TI = 0;
}
void delay10ms(void) //误差 -0.000000000002us
{
unsigned int a,b;
for(b=249;b>0;b--)
for(a=17;a>0;a--);
}
void main()
{
InitUART();
while(1)
{
if(a==1)
{
a=0;
for(b=0;b<200;b++)//b=0;等于其他数就死机,for循环没走完时有中断也死机
{
SBUF=c;
while(!TI);
TI=0;
delay10ms();
}
/*for(b=0;b<200;b++)//多加这个for循环就死机
{
SBUF=c;
while(!TI);
TI=0;
delay10ms();
}*/
}
}
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
c=SBUF;
a=1;
//add your code here!
}
else
TI = 0;
}
{
if(RI)
{
RI = 0;
c=SBUF;
a=1;
//add your code here!
}
else
TI = 0;
}
如果这个中断函数会执行的话,至少在//add your code here!这行后面加上:
TI=1;
这样才可以使while(!TI);这个循环跳出来。不然TI永远为0,就是死循环了。
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
c=SBUF;
a=1;
//add your code here!
TI = 1;
}
else
TI = 0;
}
一周热门 更多>