#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后,变为手动发送并发送一次。
|