51單片機串口通信程序- /******串口中斷接口說明*************
- 功能:發送1幀數據/接收1字節數據
- void fillTCOMData (unsigned char buffer[5]);//buffer[5]需要串口發送的數組
- unsigned char cRCOMData; //暫存從串口接收的數據
- *****************************/
- #include <REG52.h> // SFR declarations
- //,,,,,,接口變量,,,,,,,,,,,,,,,,,,,,
- unsigned char cRCOMData; //暫存從串口接收的數據
- //,,,,,,模塊內變量,,,,,,,,,,,,,,,,,,,,
- unsigned char cTCOMData[7]; //暫存向串口發送的數據(一組數據發送完成以后才接受下一組)
- unsigned char cTCOMDataN; //向串口發送數據的剩余個數
- void fillTCOMData (unsigned char buffer[7]) {
- //此處只負責填充數據, 主程序負責發送串口
- if (cTCOMDataN == 0)
- {
- cTCOMData[0] = buffer[0];
- cTCOMData[1] = buffer[1]; //ADC0H
- cTCOMData[2] = buffer[2]; //ADC0M
- cTCOMData[3] = buffer[3]; //ADC0L
- cTCOMData[4] = buffer[4];
- cTCOMData[5] = buffer[5];
- cTCOMData[6] = buffer[6];
-
-
- cTCOMDataN = 7; //賦值--允許串口發送數據
- TI=1; //啟動串口中斷
- }
- }
- void UART_ISR() interrupt 4 {
- if (TI) { //發送中斷。發送完成(TI0位被置1)時將產生一個中斷。
- TI = 0; //中斷服務硬件不清除UART0中斷標志,必須用軟件清除。
- if (cTCOMDataN) { //將ADC0轉換結果傳出(5個字節).
- SBUF = cTCOMData[7 - cTCOMDataN];
- cTCOMDataN--;
- }
- }
- else //RI0=1
- {
- RI = 0;
- //add your code here!
- cRCOMData=SBUF;
- //SBUF0 = cSCOMData;
- }
- }
- void UART_Init() {
- TMOD = 0x20|TMOD; //定時器1作為波特率發生器
- IE = 0x10 | IE; //串口中斷允許。位7-0:EA,ESPI0,ET2,ES0,ET1,EX1,ET0,EX0
- SCON = 0x50; //SCON0: 8-bit variable bit rate 接收允許
- TCON = 0x40;
- //CKCON = 0x01; //無->9600 0x01->19200
- TH1 = 0xfd; //0x96->9600 0x61->19200
- //TI0 = 1;
-
- //19200BPS
- //CKCON = 0x08;
- //TH1 = 0xB1;
- }
復制代碼
|