PTR2000無線收發(fā)C語言程序
//單片機端發(fā)送數(shù)據(jù)函數(shù)
voidSend(void)
{
ucharxdataj =0;
ucharxdatalen =0;
ucharxdataCheckSum=0;
t_buf[0]=0x24;//起始位
t_buf[1]=0x07;//7個數(shù)據(jù)字節(jié)
len=t_buf[1];
CheckSum=CheckSum+len;
for (j=0;j++;j
t_buf[j+2]=Data[j];
CheckSum=CheckSum+t_buf[j+2];
}
t_buf[9]=CheckSum;//校驗和字節(jié)
t_buf[10]=0x2A;//停止位
for (j=0;j++;j<11)
{
TI=0;
SBUF=t_buf[j];
while(TI==0);
TI=0;
}
}
//通知PC機端發(fā)送結(jié)束函數(shù)
voidSendOver(void)
{
TI=0;
SBUF=0x24;
while(TI==0);
TI=0;
SBUF=0x01;
while(TI==0);
TI=0;
SBUF=SEND_OVER;//通知PC機端“發(fā)送結(jié)束”
while(TI==0);
TI=0;
SBUF=0x99;//校驗字節(jié)
while(TI==0);
TI=0;
SBUF=0x2A;
while(TI==0);
TI=0;
}
voidmain(void)
{
ClearT_buf();
ClearR_buf();
TXEN=0;//初始為接收狀態(tài)
PWR=1;//正常工作模式
CS=0;//選擇通道0
EA=0;
//11.0592MHz,9600波特率,工作方式1,8數(shù)據(jù)位,1停止位,無奇偶校驗
TMOD=0x21;
SCON=0x50;//串行口工作方式1,REN=1
PCON=0x00;//SMOD=0
TL1=0xfd;
TH1=0xfd;
TR1=1;//定時器1開始計時
PT0=1;//定時器0高優(yōu)先級
TH0=-5000/256;//5ms
TL0=-5000%6;
IE=0x90;//EA=1,ES=1
while(1)
{
if (Flag_RSend)//“請求發(fā)送”指令
{
TXEN=1;//改變?yōu)榘l(fā)射狀態(tài)
Delay();//延時5ms
GetData();//采集數(shù)據(jù)
Send();//發(fā)送
Flag_RSend=0;
SendOver();//通知PC機發(fā)送結(jié)束
TXEN=0;//重設為接收狀態(tài)
}
elseif (Flag_ReSend)// “請求重發(fā)”指令
{
TXEN=1;//改變?yōu)榘l(fā)射狀態(tài)
Delay();//延時5ms
Send();//重發(fā)
Flag_ReSend=0;
SendOver();//通知PC機發(fā)送結(jié)束
TXEN=0;// 設為接收狀態(tài)
}
}
}本文引用地址:http://butianyuan.cn/article/201611/322549.htm
下面是原理圖:
評論