?? duoubleserial
字號:
#include <reg52.h>
#include <string.h>
#define TIMEzq 28
unsigned char inbuf1[12];
unsigned char count1=0;
bit read_flag=0;
sfr WDT=0xA6;
sbit CMP_DATA=P1^7;
bdata char DATA;
sbit mb0=DATA^0;
sbit mb1=DATA^1;
sbit mb2=DATA^2;
sbit mb3=DATA^3;
sbit mb4=DATA^4;
sbit mb5=DATA^5;
sbit mb6=DATA^6;
sbit mb7=DATA^7;
void init_wdt(void)
{
WDT=0x1E;
WDT=0xE1;
}
void reset_wdt(void)
{
WDT=0x1E;
WDT=0xE1;
}
void init_serialcomm(void)
{
SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
PCON |= 0x80; //SMOD=1;
TH1 = 0xfa; //Baud:9600 fosc=11.0592MHz
IE |= 0x90; //Enable Serial Interrupt
TR1 = 1; // timer 1 run
// TI=1;
}
//向串口發送一個字符
void send_char_com(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
/*
//向串口發送一個字符串,strlen為該字符串
void send_string_com(unsigned char *str,unsigned char *nLen)
{
unsigned char k=0;
while(k < *nLen)
{
reset_wdt();//WDT
send_char_com(*(str+k));
k++;
}
}
*/
//串口接收中斷函數
void serial () interrupt 4 using 3
{
if(RI)
{
unsigned char ch;
RI = 0;
ch=SBUF;
inbuf1[count1]=ch;
count1++;
if((ch=='\n') || (count1 > 8))
{
read_flag=1; //if recieve data is CR, set the flag;
count1 = 0;
}
if(ch=='$')
{
count1 = 0;
}
}
}
void TIME(void)
{
unsigned char i;
for(i=0;i<TIMEzq;i++);
}
void TMElB()
{
unsigned char i;
for(i=0;i<(TIMEzq/2);i++);
}
unsigned char RByte(void)
{
while(1)
{
reset_wdt();//WDT
if(CMP_DATA==0) break;
}
TMElB();
TIME();
mb0=CMP_DATA;
TIME();
mb1=CMP_DATA;
TIME();
mb2=CMP_DATA;
TIME();
mb3=CMP_DATA;
TIME();
mb4=CMP_DATA;
TIME();
mb5=CMP_DATA;
TIME();
mb6=CMP_DATA;
TIME();
mb7=CMP_DATA;
TIME();
return DATA;
}
main()
{
//unsigned char gch0=15, gch1=15, gch2=15, gch3=15, gch4=15, gch5=15, gch6=15, gch7=15, gch8=15, gch9=15;
unsigned char count=0;
unsigned char nuLen=0;
unsigned char strTemp;
unsigned char inbuf[8];
unsigned char strInfo[80];
init_serialcomm();
CMP_DATA=1;
init_wdt();
while(1)
{
reset_wdt();//WDT
//strcpy(&strInfo[0], "$TNCA,1,8:0:0,0:0:0,0:0:0,1,0,");
strcpy(&strInfo[0], "$TTCA,1,212737,1,0,");
reset_wdt();//WDT
nuLen = strlen(strInfo) + 3;
count=0;
reset_wdt();//WDT
while(1)
{
reset_wdt();//WDT
if(RByte() == '$') break;
}
while(count < 40)
{
reset_wdt();//WDT
strInfo[nuLen+count]=RByte();
reset_wdt();
if(strInfo[nuLen+count] == 0X0D) break;
count++;
}
nuLen=nuLen-3;
if(count > 9)
{
reset_wdt();//WDT
strTemp = ((count/10) % 10) + 0X30;
strInfo[nuLen] = strTemp;
nuLen++;
}
reset_wdt();//WDT
strTemp = (count % 10) + 0X30;
strInfo[nuLen] = strTemp;
nuLen++;
reset_wdt();//WDT
strInfo[nuLen] = ',';
nuLen++;
reset_wdt();//WDT
if(count < 10)
{
reset_wdt();//WDT
memcpy(&strInfo[nuLen], &strInfo[nuLen+1], count * sizeof(unsigned char));
}
nuLen += count;
strInfo[nuLen] = ',';
nuLen++;
strTemp = 0;
reset_wdt();//WDT
for(count=0;count<nuLen;count++)
{
reset_wdt();//WDT
strTemp ^= strInfo[count];
}
reset_wdt();//WDT
strInfo[nuLen] = strTemp;
nuLen++;
strInfo[nuLen] = 0X0D;
nuLen++;
strInfo[nuLen] = 0X0A;
nuLen++;
count=0;
reset_wdt();//WDT
while(count<nuLen)
{
reset_wdt();//WDT
send_char_com(strInfo[count++]);
}
//send_string_com(strInfo, &nuLen);
count=0;
strTemp = 0;
reset_wdt();//WDT
while(1)
{
reset_wdt();//WDT
if(read_flag)
{
memcpy(inbuf, inbuf1, 6);
reset_wdt();//WDT
if(strcmp(inbuf, "CASS,1") == 0)
{
reset_wdt();//WDT
break;
}
else if(strcmp(inbuf, "CASS,0") == 0)
{
reset_wdt();//WDT
for(count=0;count<nuLen;count++)
{
reset_wdt();//WDT
send_char_com(strInfo[count]);
}
//send_string_com(strInfo, &nuLen);
break;
}
read_flag = 0;
reset_wdt();//WDT
}
strTemp++;
reset_wdt();//WDT
if(strTemp > 0xFA)
{
reset_wdt();//WDT
strTemp=0;
count++;
if(count > 0xFA)
{
reset_wdt();//WDT
for(count=0;count<nuLen;count++)
{
reset_wdt();//WDT
send_char_com(strInfo[count]);
}
break;
}
}
}
//Data_Process(outbuf0,inbuf0,nuLen);
//count0 = strlen(outbuf0);
//send_string_com(strInfo,nuLen);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -