3.2 其它說明
母串口和所有子串口內(nèi)部均具有獨立的數(shù)據(jù)發(fā)送緩沖存儲器(FIFO Buffer)和接收緩沖存儲器(FIFO Buffer),所有的RS232串行口都支持全雙工異步傳輸模式,即所有串行口都可以同時獨立接收和發(fā)送數(shù)據(jù),且不會丟失任何數(shù)據(jù)。
母串口波特率由K1=2880 fosc-in計算,其單位為MHz,且fosc—in小于20.0Hz。在SP2538輸入時鐘fosc—in為20.0MHz時,母串口可自動適應(yīng)上位機的56000bps和57600bps兩種標準波特率輸入,即fosc—in為20.0MHz時,上位機的RS232波特率可以設(shè)置成56000bps或57600bps。子串口波特率為:K2=480 fosc—in 。
母串口和所有子串口都是TTL電平接口,可直接與單片機或TTL數(shù)字電路接口,若需連接PC機,則必須增加電平轉(zhuǎn)換芯片,如MAX202,ICL232等。
SP2538具有內(nèi)置的上電復(fù)位電路和可關(guān)閉的看門狗監(jiān)控電路,用于監(jiān)控上位機程序是否正常運行,同時也可以簡化上位機復(fù)位電路的設(shè)計。上位機寫命令字“0x10”可實現(xiàn)喂狗,而寫命令字“0x15”則可關(guān)閉看門狗(初次上電后,看門狗處于激活狀態(tài)),寫命令字“0x20”可激活看門狗監(jiān)控功能。
上位機可通過芯片復(fù)位指令(命令字為“0x35”)在任何時候?qū)π酒M行指令復(fù)位(復(fù)位時間Treset小于50μs)。
圖2和圖3
上位機可通過芯片睡眠指令(命令字為“0x55”)使芯片在任何時候進入微功耗睡眠模式,以降低系統(tǒng)功耗。初次上電后,芯片不會自行進入睡眠模式。應(yīng)當注意的是,只能由上位機發(fā)送任意一個字節(jié)數(shù)據(jù)將其喚醒,而其它所有子串口均不能將其喚醒。
未使用的輸入端口(如:RX0、RX1、RX2…等)必須連接到VCC,未使用的輸出端口(如:TX0、TX1、TX2…、ADRO0、ADRO1…等)必須懸空。
4 應(yīng)用實例
SP2538的應(yīng)用領(lǐng)域包括數(shù)據(jù)采集、工業(yè)控制、儀器儀表、智能家電、醫(yī)療設(shè)備、稅控加油機、商業(yè)POS機、家庭安防控制、車輛監(jiān)控和調(diào)度、GPS衛(wèi)星定位與導(dǎo)航、有線及無線數(shù)據(jù)傳輸、基于PC機的多串口卡、水、電、氣表抄表系統(tǒng)、室外多媒體電子廣告以及其它對通信穩(wěn)定性、成本和開發(fā)周期要求比較嚴格的各種應(yīng)用和工業(yè)MODEM陣列等方面。
4.1 應(yīng)用電路
利用SP2538可將僅有一個UART串口的單片機擴展為具有5個UART串口的單片機。圖4以常用的AT89C52單片機為例給出了相應(yīng)的串口擴展電路。圖中,AT89C52的全雙工串口與SP2538的母串口5相連。該串口5同時也作為命令/數(shù)據(jù)口。SP2538的ADRI0、ADRI1、ADRI2分別與AT89C52的P2.3、P2.4、P2.5口相連,可用于選擇發(fā)送數(shù)據(jù)時的相應(yīng)串口0~4,ADRO0、ADRO1、ADRO2與AT89C52的P2.0、P2.1、P2.2口線相連,可用于判別接收的數(shù)據(jù)來自串口0~4的哪一個。SP2538的時鐘頻率可選為20MHz,此時母串口5的波特率為57600bps,串口0~4的波特率為9600bps。
4.2 應(yīng)用程序
下面是與上述硬件電路相關(guān)的接口程序,該程序用C51語言編制,程序分為上位機發(fā)送、接收中斷服務(wù)程序和主程序兩部分。
uchar idata uart0_t_but[8];
uchar idata send_buf[8];
uchar idata uart0_r_but
uchar idata uart0_send_num
uchar idata uart_port_num,send_byte_num,uart_point-er
bit bdata write success,uart_busy;
bit bdata uart0_receive
sbit ADRI_0=P2^0;
sbit ADRI_1=P2^1;
sbit ADRI_2=P2^2;
sbit ADRO_0=P2^3;
sbit ADRO_1=P2^4;
sbit ADRO_2=P2^5;
serial()interrupt4 using3{ //上位機RS232接收、發(fā)送中斷入口
if(RI){
RI=0;
Switch(P2&0x07){
case
uart0_r_buf=SBUF
uart0_receive=1
break;
}
else {
TI=0;
switch(uart_pointer){
case
uart_pointer++;
if(uart0_send_num){
ADRO_0=0;
ADRO_1=0;
ADRO_2=0;
Uart0_send_num--;
SBUF=uart0_t_buf[uart0_send_num]
uart_busy=1
break;
}
elseif(uart1_send_num|uart2_send_num|uart3_send_num|uart4_send_num)
{
ADRO_0=0
ADRO_1=0
ADRO_2=0
SBUF=0x00
uart_busy=1
break;
}
else {uart_busy=0;break;}
}
注: case1:…
case2:…
case3:…
case4:…
除地址不同外其余同case0。
Void uart_send(unchar uart_port_num,uchar send_byte num){
uchar i
switch(uart_port_num)“
case
for(i=0;i<send_byte_num;i++){
uart0_t_buff[i]=send_buf[i];
}
uart0_send_num=send_byte_num;
write_success=1;
if(uart_busy==0){
T1=1;
uart_pointer=0;
break;
}
else{break;}
}
注: case1:…
case2:…
case3:…
case4:…
除地址不同外其余同case0。
main(){
TMOD=0x20;
THI=0xff;
TCON=0x40;
SCON=0x50;
PCON=0x80; //波特率加倍
IE=0x90;
PI=0;
while(1)“
send_buf[0]=0x31;
write_success=0;
if(!uart0_send_num){
uart_send(0,4)
}
}
}
5 結(jié)束語
近年來,以單片機為核心構(gòu)成的具有UART接口的智能儀器儀表及智能模塊不斷涌現(xiàn),此類產(chǎn)品可方便地與單片機構(gòu)成分布式系統(tǒng)。另一方面,系統(tǒng)中的單片機也要與上位計算機之間進行通信,從而構(gòu)成二級分布式系統(tǒng)。SP2538的出現(xiàn)為此類多串口應(yīng)用領(lǐng)域提供了一個良好的解決方案。





