#include <reg51.h>
#include <intrins.h>
void SerialTest(void);
void SendOneByte(unsigned char c);
void delay(void) //1000ms延时 误差 -0.000000000285us
{
unsigned char a,b,c;
for(c=13;c>0;c--)
for(b=247;b>0;b--)
for(a=142;a>0;a--);
_nop_; //if Keil,require use intrins.h
}
void InitUART(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFA;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}
void main(void)
{
InitUART();
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
SerialTest();
SendOneByte(0xdf); //检测代码是否被执行
delay();
SendOneByte(LED);
}
else
TI = 0;
}
void SerialTest(void)
{
P0=SBUF;
SendOneByte(0x12); //检测代码是否被执行
}
void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}
P0口接发光二极管。在我发送00~08之间的数时,比如发01除了第一个灯都亮,并且在收到新数据前,P0口的状态能保持。
可是我发出大于08的16进制数时,二极管按照16进制闪一下就灭了,加了延迟后在延时期间是亮的,在接收到SendOneByte(LED);后,有自动的全灭。。。。想不明白这是为什么 |