|
51單片機(jī)串口通信程序- /******串口中斷接口說(shuō)明*************
- 功能:發(fā)送1幀數(shù)據(jù)/接收1字節(jié)數(shù)據(jù)
- void fillTCOMData (unsigned char buffer[5]);//buffer[5]需要串口發(fā)送的數(shù)組
- unsigned char cRCOMData; //暫存從串口接收的數(shù)據(jù)
- *****************************/
- #include <REG52.h> // SFR declarations
- //,,,,,,接口變量,,,,,,,,,,,,,,,,,,,,
- unsigned char cRCOMData; //暫存從串口接收的數(shù)據(jù)
- //,,,,,,模塊內(nèi)變量,,,,,,,,,,,,,,,,,,,,
- unsigned char cTCOMData[7]; //暫存向串口發(fā)送的數(shù)據(jù)(一組數(shù)據(jù)發(fā)送完成以后才接受下一組)
- unsigned char cTCOMDataN; //向串口發(fā)送數(shù)據(jù)的剩余個(gè)數(shù)
- void fillTCOMData (unsigned char buffer[7]) {
- //此處只負(fù)責(zé)填充數(shù)據(jù), 主程序負(fù)責(zé)發(fā)送串口
- 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; //賦值--允許串口發(fā)送數(shù)據(jù)
- TI=1; //啟動(dòng)串口中斷
- }
- }
- void UART_ISR() interrupt 4 {
- if (TI) { //發(fā)送中斷。發(fā)送完成(TI0位被置1)時(shí)將產(chǎn)生一個(gè)中斷。
- TI = 0; //中斷服務(wù)硬件不清除UART0中斷標(biāo)志,必須用軟件清除。
- if (cTCOMDataN) { //將ADC0轉(zhuǎn)換結(jié)果傳出(5個(gè)字節(jié)).
- SBUF = cTCOMData[7 - cTCOMDataN];
- cTCOMDataN--;
- }
- }
- else //RI0=1
- {
- RI = 0;
- //add your code here!
- cRCOMData=SBUF;
- //SBUF0 = cSCOMData;
- }
- }
- void UART_Init() {
- TMOD = 0x20|TMOD; //定時(shí)器1作為波特率發(fā)生器
- 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; //無(wú)->9600 0x01->19200
- TH1 = 0xfd; //0x96->9600 0x61->19200
- //TI0 = 1;
-
- //19200BPS
- //CKCON = 0x08;
- //TH1 = 0xB1;
- }
復(fù)制代碼
|
|