이방법은 UASRT 를 이용한 방법이 아닙니다. 순수 프로그램만을 이용해 데이터를 전송하고 받는 방법이며
통신은 단방향입니다.


송신부 소스


#define BITS 8


void sendData(unsigned char ucData){

unsigned char i;

PORTB &= 0xFE;

delay_us(100);

for(i=0; i<BITS; i++){

if((ucData >> i) & 0x01)

PORTB |= 0x01;

else

PORTB &= 0xFE;

delay_us(100);

}

PORTB &= 0xFE;

delay_us(100);

PORTB |= 0x01;

}



void main( void ){

unsigned char ucKey;

DDRA = 0xF0;

DDRB = 0x01;

PORTB |= 0x01;

while(1){

ucKey = 'a';

sendData(ucKey);

delay_ms(10);

};

}



수신부 소스

#define BITS 8


void main( void ){

unsigned char ucKey=0, i;

DDRA = 0xFE;

DDRB = 0xFF;

while(1){

delay_us(10);

if((PINA & 0x01) == 0){

delay_us(150);

ucKey=0;

for(i=0; i<BITS; i++){

ucKey |= (PINA&0x01) << i;

delay_us(100);

}

while((PINA & 0x01) == 0);

PORTB = ucKey; //Data receive to PORTB.

}

};

}


PINA.0 핀을 외부인터럽트 핀으로 옮기고 소스를 수정하면 인터럽트를 이용한 통신도 가능합니다.
통신 채널을 여러개로 늘리시려면 가급적 동기식 방식을 사용하는것이 옮습니다.

이는 부족한 AVR의 통신 포트를 해소하는 방법으로 사용 될 수도 있겠지요.

'Old category > 비밀의방' 카테고리의 다른 글

PS/2 키보드  (0) 2011.10.15
시리얼통신 (synchronous)  (0) 2011.10.15
USART (RS232)  (0) 2011.10.15
AVR 내부 EEPROM 사용 함수  (0) 2011.10.15
AVR을 이용한 PID 제어 소스  (0) 2011.10.15

+ Recent posts