//=====================================================
// 파일명 A.C

// 코드비젼 컴파일러
//=====================================================
// 코드 최적화 금지
#pragma opt-
//=====================================================
#include <mega128.h>
#include <delay.h>
//=====================================================
#define U_C     unsigned char
#define F_C     flash char
//=====================================================
F_C msg1[] = \"기말텀프로젝트\\r\\n\";
F_C msg2[] = \"시리얼리모콘\\r\\n\";
F_C msg3[] = \"하드웨어\\r\\n\";
F_C msg4[] = \"소프트웨어\\r\\n\";
//=====================================================
// 시리얼1 수신 인터럽트
void TX1_CHAR(U_C Sdata){ while (!(UCSR1A&0x20)); UDR1=Sdata; } // 송신함수
//
interrupt [USART1_RXC] void usart1_rx_isr(void){                // 수신 인터럽트
  U_C Rdata, i;
  Rdata=UDR1;
  if     (Rdata==\'1\'){ i=0; while(msg1[i]){ TX1_CHAR(msg1[i++]); } }
  else if(Rdata==\'2\'){ i=0; while(msg2[i]){ TX1_CHAR(msg2[i++]); } }
  else if(Rdata==\'3\'){ i=0; while(msg3[i]){ TX1_CHAR(msg3[i++]); } }
  else if(Rdata==\'4\'){ i=0; while(msg4[i]){ TX1_CHAR(msg4[i++]); } }
}
//=====================================================
// 메인함수
void main(void){
// 시리얼1
    DDRD=8; // TXD1 PORTD.3
    UCSR1A=0; UCSR1B=0x98; UCSR1C=6; UBRR1H=416/256; UBRR1L=416&0xFF;  //2400
//CTC Mode
    DDRB=0xFF;  // PORTB.5=A
    OCR1A=210;  // 16000000/(1+210)=75800Hz
    TCCR1A=0x40; TCCR1B=9; TCCR1C=0x80; //WGM11=0, WGM10=0, WGM13=0, WGM12=1
//
    #asm(\"sei\")
//
    while(1){}
}


 

 

//=====================================================
// 파일명 B.C
// 코드비젼 컴파일러
//=====================================================
// 코드 최적화 금지
#pragma opt-
//=====================================================
#include <mega128.h>
#include <delay.h>
//=====================================================
#define U_C     unsigned char
//=====================================================
#define SW1     PINA.0
#define SW2     PINA.1
#define SW3     PINA.2
#define SW4     PINA.3
//=====================================================
U_C Rx1Cnt=0, Rx1Buf[100];
//=====================================================
// 시리얼0 수신 인터럽트
void TX0_CHAR(U_C Sdata){ while ((UCSR0A&0x20)==0); UDR0=Sdata; } // 송신함수
//
// 시리얼1 수신 인터럽트
void TX1_CHAR(U_C Sdata){ while ((UCSR1A&0x20)==0); UDR1=Sdata; } // 송신함수
//
interrupt [USART1_RXC] void usart1_rx_isr(void){                  // 수신 인터럽트
  U_C R1data, i;
  R1data=UDR1;
  if(R1data==0x0A){
        Rx1Buf[Rx1Cnt++]=R1data;
        Rx1Buf[Rx1Cnt++]=0;
        i=0; while(Rx1Buf[i]){ TX0_CHAR(Rx1Buf[i++]); }
        Rx1Cnt=0;
  }
  else{ if(Rx1Cnt<90)Rx1Buf[Rx1Cnt++]=R1data; }
}
//=====================================================
// 메인함수
void main(void){
    PORTA=0xFF; // 내부풀업저항 사용
// 시리얼0 (128은 ISP와 공용으로 사용되므로 주의)
    DDRE=2; // TXD0 PORTE.1
    UCSR0A=0; UCSR0B=0x18; UCSR0C=6; UBRR0H=416/256; UBRR0L=416&0xFF;  //2400
// 시리얼1
    DDRD=8; // TXD1 PORTD.3
    UCSR1A=0; UCSR1B=0x98; UCSR1C=6; UBRR1H=416/256; UBRR1L=416&0xFF;  //2400
//CTC Mode
    DDRB=0xFF;  // PORTB.5=A
    OCR1A=210;  // 16000000/(1+210)=75800Hz
    TCCR1A=0x40; TCCR1B=9; TCCR1C=0x80; //WGM11=0, WGM10=0, WGM13=0, WGM12=1
//
    #asm(\"sei\")
//
    while(1){
        if(!SW1){ TX1_CHAR(\'1\'); while(!SW1); delay_ms(100); }
        if(!SW2){ TX1_CHAR(\'2\'); while(!SW2); delay_ms(100); }
        if(!SW3){ TX1_CHAR(\'3\'); while(!SW3); delay_ms(100); }
        if(!SW4){ TX1_CHAR(\'4\'); while(!SW4); delay_ms(100); }
    }
}

제가 당신보다 뛰어나진않지만 적어도 저한테 욕짓거리할정도로 쩌는분인지 궁금합니다
여태까지 발광수광센서로 두모듈을통해 시리얼통신하는것을 짜온 소스입니다
완벽한 소스는아니지만 쩌는님을위해 몇개의 주석을달았고
이걸이해하고 설명해주신다면 제가 욕을 달게먹겠으나,
설명도못하고 대체 뭔소린가 고민하신다면 제가 욕을하겠습니다