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

📄 splc501driver_io.asm

📁 凌阳单片机控制ad9850来产生正弦波信号1KHz-10MHz的源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
//***************************************************************************//
//文件描述:SPLC501底层驱动程序,主要包括对液晶的IO口初始化、写指令、写数据、
//读数据,以及西文ASCII表数据
//声明:	小丑	20050518	Sunnorth	Mz Design
//
//
//***************************************************************************//
.include SPLC501Driver_IO.inc
.ram
.code
//***************************************************************************//
//程序:F_SPLC501_Initial_IO()
//描述:SPLC501接口的初始化程序  C语言调用,汇编语言调用  
//参数:无
//声明:小丑	20050518	sunnorth  Mz Design
//注意:破坏R1寄存器,保护R1
//***************************************************************************//
.public _F_SPLC501_Initial_IO
_F_SPLC501_Initial_IO:
F_SPLC501_Initial_IO:
		push	r1 to [sp]
		r1 = [P_IO_Data_Di]
		r1 |= M_IO_DATA_MASK
		[P_IO_Data_Di] = r1
		r1 = [P_IO_Data_A]
		r1 |= M_IO_DATA_MASK
		[P_IO_Data_A] = r1
		r1 = [P_IO_Data_B]
		r1 |= M_IO_DATA_MASK
		[P_IO_Data_D] = r1
		
		r1 = [P_IO_Ctrl_Di]
		r1 |= (M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
		[P_IO_Ctrl_Di] = r1
		r1 = [P_IO_Ctrl_A]
		r1 |= (M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
		[P_IO_Ctrl_A] = r1
		r1 = [P_IO_Ctrl_B]
		r1 |= ~(M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
		[P_IO_Ctrl_D] = r1
		pop		r1 from [sp]
		retf
//***************************************************************************//
//程序:F_SPLC501_Write_Com()
//描述:往SPLC501里写一个字节指令  C语言调用,汇编语言调用  
//参数:r1送入要传送的指令
//声明:小丑	20050518	sunnorth  Mz Design
//注意:破坏R1寄存器,保护R2、R5寄存器
//***************************************************************************//
.public	_F_SPLC501_Write_Com
_F_SPLC501_Write_Com:
F_SPLC501_Write_Com:
	push	r2,r3 to [sp]
	push	r5 to [sp]
	
	r2 = [P_IO_Ctrl_B]				//得到IOB口的状态
	r2 &= ~(M_IO_EP+M_IO_CS)		//EP CS to Low 20050613 Edit by xinqiang			
	[P_IO_Ctrl_B] = r2 				//EP Low
	r2 = [P_IO_Ctrl_B]
	r2 &= ~(M_IO_AO+M_IO_RW)	
	[P_IO_Ctrl_B] = r2				//AO RW Low
	
.ifdef DATA_PORT_HIGHT
	r1 = r1 lsl 4
	r1 = r1 lsl 4
.endif
	
	r3 = [P_IO_Data_B]
	r3 &= ~M_IO_DATA_MASK 
	r1 &= M_IO_DATA_MASK					//Get Low Data Command
	r1 = r1+r3
	[P_IO_Data]	= r1				//往数据口送数据
	nop
	
	r2 |= M_IO_EP					//EP to Hight
	[P_IO_Ctrl]	= r2
	nop
	r2 &= ~M_IO_EP					//EP to Low
	r2 |= M_IO_CS					//CS to hight		20050613 Edit by xinqiang
	[P_IO_Ctrl] = r2
	
	pop		r5 from [sp]
	pop		r2,r3 from [sp]
	retf
	
//***************************************************************************//
//程序:F_SPLC501_Write_Data()
//描述:往SPLC501里写一个字节数据  C语言调用,汇编语言调用  
//参数:r1送入要传送的数据
//声明:小丑	20050518	sunnorth  Mz Design
//注意:破坏R1寄存器,保护R2、R5寄存器
//***************************************************************************//
.public _F_SPLC501_Write_Data
_F_SPLC501_Write_Data:
F_SPLC501_Write_Data:
	push	r2 to [sp]
	
	r2 = [P_IO_Ctrl_B]				//得到IOB口的状态
	r2 &= ~(M_IO_EP+M_IO_CS)		//EP CS to Low	20050613 Editby xinqiang					
	[P_IO_Ctrl_B] = r2 				//EP Low
	r2 = [P_IO_Ctrl_B]
	r2 |= M_IO_AO
	r2 &= ~(M_IO_RW)	
	[P_IO_Ctrl_B] = r2				//AO Hight, RW Low
	
.ifdef DATA_PORT_HIGHT
	r1 = r1 lsl 4
	r1 = r1 lsl 4
.endif
	
	r3 = [P_IO_Data_B]
	r3 &= ~M_IO_DATA_MASK 
	r1 &= M_IO_DATA_MASK					//Get Low Data Command
	r1 = r1+r3
	[P_IO_Data]	= r1				//往数据口送数据
	nop
	
	r2 |= M_IO_EP					//EP to Hight
	[P_IO_Ctrl]	= r2
	nop
	r2 &= ~M_IO_EP					//EP to Low
	r2 |= M_IO_CS					//CS to Hight  20050613 Editby xinqiag
	[P_IO_Ctrl] = r2	
	
	pop		r2 from [sp]
	retf
	
//***************************************************************************//
//程序:F_SPLC501_Read_Data()
//描述:从SPLC501里读一个字节数据  C语言调用,汇编语言调用  
//参数:r1输出传送的数据
//声明:小丑	20050518	sunnorth  Mz Design
//注意:破坏R1寄存器,保护R2、R5寄存器
//***************************************************************************//
.public _F_SPLC501_Read_Data
.public F_SPLC501_Read_Data
_F_SPLC501_Read_Data:
F_SPLC501_Read_Data:
	call F_SPLC501_Read_Data1
	call F_SPLC501_Read_Data1
	retf
F_SPLC501_Read_Data1:
	push	r2 to [sp]
	r2 = [P_IO_Data_Di]				//设置数据口为输入
	r2 &= ~M_IO_DATA_MASK
	[P_IO_Data_Di] = r2
	
	r2 = [P_IO_Ctrl_B]				//得到IOB口的状态
	r2 &= ~(M_IO_EP+M_IO_CS)		//EP CS to Low 20050613  Editby xinqiang					
	[P_IO_Ctrl_B] = r2 				//EP Low
	r2 |= (M_IO_AO+M_IO_RW)
	[P_IO_Ctrl_B] = r2				//AO Hight, RW Hight
	nop
	r2 |= M_IO_EP
	[P_IO_Ctrl_B] = r2				//产生EP高电平,
	nop
	r2 &= ~M_IO_EP					//EP to Low
	[P_IO_Ctrl] = r2
	r1 = [P_IO_Data]
	r1 &= M_IO_DATA_MASK
	r2 |= M_IO_CS
	[P_IO_Ctrl] = r2
	r2 = [P_IO_Data_Di]				//恢复数据口为输出状态
	r2 |= M_IO_DATA_MASK
	[P_IO_Data_Di] = r2
.ifdef DATA_PORT_HIGHT
	r1 = r1 lsr 4
	r1 = r1 lsr 4
.endif
	pop		r2 from [sp]
	retf

//***************************************************************************//
//程序:F_SPLC501_Read_Status()
//描述:从SPLC501里读状态字数据  C语言调用,汇编语言调用  
//参数:r1输出传送的数据
//声明:小丑	20050518	sunnorth  Mz Design

⌨️ 快捷键说明

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