이방법은 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 |