당근이 카페에 kim2376님이 소프트웨어 시리얼 소스를 공유해 주셔서 공유 합니다.
아래 코드를 프로젝트에 추가해서 사용하면 될것 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #define PORT_DDR DDRJ //PINJ #define PORT_IN PINJ //PINJ #define PORT_OUT PORTJ //PORTJ #define TX_PORT 0b00000010 //PORTJ (.1) #define RX_PORT 0b00000001 //PORTJ (.0) #define COMM_BAUD 52 // 1/9600=104 1/19200= 52 /*****************************************************************************/ /* Serial Port Code */ /*****************************************************************************/ //------------------------------------------////------------------------------------------// void SetTxd(char c) { // TxD의 비트를 세트 또는 리셋한다 if(c) {PORT_OUT |= TX_PORT; } else {PORT_OUT &= (~TX_PORT); } } //------------------------------------------// void putchar_soft(char c) { char i; SetTxd(0); // 스타트비트전송 delay_us(COMM_BAUD); // 1클럭분 웨이트 //데이터를 LSB에서 송신 for (i=0; i<8; i++) { SetTxd(c&0x01); // LSB를송신 delay_us(COMM_BAUD); // 1클럭분 웨이트 c >>= 1 ; } SetTxd(1); // 스톱비트전송 delay_us(COMM_BAUD); // 1클럭분 웨이트 } //------------------------------------------////------------------------------------------// char GetRxd(void) { //Rxd의 비트를 MSB에 세트 if(PORT_IN&RX_PORT) { return 0x80;} else return 0; } //------------------------------------------// unsigned char RxChar(void) { unsigned long TimeOut = 0; char i,dat=0; while(GetRxd()) { WDR(); TimeOut += 2; TimeOut -= 1; if (TimeOut > 100000) { //65530 //Error_cnt++; //if(Error_cnt > 8) { #asm("jmp 0x10000"); } //RESET return 0; } } delay_us(COMM_BAUD/2); // 1/2 클럭분 웨이트(비트의중심부) delay_us(COMM_BAUD); // 1클럭분 웨이트(스타트비트스킵) //데이터를 LSB에서 수신 for (i=0; i<8; i++) { dat >>= 1; // 데이터 MSB에 입력하기위해 1비트 시프트 dat |= GetRxd(); // 데이터를 MSB에 입력 delay_us(COMM_BAUD); // 1클럭분 웨이트 } //delay_us(COMM_BAUD); // 1클럭분 웨이트(스톱비트) return dat; } /*****************************************************************************/ /*****************************************************************************/ void main(void) { putchar_soft( RxChar() ); } /*****************************************************************************/ /*****************************************************************************/ | cs |
'IT / Development > Electronic & Circuits' 카테고리의 다른 글
전선 두께 규격 AWG(American Wire Gauge) (0) | 2019.04.01 |
---|---|
Differential Signal 란? (0) | 2019.03.22 |
저항에서의 주요 용어 의미 (0) | 2019.02.14 |
Current to Voltage Converter (0) | 2019.02.13 |
Op Amp Circuit Collection (0) | 2019.02.13 |