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

📄 baseio.c

📁 NT68617源程序代码集合
💻 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 + -