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

📄 ms_rwreg.c

📁 LCD OSD 程序用於8051 開發lcd
💻 C
字号:
#include <intrins.h>
#include "types.h"
#include "board.h"
#include "ms_reg.h"
#include "misc.h"
#include "debug.h"

extern void Delay4us(void);

#define Delay1us()	_nop_()//;_nop_()

#if DirectBus
#define MS_REG(addr)		(((unsigned char xdata*)0)[addr])
/////////////////////////////////////////////////////////////////////////
BYTE mStar_ReadByte(BYTE addr)
{ return MS_REG(addr);
}
WORD mStar_ReadWord(BYTE addr)
{ WORD value;

  value=mStar_ReadByte(addr);
  value=(value<<8)|mStar_ReadByte(addr-1);

  return value;
}
void mStar_WriteByte(BYTE addr, BYTE value)
{ MS_REG(addr)=value;
}
void mStar_WriteWord(BYTE addr, WORD value)
{ mStar_WriteByte(addr-1, value&0xFF);
  mStar_WriteByte(addr, value>>8);
}

void mStar_WriteTBL(BYTE addr, BYTE *tbl, BYTE count, BYTE inc)
{ while (count--)
    { mStar_WriteByte(addr, *(tbl++));
    }
  inc=0;
}
#elif DDRBus

void mStar_Start(BYTE addr)
{
#define ddrPort addr
  SetDDRPort;
  Delay1us();
  Set_ms_ALE();

  ddrPort>>=4;
  SetDDRPort;
  Delay1us();
  Clr_ms_ALE();
#undef ddrPort
}

void mStar_SendByte(BYTE value)
{
#define ddrPort value
  SetDDRPort;
  Delay1us();
  Clr_ms_WRZ();

  ddrPort>>=4;
  SetDDRPort;
  Delay1us();
  Set_ms_WRZ();
#undef ddrPort
}

BYTE mStar_ReceiveByte(void)
{ BYTE value;
  BYTE ddrPort=0xF;

  Clr_ms_RDZ();
  SetDDRPort;
  value=(hwMS_DDRPort>>hwMS_DDRShiftBits)&0xF;
  Set_ms_RDZ();

  Delay1us();
  Clr_ms_RDZ();
  SetDDRPort;
  value=value|(((hwMS_DDRPort>>hwMS_DDRShiftBits)&0xF)<<4);
  Set_ms_RDZ();

  return value;
}

BYTE mStar_ReadByte(BYTE addr)
{ mStar_Start(addr);
  return mStar_ReceiveByte();
}
void mStar_WriteByte(BYTE addr, BYTE value)
{ mStar_Start(addr);
  mStar_SendByte(value);
}
WORD mStar_ReadWord(BYTE addr)
{ WORD value;

  value=mStar_ReadByte(addr);
//  mStar_WriteByte(addr, value);
//  mStar_Start(addr);
  value=(value<<8)|mStar_ReadByte(addr-1);

  return value;
}
void mStar_WriteWord(BYTE addr, WORD value)
{ mStar_WriteByte(addr-1, value&0xFF);
  mStar_WriteByte(addr, value>>8);
}

void mStar_WriteTBL(BYTE addr, BYTE *tbl, BYTE count, BYTE inc)
{ inc=inc;
  while (count--)
    mStar_WriteByte(addr, *(tbl++));
}

#else
void mStar_Start(msBus_Direction direct)
{ Set_ms_CSZ(); // CS=1
  Clr_ms_SCL(); // SCL=0
  if (direct) // Read
    Set_ms_SDA(); //SDA=1
  else
    Clr_ms_SDA(); //SDA=0
  Set_ms_SCL();   //SCL=1
  Clr_ms_SCL();   //SCL=0
}

void mStar_SendByte(BYTE value, Bool lastOne)
{ BYTE i;

  for (i=0; i<7; i++)
    { (value&BIT7)?(Set_ms_SDA()):(Clr_ms_SDA());
      value<<=1;
      Set_ms_SCL();
      Delay4us();
      Clr_ms_SCL();
    }
  if (lastOne)
    Clr_ms_CSZ();

  (value&BIT7)?(Set_ms_SDA()):(Clr_ms_SDA());
  Delay4us();
  Set_ms_SCL();
  Delay4us();
  Clr_ms_SCL();

  if (lastOne)
    { Set_ms_SDA();
      Set_ms_SCL();
    }
}
BYTE mStar_ReceiveByte(Bool lastOne)
{ BYTE i;
  BYTE value;

  for (i=0; i<7; i++)
    { value<<=1;
      Set_ms_SCL();
      Delay4us();
      if (ms_SDAHi())
        value|=BIT0;
      Clr_ms_SCL();
    }
  if (lastOne)
    Clr_ms_CSZ();

  { value<<=1;
    Set_ms_SCL();
    Delay4us();
    if (ms_SDAHi())
      value|=BIT0;
    Clr_ms_SCL();
  }

  if (lastOne)
    { Set_ms_SDA();
      Set_ms_SCL();
    }
  return value;
}


/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
BYTE mStar_ReadByte(BYTE addr)
{ mStar_Start(MS_READ);
  mStar_SendByte(addr, 0);
  Set_ms_SDA();

  return mStar_ReceiveByte(1);
}
WORD mStar_ReadWord(BYTE addr)
{ WORD value;

  value=mStar_ReadByte(addr);
  value=(value<<8)|mStar_ReadByte(addr-1);

  return value;
}
void mStar_WriteByte(BYTE addr, BYTE value)
{ mStar_Start(MS_WRITE);
  mStar_SendByte(addr, 0);
  mStar_SendByte(value, 1);
}
void mStar_WriteWord(BYTE addr, WORD value)
{ mStar_WriteByte(addr-1, value&0xFF);
  mStar_WriteByte(addr, value>>8);
}

//=======================================================================
// Only for chip after D-version
#if ChipID>=ChipAD
void mStar_SendDDRByte(BYTE value, Bool lastOne)
{ BYTE i;

  for (i=0; i<7; i++)
    { hwMS_SDA_Pin=(value&BIT7);
      value<<=1;
      hwMS_SCL_Pin=!hwMS_SCL_Pin;
    }
  if (lastOne)
    Clr_ms_CSZ();

  (value&BIT7)?(Set_ms_SDA()):(Clr_ms_SDA());
  hwMS_SCL_Pin=!hwMS_SCL_Pin;

  if (lastOne)
    { Set_ms_SDA();
      Set_ms_SCL();
    }
}
void mStar_WriteDDRByte(BYTE addr, BYTE value)
{ Clr_ms_SCL();
  Set_ms_CSZ(); // CS=1
  Clr_ms_SDA(); //SDA=0
  Set_ms_SCL();
  mStar_SendDDRByte(addr, 0);
  mStar_SendDDRByte(value, 1);
}
#endif
//=======================================================================

void mStar_WriteTBL(BYTE addr, BYTE *tbl, BYTE count, BYTE inc)
{ if (inc)
    mStar_WriteByte(REGBK, mStar_ReadByte(REGBK)&~AINC);
  else
    mStar_WriteByte(REGBK, mStar_ReadByte(REGBK)|AINC);

  mStar_Start(MS_WRITE);
  mStar_SendByte(addr, 0);
  while (count--)
    mStar_SendByte(*(tbl++), 0);
  mStar_SendByte(*tbl, 1);
}

#endif

⌨️ 快捷键说明

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