📄 baseio.c
字号:
#include "global.h"
/*
********************************************************************************
* 函 数 名: WrScalarReg
* 功能描述: 向Scalar的指定寄存器写入一个值
* 输 入: Addr :寄存器地址
* val :写入到寄存器的值
* 返 回: 无
********************************************************************************
*/
void WrScalarReg(uint16 Addr, uint8 val)
{
uint8 xdata *Pbus;
XFR_PAGE = Addr >> 8;
Pbus = 0x8000 + (uint8)Addr;
*Pbus = val;
}
/*
********************************************************************************
* 函 数 名: WrScalarWord
* 功能描述: 向Scalar的指定寄存器写入一个双字节的值
* 输 入: Addr :寄存器地址
* val :写入到寄存器的值
* 返 回: 无
* 注 意: 低8位字节在前,高8位字节在后
********************************************************************************
*/
void WrScalarWord(uint16 Addr, uint16 Val)
{
uint8 xdata *Pbus;
XFR_PAGE = Addr >> 8;
Pbus = 0x8000 + (uint8)Addr;
*Pbus = Val;
Pbus++;
*Pbus = (uint8)(Val >> 8);
}
/*
********************************************************************************
* 函 数 名: WrScalarBytes
* 功能描述: 向Scalar的指定寄存器开始,写入多个字节,Scalar的寄存器地址
* 自动加一
* 输 入: Addr :寄存器的起始地址
* Num :写入的字节数
* buf :数据源地址
* 返 回: 无
********************************************************************************
*/
void WrScalarBytes(uint16 Addr, uint16 Num, uint8 *buf)
{
uint8 xdata *Pbus;
XFR_PAGE = Addr >> 8;
Pbus = 0x8000 + (uint8)Addr;
do {
*Pbus++ = *buf++;
}while(--Num);
}
/*
********************************************************************************
* 函 数 名: RdScalarReg
* 功能描述: 读指定寄存器的值
* 输 入: Addr :寄存器的地址
* 返 回: 指定寄存器的值
********************************************************************************
*/
uint8 RdScalarReg(uint16 Addr)
{
uint8 xdata *Pbus;
XFR_PAGE = Addr >> 8;
Pbus = 0x8000 + (uint8)Addr;
return *Pbus;
}
/*
********************************************************************************
* 函 数 名: RdScalarWord
* 功能描述: 读指定寄存器的值
* 输 入: Addr :寄存器的地址
* 返 回: 指定寄存器的值,返回的是双字节
********************************************************************************
*/
uint16 RdScalarWord(uint16 Addr)
{
uint8 xdata *Pbus;
uint16 Val;
XFR_PAGE = Addr >> 8;
Pbus = 0x8000 + (uint8)Addr;
Val = *(Pbus + 1);
Val <<= 8;
Val += (*Pbus);
return Val;
}
#if 0
/*
********************************************************************************
* 函 数 名: RdScalarBytes
* 功能描述: 向Scalar的指定寄存器开始,读多个字节,Scalar的寄存器地址
* 自动加一
* 输 入: Addr :寄存器的起始地址
* Num :读出的字节数
* buf :数据存放的缓冲区地址
* 返 回: 无
********************************************************************************
*/
void RdScalarBytes(uint16 Addr, uint8 Num, uint8 *buf)
{
uint8 xdata *Pbus;
INTCHAR Ad;
Ad.word = Addr;
Pbus = 0x80FF;
*Pbus = Ad.byte.hi & 0x03;
Pbus = 0x8000 + Ad.byte.lo;
do {
*buf++ = *Pbus++;
}while(--Num);
}
#endif
/*
********************************************************************************
* 函 数 名: WrScalarRegBit
* 功能描述: 直接改变Scalar的寄存器中的一位或几位
* 输 入: Addr :寄存器地址
* Val :输出到这些位的值
* Mask :屏蔽字节,决定哪些位受控制
* 返 回: 无
********************************************************************************
*/
void WrScalarRegBit(uint16 Addr, uint8 Val, uint8 Mask)
{
uint8 regval;
regval = RdScalarReg(Addr);
regval = (regval&~Mask)|Val;
WrScalarReg(Addr, regval);
}
/*
********************************************************************************
* 函 数 名: WrScalarPort
* 功能描述: 将数据输出到Scalar的端口中,
* 输 入: Addr :起始地址
* Port :指明端口类型
* buf :数据的存放地址指针
* Num :输出的数据个数
* 返 回: 无
********************************************************************************
*/
void WrScalarPort(uint8 Port, uint16 Addr, uint8 *buf, uint16 Num)
{
uint8 xdata *Pbus;
XFR_PAGE = 0x00;
Pbus = 0x80E0;
*Pbus++ = Port;
*Pbus++ = Addr;
*Pbus++ = Addr >> 8;
do {
*Pbus = *buf++;
}while(--Num);
}
/*
********************************************************************************
* 函 数 名: WrScalarPort_Extra
* 功能描述: 将数据输出到Scalar的端口中,
* 输 入: Addr :起始地址
* Port :指明端口类型
* buf :数据的存放地址指针
* Num :输出的数据个数
* 返 回: 无
********************************************************************************
*/
#if 0
void WrScalarPort_Extra(uint8 Port, uint16 Addr, uint8 *buf, uint16 Num)
{
uint8 xdata *Pbus;
XFR_PAGE = 0x00;
// Pbus = 0x80E0;
Pbus = 0x80E0;// + (7*8*54 + 4*54 + 1*8*54) * 3;
*Pbus++ = Port;
*Pbus++ = Addr;
*Pbus++ = Addr >> 8;
do {
*Pbus = *buf++;
}while(--Num);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -