#ifndef _UART1_H_ #define _UART1_H_ void uart1_bauding(unsigned long baudrate); void uart1_init(); #define UART1_TX_BUFFER_SIZE 128 #define UART1_RX_BUFFER_SIZE 64 #include "c8051f580.h" #include "fifo.h" FIFO_SIZE_T uart1_write(char *buf, FIFO_SIZE_T size); FIFO_SIZE_T uart1_read(char *buf, FIFO_SIZE_T size); FIFO_SIZE_T uart1_tx_size(); FIFO_SIZE_T uart1_rx_size(); #ifdef MAIN_C extern __xdata fifo_char_t fifo_tx1; extern __xdata fifo_char_t fifo_rx1; /* Interrupt(TI1 / RI1) */ void interrupt_uart1 () __interrupt(INTERRUPT_UART1) { unsigned char c; if(SCON1 & 0x01){ // RI1 SCON1 &= ~0x01; /* リングバッファに1バイト書き出し */ c = SBUF1; if(fifo_char_put2(&fifo_rx1, c)){ //P4 &= ~0x02; }else{/*P4 ^= 0x02;*/} } if(SCON1 & 0x02){ // TI1 SCON1 &= ~0x02; /* 書き込むデータがあるか確認 */ if(fifo_char_size(&fifo_tx1) > 0){ c = fifo_char_get2(&fifo_tx1); SCON1 |= 0x08; // TBX1は書込み中フラグとして使う、1(書込み中)に SBUF1 = c; }else{ SCON1 &= ~0x08; // TBX1は書込み中フラグとして使う、0(書込みしていない)に } } } #endif #endif