//* RS-232C를 이용한 퍼스널 컴퓨터와 데이터 통신 */
#include <at89x51.h>
void delay(int del)
{
while(del--);
}
/* 한 문자 송신 */
void Txdata( char c )
{
while( !TI ); /*송신 플래그 체크 */
TI = 0; /* 송신 플래그 클리어 */
SBUF = c; /* 송신 */
}
void String_Tx(char *str)
{
while(*str)
{
Txdata(*str);
str++;
delay(10);
}
}
/* 한 문자 수신 */
char Rxdata( void )
{
while( !RI ); /* 수신 플래그 체크 */
RI = 0; /* 수신 플래그 클리어 */
return(SBUF); /* 수신 */
}
/* 시리얼 포트 초기화 */
void init_serial( void )
{
EA = 0; /* 인터럽트 Disable */
TMOD = 0x20; /* timer 1, mode 2, 내부클럭 */
PCON = 0; /* SMOD 0 */
TH1 = 0xFA; /* 9600bps 22.1184MHz시 */
TR1 = 1;
SCON = 0x52; /* 타이머 모드 1, 수신 Enable, TI=1 */
SBUF = 0; /* 버퍼 초기화 */
}
void LED_Shift(void)
{
unsigned char led=0xfe;
int i;
String_Tx("Now LED Shifting... Look at the LED!!");
Txdata( 0x0a ); Txdata( 0x0d );
for(i=0; i<8;i++)
{
P1=~led;
delay(10000);
led=led<<1|0x01;
}
}
void LED_On(void)
{
P1=0xff;
String_Tx("All LED On!!");
Txdata( 0x0a ); Txdata( 0x0d );
}
void LED_Off(void)
{
P1=0x00;
String_Tx("All LED Off!!");
Txdata( 0x0a ); Txdata( 0x0d );
}
void main( void )
{
char ch;
init_serial(); /* 시리얼 포트 초기화 */
Txdata( 0x0a ); /* 폴링 */
Txdata( 0x0d );
Txdata( 0 );
String_Tx("=============================");
Txdata( 0x0a ); Txdata( 0x0d );
String_Tx("a: LED shift, b: led on, c: led off");
Txdata( 0x0a ); Txdata( 0x0d );
String_Tx("=============================");
Txdata( 0x0a ); Txdata( 0x0d );
do {
ch = Rxdata(); /* 데이터를 읽어 변수에 저장하고 */
switch(ch)
{
case 'a':
case 'A': LED_Shift(); break;
case 'b':
case 'B': LED_On(); break;
case 'c':
case 'C': LED_Off(); break;
default:{
String_Tx("Please enter 'a' or 'b' or 'c' charater press!");
Txdata( 0x0a ); Txdata( 0x0d );
String_Tx("a: LED shift, b: led on, c: led off");
Txdata( 0x0a ); Txdata( 0x0d );
String_Tx("==============================================");
Txdata( 0x0a ); Txdata( 0x0d );
break; }
}// end switch
} while( 1 );
}