51單片機(jī)普通I/O口,做串口用,可以和真的串口一樣,設(shè)置發(fā)送和接收的波特率,和發(fā)送接收的模式-51
-
- /****************************************************************************************
- *文件:UART2.C
- *功能:利用LPC900普通I/O口實(shí)現(xiàn)模擬串口,占用定時(shí)器1
- *日期:05/07/18
- *****************************************************************************************/
- #include "Reg935.h"
- #include "uart2.h"
- #define uchar unsigned char
- #define BRH 0xfd //0xfe 0x95//波特率為9600,使用內(nèi)部RC振蕩
- #define BRL 0x15 //0xfd 0x15 //波特率為4800,使用內(nèi)部RC振蕩
- //////////////////////////////////////////////////////////////////////////////////////////
- uchar num;
- uchar uart2s; //ie. SBUF2
- unsigned char uart2f=0; //0:disable 1:read 2:send 3: read completed 4:send completed
- //****************************************************************************************
- void timer1_isr(void) interrupt 3
- {
- TH1=BRH;
- TL1=BRL;
- if(uart2f==2) //每個(gè)IF大概運(yùn)行32周期,從而可以計(jì)算出BRH和BRL
- {
- if(num>1)
- {
- if(uart2s&(0x01<<(9-num)))
- {uart2txd=1;}
- else
- {uart2txd=0;}
- num--;
- }
- else if(num==1)
- {
- uart2txd=1;
- //uart2f=4;
- num--;
- // num=9;
- }
- else {TR1=0;uart2f=4;}
- }
- if(uart2f==1)
- {
- if(num>1)
- {
- if(uart2rxd)
- {uart2s=uart2s|(0x01<<(9-num));}
- else
- {uart2s=uart2s&~(0x01<<(9-num));}
- num--;
- }
- // else if(num==1){if(uart2rxd)num--;
- // }
- else
- {
- uart2f=3;
- TR1=0;
- }
- }
- }
- //---------------------------------------------------------------------------------------
- //uart2send: 向模擬串口發(fā)送一個(gè)字符
- //入口參數(shù): s 被發(fā)送字符
- //出口參數(shù): 無(wú)
- //---------------------------------------------------------------------------------------
- void uart2send(uchar s)
- {
- TH1=BRH;
- TL1=BRL;
- num=9;
- uart2s=s;
- uart2f=2;
- uart2txd=0;
- TR1=1;
- while(uart2f!=4);
- }
- //---------------------------------------------------------------------------------------
- //uart2read: 向模擬串口接收一個(gè)字符
- //入口參數(shù) 無(wú)
- //出口參數(shù) s 被發(fā)送字符
- //---------------------------------------------------------------------------------------
- unsigned char uart2read(void)
- {
- while(uart2rxd);
- num=9;
- uart2f=1;
- TH1=BRH-1;
- TL1=BRL;//-0x15;
- TR1=1;
- while(uart2f!=3);
- while(!uart2rxd);
- return(uart2s);
- }
- //---------------------------------------------------------------------------------------
復(fù)制代碼