什么生产者,消费者,环形送缓存区都冒出来了。
void SendDataViaSerialPort(char* buffer, char length) { char i; for (i=0; i<length; i++) { SBUF = *buffer++; while (! TI); TI=0; } }
使用: SendDataViaSerialPort(a, sizeof(a)); SendDataViaSerialPort(b, sizeof(b));
也可以像 16楼handrap 那样使用中断: typedef struct SSerialTransfer { char* buffer; char length;
} SerialTransfer;
void SendDataViaSerialPort(char* buffer, char length) { tx.buffer = buffer + 1; tx.lenght = length; SBUF = *buffer; }
void serial_int(void) interrupt 4 using 2 { if (RI) { } if (TI) { TI = 0; tx.length--; if (tx.length != 0) { SBUF = *tx.buffer++; } } }
使用: SerialTransfer tx;
SendDataViaSerialPort(a, sizeof(a)); while (tx.length != 0); //waiting for complete |