本帖最后由 王培旭 于 2019-8-25 21:35 编辑
支持hc08无线免冷启动烧写
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sfr AUXR = 0x8e; //Auxiliary register
sfr P3M1 = 0xB1; //P3M1.N,P3M0.N =00--->Standard, 01--->push-pull
sfr P3M0 = 0xB2; // =10--->pure input, 11--->open drain
sbit RXB=P3^0;
sbit Power=P3^4;//??????????S8550?b????
sbit PowerG=P3^3;//??????????S8550?b????
#define BAUD 0xfa00 //2400bps/11.0592 MHz
uchar RBIT,RBUF,RCNT,RDAT;
uchar cont;
uchar buf[16];
bit RING;
bit REND;
/**********100Ms??**********************/
void delay_100ms(uint n)//100ms??
{
uchar a,b,c,d;
for(d=0;d<n;d++)
{
for(c=83;c>0;c--)
for(b=124;b>0;b--)
for(a=52;a>0;a--);
}
}
/*******?????????????********/
void UART_INIT()
{
RING=0;
REND=0;
RCNT=0;
}
/**********???T0????***************/
void T0_set(void)
{
TMOD=0x00;
AUXR=0x80;
TL0=BAUD;
TH0= BAUD>>8;
TR0=1;
ET0=1;
PT0=1;
EA=1;
}
/*******???T0????**************/
void T0_t() interrupt 1 using 1
{
if(RING)
{
if(--RCNT==0)
{
RCNT=3;
if(--RBIT==0)
{
RBUF=RDAT;
RING=0;
REND=1;
}
else
{
RDAT>>=1;
if(RXB) RDAT|=0x80;
}
}
}
else if(!RXB)
{
RING=1;
RCNT=4;
RBIT=9;
}
}
/////********???*****************/////
void main(void) //???
{
P3M1=0x00;
P3M0=0x10;//p3.4????,??????
Power=0;
PowerG=1;
UART_INIT();
T0_set();
Power=1;
while(1)
{
if(REND)
{
REND=0;
if(RBUF==0x7f)
{
if(++cont>40)
{
cont=0;
ET0=0;
Power=1;
PowerG=0;
delay_100ms(10);
Power=0;
PowerG=1;
delay_100ms(10);
ET0=1;
}
}
else cont=0;
}
}
}
程序亲测可用
|