?? 16c554擴(kuò)展多串口.txt
字號(hào):
硬件:關(guān)于16c554的問(wèn)題?請(qǐng)問(wèn)... [explorer] [55次] 01-6-21 下午 02:10:23
各位:
我現(xiàn)在用16C554擴(kuò)展多串口,但是我不知道怎么啟動(dòng)發(fā)送,請(qǐng)指教!謝謝!
我分別給一個(gè)通道開(kāi)辟了兩個(gè)緩沖區(qū),一個(gè)用于接收一個(gè)用與發(fā)送,用中斷進(jìn)行
處理,就
像單片機(jī)自身的串口操作一樣,而當(dāng)單片機(jī)在發(fā)送空閑后需要恢復(fù)發(fā)送只需設(shè)TI=1就
行了,
但是用16C554應(yīng)該怎么啟動(dòng)發(fā)送呢?請(qǐng)指教!謝謝!
擴(kuò)展倆個(gè)串口的話(huà)用16c552就很好了 [c51guest] [13次] 01-6-21 下午 02:25:46
我有源程序,要否?如下: [小師⊕] [132次] 01-6-21 下午 03:57:15
#include <reg52.h>
#include <INTRINS.H>
#define BAUDBASE 0x30
/***4800bps->hex***/
sfr16 DPP = 0x82;
sbit ACC0=ACC^0;
sbit ACC1=ACC^1;
sbit ACC2=ACC^2;
sbit ACC3=ACC^3;
sbit ACC4=ACC^4;
sbit ACC5=ACC^5;
sbit ACC6=ACC^6;
sbit ACC7=ACC^7;
code unsigned char ST554_AddrHigh[4]={0x80,0x90,0xa0,0xb0};
bit fECG_Run=1;
bit fSPO2_Run=1;
/***********************************************************
初始化ST554
3.6864mhz
***********************************************************/
void Init_St554(unsigned char Location,unsigned char mBps,unsigned char mode)
{
DPH=ST554_AddrHigh[Location];
DPL=0x1;
/***IER***/
*(unsigned char xdata *)DPP=0x5; /***接收保持和中
斷允許.*/
DPL=0x2;
/***FIFO控制器***/
*(unsigned char xdata *)DPP=0xcf; /***set FCR.FIFO
允許,RXD復(fù)位,TXD復(fù)位,DMAmode=1,觸發(fā)為14***/
_nop_();
*(unsigned char xdata *)DPP=0xc9; /***set FCR.RXD
復(fù)位,TXD復(fù)位***/
DPL=0x4;
/***Modem狀態(tài)***/
*(unsigned char xdata *)DPP=0x8; /***set MCR.中斷
A-D開(kāi)***/
DPL=0x03;
*(unsigned char xdata *)DPP=0x83|mode; /***set LCR.8BIT,1STOP,ODDPARITY,選擇
特殊寄存器***/
/***特殊寄存器已打開(kāi),設(shè)置BPS***/
DPL=0;
*(unsigned char xdata *)DPP=BAUDBASE/mBps; /***時(shí)間常數(shù)***/
DPL=1;
*(unsigned char xdata *)DPP=0; /***高位***/
DPL=0x3;
*(unsigned char xdata *)DPP=0x03|mode; /***set LCR.8BIT,1STOP,ODDPARITY,關(guān)特
殊寄存器***/
DPL=0;
ACC=*(unsigned char xdata *)DPP; /***空讀一次***/
CY=1;
while(CY){
DPL=0x5; /*讀空*/
ACC=*(unsigned char xdata *)DPP; /***檢查接收狀態(tài)
***/
if(ACC0){
DPL=0x0;
ACC=*(unsigned char xdata *)DPP;
CY=1;
}
else CY=0;
}
}
/***********************************************************
檢查554的接收
出口:CY=1,成功 返回接收值
CY=0,失敗
***********************************************************/
unsigned char Check0_Rxd_ST554()
{
DPH=ST554_AddrHigh[0];
DPL=0x5;
ACC=*(unsigned char xdata *)DPP; /***檢查接收狀態(tài)
***/
if(ACC0){
DPL=0x0;
CY=1;
fECG_Run=1;
return(*(unsigned char xdata *)DPP);
}
else CY=0;
}
/***********************************************************
554的發(fā)送
出口:CY=1,成功
CY=0,失敗
***********************************************************/
void Check0_Txd_ST554(unsigned char mTxd)
{
DPH=ST554_AddrHigh[0];
DPL=0x5;
ACC=*(unsigned char xdata *)DPP; /***檢查接收狀態(tài)
***/
if(ACC5){
DPL=0;
*(unsigned char xdata *)DPP=mTxd;
CY=1;
}
else CY=0;
}
/***********************************************************
檢查554的接收
出口:CY=1,成功 返回接收值
CY=0,失敗
***********************************************************/
unsigned char Check1_Rxd_ST554()
{
DPH=ST554_AddrHigh[1];
DPL=0x5;
ACC=*(unsigned char xdata *)DPP; /***檢查接收狀態(tài)
***/
if(ACC0){
DPL=0x0;
CY=1;
return(*(unsigned char xdata *)DPP);
}
else CY=0;
}
/***********************************************************
554的發(fā)送
出口:CY=1,成功
CY=0,失敗
***********************************************************/
void Check1_Txd_ST554(unsigned char mTxd)
{
if(EX0){
DPH=ST554_AddrHigh[1];
DPL=0x5;
ACC=*(unsigned char xdata *)DPP; /***檢查接收狀態(tài)
***/
if(ACC5){
DPL=0;
*(unsigned char xdata *)DPP=mTxd;
CY=1;
}
else CY=0;
}
else CY=1;
}
/***********************************************************
檢查554的接收
出口:CY=1,成功 返回接收值
CY=0,失敗
***********************************************************/
unsigned char Check2_Rxd_ST554()
{
DPH=ST554_AddrHigh[2];
DPL=0x5;
ACC=*(unsigned char xdata *)DPP; /***檢查接收狀態(tài)
***/
if(ACC0){
DPL=0x0;
fSPO2_Run=1;
CY=1;
return(*(unsigned char xdata *)DPP);
}
else CY=0;
}
/***********************************************************
554的發(fā)送
出口:CY=1,成功
CY=0,失敗
***********************************************************/
void Check2_Txd_ST554(unsigned char mTxd)
{
DPH=ST554_AddrHigh[2];
DPL=0x5;
ACC=*(unsigned char xdata *)DPP; /***檢查接收狀態(tài)
***/
if(ACC5){
DPL=0;
*(unsigned char xdata *)DPP=mTxd;
CY=1;
}
else CY=0;
}
謝謝巨人小師,你能直接告訴我怎么啟動(dòng)嗎? [explorer] [8次] 01-6-21 下午 04:10:58
直接往里寫(xiě)。它有FIFO,自動(dòng)啟動(dòng)。還可使用TXDINT腳,再中斷中查詢(xún)。 [小師⊕] [9次] 01-6-21 下午 05:51:00
謝謝巨人小師!現(xiàn)在問(wèn)題已經(jīng)解決! [explorer] [4次] 01-6-22 上午 09:58:16
點(diǎn)擊這里回復(fù)這篇貼子>>
_____________________________________________________________________________
Copyright?,C51BBS論壇 2000-2001
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -