|
#include<reg51.h> //包含單片機寄存器的頭文件
unsigned char code Tab[ ]={"net ok"};
unsigned char add1;
unsigned char add2;
unsigned char add3;
unsigned char add4;
unsigned char add5;
unsigned char add6;
unsigned char id;
unsigned char addsum;
sbit key=P2^5;
/*****************************************************
函數(shù)功能:接收一個字節(jié)數(shù)據(jù)
***************************************************/
unsigned char Receive(void)
{
unsigned char dat;
while(RI==0) //只要接收中斷標(biāo)志位RI沒有被置“1”
; //等待,直至接收完畢(RI=1)
RI=0; //為了接收下一幀數(shù)據(jù),需將RI清0
dat=SBUF; //將接收緩沖器中的數(shù)據(jù)存于dat
return dat;
}
/*****************************************************
函數(shù)功能:向PC發(fā)送一個字節(jié)數(shù)據(jù)
***************************************************/
void Send(unsigned char dat)
{
SBUF=dat;
while(TI==0)
;
TI=0;
}
/**************************************************************
函數(shù)功能:延時約150ms
**************************************************************/
void delay(void)
{
unsigned char m,n;
for(m=0;m<200;m++)
for(n=0;n<250;n++)
;
}
/*****************************************************
函數(shù)功能:延時1ms
(3j+2)i=(3×33+2) ×10=1010(微秒),可以認(rèn)為是1毫秒
***************************************************/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
/*****************************************************
函數(shù)功能:延時若干毫秒
***************************************************/
void delaynms(unsigned char x)
{
unsigned char i;
for(i=0;i<x;i++)
delay1ms();
}
/*****************************************************
函數(shù)功能:主函數(shù)
***************************************************/
void main(void)
{
unsigned char i;
TMOD=0x20; //定時器T1工作于方式2
SCON=0x50; //SCON=0101 0000B,串口工作方式1,允許接收(REN=1)
PCON=0x00; //PCON=0000 0000B,波特率9600
TH1=0xfb;//0xfd; //根據(jù)規(guī)定給定時器T1賦初值
TL1=0xfb; //根據(jù)規(guī)定給定時器T1賦初值
EA=1;
ES=1;
TR1=1; //啟動定時器T1
REN=1; //允許接收
id=0;
P1=0XFF;
P2=0XFF;
while(1)
{
add1=Receive();
if(add1==0xa5)
{
add2=Receive();
add3=Receive();
add4=Receive();
add5=Receive();
add6=Receive();
addsum=(add3+add4)%256;
if(add5==addsum)
{
key=~key;
for(i=0;i<8;i++)
{
Send(Tab[i]);
delay();
}
}
TR1=0;
PCON=0X01;
}
delaynms(100);
add1=0;
add2=0;
add3=0;
add4=0;
add5=0;
}
}
void int4() interrupt 4 //外串口中斷換醒
{
TR1=1;
PCON=0X00;
}
|
|