⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 16c554扩展多串口.c

📁 16C554扩展多串口
💻 C
字号:
硬件:关于16c554的问题?请问... [explorer] [55次] 01-6-21 下午 02:10:23
 各位:
    我现在用16C554扩展多串口,但是我不知道怎么启动发送,请指教!谢谢!
    我分别给一个通道开辟了两个缓冲区,一个用于接收一个用与发送,用中断进行
处理,就
像单片机自身的串口操作一样,而当单片机在发送空闲后需要恢复发送只需设TI=1就
行了,
但是用16C554应该怎么启动发送呢?请指教!谢谢! 

扩展俩个串口的话用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复位,TXD复位,DMAmode=1,触发为14***/
  _nop_();
  *(unsigned char xdata *)DPP=0xc9;            /***set FCR.RXD
复位,TXD复位***/

  DPL=0x4;                            
        /***Modem状态***/
  *(unsigned char xdata *)DPP=0x8;            /***set MCR.中断
A-D开***/

  DPL=0x03;
  *(unsigned char xdata *)DPP=0x83|mode;    /***set LCR.8BIT,1STOP,ODDPARITY,选择
特殊寄存器***/

  /***特殊寄存器已打开,设置BPS***/
  DPL=0;
  *(unsigned char xdata *)DPP=BAUDBASE/mBps;    /***时间常数***/
  DPL=1;
  *(unsigned char xdata *)DPP=0;            /***高位***/

  DPL=0x3;
  *(unsigned char xdata *)DPP=0x03|mode;    /***set LCR.8BIT,1STOP,ODDPARITY,关特
殊寄存器***/

  DPL=0;
  ACC=*(unsigned char xdata *)DPP;            /***空读一次***/

  CY=1;
  while(CY){
    DPL=0x5;                                              /*读空*/
    ACC=*(unsigned char xdata *)DPP;            /***检查接收状态
***/
    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;            /***检查接收状态
***/
  if(ACC0){
    DPL=0x0;
    CY=1;
    fECG_Run=1;
    return(*(unsigned char xdata *)DPP);
  }
  else CY=0;
}

/***********************************************************
554的发送
出口:CY=1,成功
     CY=0,失败
***********************************************************/
void Check0_Txd_ST554(unsigned char mTxd)
{
    DPH=ST554_AddrHigh[0];
    DPL=0x5;
    ACC=*(unsigned char xdata *)DPP;            /***检查接收状态
***/
    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;            /***检查接收状态
***/
  if(ACC0){
    DPL=0x0;
    CY=1;
    return(*(unsigned char xdata *)DPP);
  }
  else CY=0;
}

/***********************************************************
554的发送
出口:CY=1,成功
     CY=0,失败
***********************************************************/
void Check1_Txd_ST554(unsigned char mTxd)
{
  if(EX0){
    DPH=ST554_AddrHigh[1];
    DPL=0x5;
    ACC=*(unsigned char xdata *)DPP;            /***检查接收状态
***/
    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;            /***检查接收状态
***/
  if(ACC0){
    DPL=0x0;
    fSPO2_Run=1;
    CY=1;
    return(*(unsigned char xdata *)DPP);
  }
  else CY=0;
}

/***********************************************************
554的发送
出口:CY=1,成功
     CY=0,失败
***********************************************************/
void Check2_Txd_ST554(unsigned char mTxd)
{
  DPH=ST554_AddrHigh[2];
  DPL=0x5;
  ACC=*(unsigned char xdata *)DPP;            /***检查接收状态
***/
  if(ACC5){
    DPL=0;
    *(unsigned char xdata *)DPP=mTxd;
    CY=1;
  }
  else CY=0;
}



谢谢巨人小师,你能直接告诉我怎么启动吗? [explorer] [8次] 01-6-21 下午 04:10:58 

直接往里写。它有FIFO,自动启动。还可使用TXDINT脚,再中断中查询。 [小师⊕] [9次] 01-6-21 下午 05:51:00 

谢谢巨人小师!现在问题已经解决! [explorer] [4次] 01-6-22 上午 09:58:16 

 
点击这里回复这篇贴子>>
_____________________________________________________________________________
Copyright?,C51BBS论坛 2000-2001 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -