亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sc16c554.c

?? Philips SC16C554串口使用基本協議
?? C
字號:
/***********************************************************************************************
MCU780058與SC16C554的硬件接線:

         SC16c554                     MCU(NEC 780058Y)
Pin         RESET               <----------P126     
Pin         CSD~CSA         <----------P47~P44 (4 Pins)
Pin         ADDR2~ADDR0 <----------P43~P41 (3 Pins) 

Pin         DATA0~DATA7  <--------->P30~P37 (8 Pins)

Pin         IOR                   <----------P125
Pin         IOW                  <----------P124

Pin         RXRDY              ----------->P123
Pin         TXRDY              ----------->P122

Pin         INTA~INTD        ---------->P01~P04 (4 Pins: external interrupt)      


***********************************************************************************************/

#define __SC16C554__
#ifdef __SC16C554__
#pragma  SFR
#pragma  DI
#pragma  EI
#pragma  NOP



#include  <System\Stdtype.h>
#include  <System\Sub.h>


#if 0
#include <Lcd\DispSpec.h>
#include <Lcd\Lcddrv.h>
#include <Lcd\Display.h>
#endif

#include <Sc16c554.h>


/***********************************************************************************************

                                      靜態函數聲明

***********************************************************************************************/





  

/***********************************************************************************************

                                      變量定義

***********************************************************************************************/


/*C554的COM口地址數組*/
#define C554_COM_AMOUNT 4
const Byte acC554Com[C554_COM_AMOUNT] = 
{
  COM_A_ENABLE,
  COM_B_ENABLE,
  COM_C_ENABLE,
  COM_D_ENABLE
};

#if 0

#if(DEBUG !=DEBUG_CB900F)
/*C554的四個COM口的接收緩沖,利用FIFO模式對緩沖進行讀寫操作*/
#define C554_REC_BUFFER_SIZE 18
Byte acC554RecCnt[C554_COM_AMOUNT];  /*用于計算緩沖里未讀取的數據的總量*/
Byte acC554RecTop[C554_COM_AMOUNT];  /*當從緩沖取走一個數據時,Top往下移一位*/
Byte acC554RecBtm[C554_COM_AMOUNT];  /*當寫入一個數據到緩沖時,Btm往下移一位*/
Byte acC554RecBuf[C554_COM_AMOUNT][C554_REC_BUFFER_SIZE];  /*Buffer*/
#endif

/*C554的發送緩沖,當cAmount不為0時,表示Buffer中有數據需要發送,每發送一個字節,
  cTop會往下移一位。當往Buffer寫數據時,cBtm會往下移*/
#define C554_TRAN_FIFO_SIZE 16
#define C554_TBUF_SIZE  28
struct {    /*SC16c554 transmit FIFO buffer*/
  Byte acBuf[C554_TBUF_SIZE];
  Byte cTop;
  Byte cBtm;
  Byte cAmount;
}sC554TranPack;

#if (DEBUG == DEBUG_CB900F)
#define RESENT_PORT  PORT_C
Byte C554ResentBuf[20];
Byte  C554ResentCnt;
#endif

#endif

/***********************************************************************************************
函數:C554RegInit

作者:Qiang

時間:2005,5

描述:初始化SC16C554四個COM寄存器

使用:
***********************************************************************************************/
public void C554RegInit(void)
{

  Byte i;

  /*清除發送緩沖*/
//  C554TBufRst();
  P5.6 = 1;
  /*初始化寄存器,從COMA到COMD*/
  for(i=PORT_A;i<C554_COM_AMOUNT;i++)
  {
    
    /*寫LCR = 0xBF*/ 
    C554ByteWr(acC554Com[i], C554_LCR,C554_LCR_MD2_INIT);

    C554ByteWr(acC554Com[i], C554_EFR,C554_EFR_INIT);

    /*寫LCR[7] = 1*/ 
    C554ByteWr(acC554Com[i], C554_LCR,C554_LCR_MD1_INIT);

    C554ByteWr(acC554Com[i], C554_DLL, C554_DLL_INIT);

    C554ByteWr(acC554Com[i], C554_DLM, C554_DLM_INIT);

    /*寫LCR[7] = 0*/ 
    C554ByteWr(acC554Com[i], C554_LCR,C554_LCR_MD0_INIT);

    C554ByteWr(acC554Com[i], C554_IER,C554_IER_INIT);

    C554ByteWr(acC554Com[i], C554_FCR,C554_FCR_INIT);

    C554ByteWr(acC554Com[i], C554_MCR,C554_MCR_INIT);

    C554ByteWr(acC554Com[i], C554_SPR,C554_SPR_INIT);

  }
}


#if 0
/***********************************************************************************************
函數:ComDataSent

變量:無

返回:還待傳送的字節數量

作者:Qiang

時間:2005,5

描述:發送Buffer數據到CB900F

使用:必需先設定要發送的COM口(eCurrPortID)
***********************************************************************************************/
public Byte ComDataSent(Byte cPort)
{
  register Byte i;
  register Byte cTmp;

  /*當C554的Transmit FIFO為空時,寫數據到Transmit FIFO中,進而發送至CB900F中*/
  DI();
  cTmp = C554ByteRd(acC554Com[eCurrPortID],C554_LSR);
  EI();
  if((cTmp&LSR_TRANSMIT_EMPTY)==LSR_TRANSMIT_EMPTY)
  {
    if(sC554TranPack.cAmount>=C554_TRAN_FIFO_SIZE)
    {
      sC554TranPack.cAmount-=C554_TRAN_FIFO_SIZE;
      cTmp = C554_TRAN_FIFO_SIZE;
    }else
    {
      cTmp = sC554TranPack.cAmount;
      sC554TranPack.cAmount = 0;
    }
    DI();	
    for(i=0;i<cTmp;i++)
    {
      C554ByteWr(acC554Com[eCurrPortID],
                C554_THR,sC554TranPack.acBuf[sC554TranPack.cTop]);
#if(DEBUG ==  DEBUG_CB900F)
      C554ByteWr(acC554Com[PORT_C],
                C554_THR,sC554TranPack.acBuf[sC554TranPack.cTop]);
#endif
      if(++sC554TranPack.cTop>=C554_TBUF_SIZE)
      {
        sC554TranPack.cTop = 0;
      }
    }
	
    EI();	
  }
  return sC554TranPack.cAmount;
}


/***********************************************************************************************
函數:ComDataReceive

作者:Qiang

時間:2005,5

描述:SC16C554四個RS232數據接收程序。

使用:用于定時器中斷中,每2ms檢查SC16C554是否收到CB900F發送過來的數據
***********************************************************************************************/
void ComDataReceive(void)
{
#if 1
  register Byte cTmp;	

  /*讀取COM A*/
  while(C554_INTA)
  {
    cTmp = C554ByteRd(COM_A_ENABLE,C554_LSR);
    /*有錯誤,打上ERROR標志(cC554RecErr)*/
    if((cTmp&LSR_DATA_ERROR)==LSR_DATA_ERROR)
    {
        cC554RecErr |= ERR_PORT_A;
    }
    /*存放數據,更新數據計數器及BUFFER隊列指針*/ 
    acC554RecBuf[PORT_A][acC554RecBtm[PORT_A]] = C554ByteRd(COM_A_ENABLE,C554_RHR);

#if(DEBUG == DEBUG_CB900F)
   C554ResentBuf[C554ResentCnt++]= acC554RecBuf[PORT_A][acC554RecBtm[PORT_A]];
#endif

    acC554RecCnt[PORT_A]++;
    if(++acC554RecBtm[PORT_A]>=C554_REC_BUFFER_SIZE)
    {
      acC554RecBtm[PORT_A] = 0;
    }
  }
  /*讀取COM B*/
  while(C554_INTB)
  {
    cTmp = C554ByteRd(COM_B_ENABLE,C554_LSR);
    /*有錯誤,打上ERROR標志(cC554RecErr)*/
    if((cTmp&LSR_DATA_ERROR)==LSR_DATA_ERROR)
    {
        cC554RecErr |= ERR_PORT_B;
    }
    /*存放數據,更新數據計數器及BUFFER隊列指針*/ 
    acC554RecBuf[PORT_B][acC554RecBtm[PORT_B]] = C554ByteRd(COM_B_ENABLE,C554_RHR);
#if(DEBUG == DEBUG_CB900F)
   C554ResentBuf[C554ResentCnt++]= acC554RecBuf[PORT_B][acC554RecBtm[PORT_B]];
#endif                          
    acC554RecCnt[PORT_B]++;
    if(++acC554RecBtm[PORT_B]>=C554_REC_BUFFER_SIZE)
    {
      acC554RecBtm[PORT_B] = 0;
    }
  }
  /*讀取COM C*/
  while(C554_INTC)
  {
    cTmp = C554ByteRd(COM_C_ENABLE,C554_LSR);
    /*有錯誤,打上ERROR標志(cC554RecErr)*/
    if((cTmp&LSR_DATA_ERROR)==LSR_DATA_ERROR)
    {
        cC554RecErr |= ERR_PORT_C;
    }
    /*存放數據,更新數據計數器及BUFFER隊列指針*/ 
    acC554RecBuf[PORT_C][acC554RecBtm[PORT_C]] = C554ByteRd(COM_C_ENABLE,C554_RHR);

#if(DEBUG == DEBUG_CB900F)
   C554ResentBuf[C554ResentCnt++]= acC554RecBuf[PORT_C][acC554RecBtm[PORT_C]];
#endif                          

    acC554RecCnt[PORT_C]++;
    if(++acC554RecBtm[PORT_C]>=C554_REC_BUFFER_SIZE)
    {
      acC554RecBtm[PORT_C] = 0;
    }
  }
  /*讀取COM D*/
  while(C554_INTD)
  {
    cTmp = C554ByteRd(COM_D_ENABLE,C554_LSR);
    /*有錯誤,打上ERROR標志(cC554RecErr)*/
    if((cTmp&LSR_DATA_ERROR)==LSR_DATA_ERROR)
    {
        cC554RecErr |= ERR_PORT_D;
    }
    /*存放數據,更新數據計數器及BUFFER隊列指針*/ 
    acC554RecBuf[PORT_D][acC554RecBtm[PORT_D]] = C554ByteRd(COM_D_ENABLE,C554_RHR);

#if(DEBUG == DEBUG_CB900F)
   C554ResentBuf[C554ResentCnt++]= acC554RecBuf[PORT_D][acC554RecBtm[PORT_D]];
#endif                          

    acC554RecCnt[PORT_D]++;
    if(++acC554RecBtm[PORT_D]>=C554_REC_BUFFER_SIZE)
    {
      acC554RecBtm[PORT_D] = 0;
    }
  }

#if(DEBUG == DEBUG_CB900F)
   for(cTmp=0;cTmp<C554ResentCnt;cTmp++) 
   {
      C554ByteWr(acC554Com[RESENT_PORT],
                C554_THR,C554ResentBuf[cTmp]);   
   }
   C554ResentCnt = 0;
#endif
#endif
}

#endif

/***********************************************************************************************
函數:C554RstEna

作者:Qiang

時間:2005,5

描述:使能SC16C554的Reset信號腳?
使用:用于初初化SC16C554
***********************************************************************************************/
public void C554RstEna(void)
{
  C554_RESET_ENA(); 
}



/***********************************************************************************************
函數:C554RstDis

作者:Qiang

時間:2005,5

描述:停止SC16C554的Reset信號

使用:用于初初化SC16C554
***********************************************************************************************/
public void C554RstDis(void)
{
  C554_RESET_DIS(); 
}



/***********************************************************************************************
函數:C554ByteWr

變量:cCom -> COM口選擇;cRegister -> 寫入的寄存器;cData -> 寫入的數據

返回:無

作者:Qiang

時間:2005,5

描述:MCU向SC16C554發送一字節數據

使用:MCU與CB900F的硬件層通信程序
***********************************************************************************************/
public void C554ByteWr(Byte cCom, Byte cRegister,Byte cData)
{
  DI();
  C554_SELECT_PEND &= 0x01; 
  C554_SELECT_PEND =C554_SELECT_PEND|cCom|cRegister;
  C554_DATA_BUS = cData;
  C554_WRITE_VALID;
  NOP();
  C554_WRITE_INVALID;
  C554_SELECT_PEND &=0x01; 
  EI();
}


/***********************************************************************************************
函數:C554ByteRd

變量:cCom -> COM口選擇;cRegister -> 讀取的寄存器

返回:cVal -> 寄存器的值

作者:Qiang

時間:2005,5

描述:MCU接收SC16C554送回來的一字節數據

使用:MCU與CB900F的硬件層通信程序
***********************************************************************************************/
public Byte C554ByteRd(Byte cCom,Byte cRegister)
{
  Byte cVal;

  DI();
  C554_INPUT_MODE();
  C554_SELECT_PEND &= 0x01;
  C554_SELECT_PEND =C554_SELECT_PEND|cCom|cRegister;
  C554_READ_VALID;
  cVal = C554_DATA_BUS;
  C554_READ_INVALID;
  C554_SELECT_PEND &=0x01;  // reset
  C554_OUTPUT_MODE();
  EI();
  return cVal;
}


/***********************************************************************************************
函數:SentOneData

作者:Qiang

時間:2005,5

描述:檢查接收的數據是否有錯。 1: has errors 0: none errors

使用:
***********************************************************************************************/
public void SentOneData(Byte cPort, Byte cData)
{
  C554ByteWr(acC554Com[cPort],C554_THR,cData);
}





/***********************************************************************************************
函數:ReceiveDataErrorCheck

作者:Qiang

時間:2005,5

描述:檢查接收的數據是否有錯。 1: has errors 0: none errors

使用:
***********************************************************************************************/
public Byte ReceiveDataErrorCheck(Byte cPort)
{
  register Byte cTmp;
  cTmp = C554ByteRd(acC554Com[cPort],C554_LSR);
  /*有錯誤,打上ERROR標志(cC554RecErr)*/
  if((cTmp&LSR_DATA_ERROR)==LSR_DATA_ERROR)
  {
     return 1;
  }

  return 0;
}


/***********************************************************************************************
函數:TransmitBufferEmptyCheck

作者:Qiang

時間:2005,5

描述:檢查接收的數據是否有錯。 1: empty 0: no empty

使用:
***********************************************************************************************/
public Byte TransmitBufferEmptyCheck(Byte cPort)
{
  register Byte cTmp;
  
  cTmp = C554ByteRd(acC554Com[cPort],C554_LSR);
  if((cTmp&LSR_TRANSMIT_EMPTY)==LSR_TRANSMIT_EMPTY)
  {
    return 1;
  }

  return 0;
}


#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re这里只有精品视频首页| 亚洲欧洲成人av每日更新| 欧美极品xxx| 亚洲大尺度视频在线观看| 国产成人高清视频| 日韩一卡二卡三卡四卡| 亚洲天堂av一区| 国产传媒日韩欧美成人| 7777精品伊人久久久大香线蕉完整版| 国产喂奶挤奶一区二区三区| 日本人妖一区二区| 欧美日韩精品三区| 亚洲色图在线看| 福利一区福利二区| 日韩久久精品一区| 婷婷六月综合亚洲| 色哟哟日韩精品| 国产精品家庭影院| 成人影视亚洲图片在线| 久久久久久99精品| 精品亚洲国产成人av制服丝袜| 欧美日韩美女一区二区| 一区二区在线免费| 日本韩国精品在线| 亚洲女人的天堂| 99精品1区2区| 亚洲女人****多毛耸耸8| 99riav一区二区三区| 国产精品久久久一区麻豆最新章节| 国内精品伊人久久久久av影院| 国产麻豆精品视频| 精品一区二区国语对白| 欧美日韩中文字幕一区| 亚洲免费在线电影| 色综合中文字幕国产 | 91在线视频播放| 欧美激情一区二区在线| 成人免费看片app下载| 国产精品丝袜久久久久久app| 国产精品99久久久| 国产精品乱码一区二三区小蝌蚪| 成人夜色视频网站在线观看| 中文字幕在线不卡国产视频| 91在线播放网址| 亚洲人一二三区| 欧美色视频一区| 日本视频免费一区| 欧美tickle裸体挠脚心vk| 国产一区二区三区国产| 国产精品无遮挡| 91视频xxxx| 亚洲第一久久影院| 精品区一区二区| 成人自拍视频在线观看| 一区二区三区在线视频观看 | 丁香婷婷综合激情五月色| 国产精品久久久久久亚洲伦| 91久久久免费一区二区| 视频在线在亚洲| 久久精品男人天堂av| 色综合色狠狠综合色| 日韩激情一区二区| 亚洲国产成人在线| 欧美性大战久久| 国产一区二区调教| 亚洲精品自拍动漫在线| 日韩精品自拍偷拍| 一本色道亚洲精品aⅴ| 日本成人在线网站| 一区在线播放视频| 日韩欧美资源站| 99这里只有精品| 天堂在线亚洲视频| 中文字幕一区二区三区视频| 3atv在线一区二区三区| 粉嫩高潮美女一区二区三区| 亚洲成年人影院| 日本一区二区视频在线观看| 欧美日韩美少妇| 99精品一区二区| 韩国理伦片一区二区三区在线播放| 亚洲激情中文1区| 国产色91在线| 日韩免费观看2025年上映的电影| 成人av在线一区二区三区| 美国av一区二区| 亚洲v日本v欧美v久久精品| 中文字幕不卡的av| 精品粉嫩超白一线天av| 欧美日韩三级在线| 丁香六月综合激情| 麻豆精品国产传媒mv男同 | 色乱码一区二区三区88| 国模冰冰炮一区二区| 日韩中文字幕亚洲一区二区va在线| 国产精品成人午夜| 久久精品亚洲一区二区三区浴池 | 欧美在线色视频| 成人免费av资源| 国产精品资源网| 另类专区欧美蜜桃臀第一页| 性久久久久久久久久久久| 一区二区三区在线观看网站| 欧美极品xxx| 国产精品欧美一级免费| 久久久久久**毛片大全| 欧美精品一区二区三区四区| 日韩欧美国产一区二区在线播放| 精品视频999| 欧美日韩和欧美的一区二区| 欧美系列日韩一区| 在线观看91精品国产入口| 日本乱人伦aⅴ精品| 99久久精品国产麻豆演员表| 97se亚洲国产综合在线| 97精品国产97久久久久久久久久久久 | 国产乱国产乱300精品| 久久精品国产秦先生| 久久99精品久久只有精品| 捆绑紧缚一区二区三区视频| 美女视频黄免费的久久 | 色婷婷亚洲精品| 欧美在线观看一区| 欧美日韩免费在线视频| 欧美一区二区三区在| 欧美成人精品1314www| 久久午夜电影网| 国产精品国产三级国产aⅴ入口 | 日本一区二区三区国色天香| 中文av字幕一区| 亚洲人精品一区| 视频一区在线播放| 精品一区二区影视| 国产成人综合在线| 一本久久综合亚洲鲁鲁五月天 | 蜜臀av一区二区| 国产成人精品三级| 91丨九色丨国产丨porny| 欧美午夜精品电影| 日韩免费高清av| 中文字幕欧美区| 午夜电影一区二区| 国产成人精品综合在线观看| 懂色av中文字幕一区二区三区 | av在线免费不卡| 欧美影片第一页| wwww国产精品欧美| 成人免费一区二区三区视频| 亚洲综合自拍偷拍| 国模大尺度一区二区三区| 一本到不卡免费一区二区| 欧美精品vⅰdeose4hd| 国产亚洲综合性久久久影院| 一区二区三区**美女毛片| 蜜臀av性久久久久蜜臀aⅴ流畅| 成人性生交大片免费看中文| 欧美日韩视频在线一区二区| 国产欧美日韩综合| 日韩不卡在线观看日韩不卡视频| 成人看片黄a免费看在线| 欧美日韩高清一区二区三区| 国产欧美精品一区| 首页综合国产亚洲丝袜| 成人av小说网| 精品免费日韩av| 亚洲成人免费av| 色综合天天视频在线观看| 久久久影院官网| 日韩在线a电影| 91视频在线看| 国产亚洲1区2区3区| 日本不卡中文字幕| 色婷婷综合久久久中文一区二区| 久久免费的精品国产v∧| 日本最新不卡在线| 日本丶国产丶欧美色综合| 国产欧美精品在线观看| 激情图区综合网| 欧美探花视频资源| 亚洲日本免费电影| 国产成人在线视频网址| 日韩一卡二卡三卡| 午夜激情久久久| 欧美性受xxxx黑人xyx性爽| 成人免费在线观看入口| 成人综合婷婷国产精品久久| 久久久99久久| 国产麻豆精品theporn| 日韩三级高清在线| 日韩国产精品久久久| 欧美精品久久久久久久多人混战 | 欧美激情一区在线观看| 久久国产夜色精品鲁鲁99| 91精品欧美久久久久久动漫| 亚洲成人精品一区| 欧美图区在线视频| 午夜精品久久久久久| 欧美日韩一区不卡| 亚洲午夜久久久久久久久电影网 | 久久久亚洲精品一区二区三区|