|
51 IO¿ÚÄ£Äâ´®¿ÚͨѶCÔ´³ÌÐò ££i nclude <reg51.h> sbit BT_SND =P1^0; sbit BT_REC =P1^1; /**********************************************
IO ¿ÚÄ£Äâ232ͨѶ³ÌÐò
ʹÓÃÁ½ÖÖ·½Ê½µÄC³ÌÐò Õ¼Óö¨Ê±Æ÷0
**********************************************/
#define MODE_QUICK
#define F_TM F0
#define TIMER0_ENABLE TL0=TH0; TR0=1; #define TIMER0_DISABLE TR0=0;
sbit ACC0= ACC^0; sbit ACC1= ACC^1; sbit ACC2= ACC^2; sbit ACC3= ACC^3; sbit ACC4= ACC^4; sbit ACC5= ACC^5; sbit ACC6= ACC^6; sbit ACC7= ACC^7;
void IntTimer0() interrupt 1 { F_TM=1; } //·¢ËÍÒ»¸ö×Ö·û void PSendChar(unsigned char inch) { #ifdef MODE_QUICK ACC=inch;
F_TM=0; BT_SND=0; //start bit TIMER0_ENABLE; //Æô¶¯ while(!F_TM);
BT_SND=ACC0; //ÏÈËͳöµÍλ F_TM=0; while(!F_TM);
BT_SND=ACC1; F_TM=0; while(!F_TM);
BT_SND=ACC2; F_TM=0; while(!F_TM);
BT_SND=ACC3; F_TM=0; while(!F_TM);
BT_SND=ACC4; F_TM=0; while(!F_TM);
BT_SND=ACC5; F_TM=0; while(!F_TM);
BT_SND=ACC6; F_TM=0; while(!F_TM);
BT_SND=ACC7; F_TM=0; while(!F_TM);
BT_SND=1; F_TM=0; while(!F_TM);
TIMER0_DISABLE; //Í£Ö¹timer #else unsigned char ii;
ii=0;
F_TM=0; BT_SND=0; //start bit TIMER0_ENABLE; //Æô¶¯ while(!F_TM);
while(ii<8) { if(inch&1) { BT_SND=1; } else { BT_SND=0; } F_TM=0; while(!F_TM); ii++; inch>>=1; } BT_SND=1; F_TM=0; while(!F_TM);
#endif TIMER0_DISABLE; //Í£Ö¹timer } //½ÓÊÕÒ»¸ö×Ö·û unsigned char PGetChar() { #ifdef MODE_QUICK
TIMER0_ENABLE; F_TM=0; while(!F_TM); //µÈ¹ýÆðʼλ ACC0=BT_REC;
TL0=TH0;
F_TM=0; while(!F_TM); ACC1=BT_REC;
F_TM=0; while(!F_TM); ACC2=BT_REC;
F_TM=0; while(!F_TM); ACC3=BT_REC;
F_TM=0; while(!F_TM); ACC4=BT_REC;
F_TM=0; while(!F_TM); ACC5=BT_REC;
F_TM=0; while(!F_TM); ACC6=BT_REC;
F_TM=0; while(!F_TM); ACC7=BT_REC;
F_TM=0;
while(!F_TM) { if(BT_REC) { break; } } TIMER0_DISABLE; //Í£Ö¹timer return ACC; #else unsigned char rch,ii; TIMER0_ENABLE; F_TM=0; ii=0; rch=0; while(!F_TM); //µÈ¹ýÆðʼλ
while(ii<8) { rch>>=1; if(BT_REC) { rch|=0x80; } ii++; F_TM=0; while(!F_TM);
} F_TM=0; while(!F_TM) { if(BT_REC) { break; }
} TIMER0_DISABLE; //Í£Ö¹timer return rch;
#endif
} //¼ì²éÊDz»ÊÇÓÐÆðʼλ bit StartBitOn() { return (BT_REC==0);
} void main() { unsigned char gch;
TMOD=0x22; /*¶¨Ê±Æ÷1Ϊ¹¤×÷ģʽ2(8λ×Ô¶¯ÖØ×°)£¬0Ϊģʽ2(8λ ×Ô¶¯ÖØ×°) */ PCON=00;
TR0=0; //ÔÚ·¢ËÍ»ò½ÓÊղſªÊ¼Ê¹Óà TF0=0; TH0=(256-96); //9600bps ¾ÍÊÇ 1000000/9600=104.167΢Ãë Ö´ÐÐµÄ timerÊÇ // 104.167*11.0592/12= 96 TL0=TH0; ET0=1; EA=1;
PSendChar(0x55); PSendChar(0xaa); PSendChar(0x00); PSendChar(0xff);
while(1) { if(StartBitOn()) { gch=PGetChar(); PSendChar(gch); } }
}
|