#include <reg51.h>
sbit c=P2^1;
#define AUTO_send 1 //自動發送
#define ONE_send 0 //發送1次
unsigned char send_state=0; //狀態標志,=1,自動發送。
void SendOneByte(unsigned char c)
{
SBUF =0x30+c;
while(!TI);
TI = 0;
}
void delay_ms(unsigned int n)
{ unsigned int i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
void main(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
while(1)
{
if(send_state==AUTO_send) //發送狀態=1,自動發送
{
SendOneByte((unsigned char)c); //自動發送
delay_ms(100); //延時
}
}
}
void UARTInterrupt(void) interrupt 4
{
if(RI)
{
RI = 0;
if(SBUF==ONE_send) //接收命令=0(發送一次)
{
SendOneByte((unsigned char)c); //發送一次
send_state=ONE_send; //當前狀態為單次發送
}
else if(SBUF==AUTO_send) //接收的命令=1(自動送)
{
send_state=AUTO_send; //當前狀態為自動發送。主程序自動發送
}
}
else if( TI)
{
TI = 0;
}
}
功能:
1、給單片機發送0,單片機發送一次
2、給單片機發送1,單片機自動發送,再次收到0后,變為手動發送并發送一次。
|