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

📄 splc501driver_io.lst

📁 光电池LED自动照明控制系统的设计与实现
💻 LST
📖 第 1 页 / 共 3 页
字号:
Sunplus u'nSP Assembler - Ver. 1.14.3.1
              Listing File Has Been Relocated
                            	//***************************************************************************//
                            	//文件描述:SPLC501底层驱动程序,主要包括对液晶的IO口初始化、写指令、写数据、
                            	//读数据,以及西文ASCII表数据
                            	//声明:	小丑	20050518	Sunnorth	Mz Design
                            	//
                            	//
                            	//***************************************************************************//
                            	.include SPLC501Driver_IO.inc
                     <      	.DEFINE	P_IOA_Data   		0x7000         // Write Data into data register and read from IOA pad
                     <      	.DEFINE P_IOA_Buffer        0x7001         // Write Data into buffer register and read from buffer register
                     <      	.DEFINE P_IOA_Dir           0x7002         // Direction vector for IOA
                     <      	.DEFINE P_IOA_Attrib        0x7003         // Attribute vector for IOA
                     <      	.DEFINE P_IOA_Latch         0x7004         // Latch PortA data for key change wake-up
                     <      	
                     <      	.DEFINE P_IOB_Data         	0x7005         // Write Data into the data register and read from IOB pad
                     <      	.DEFINE P_IOB_Buffer        0x7006         // Write Data into buffer register and read from buffer register
                     <      	.DEFINE P_IOB_Dir           0x7007         // Direction vector for IOB
                     <      	.DEFINE P_IOB_Attrib        0x7008         // Attribute vector for IOB
                     <      	//端口需要改动时需要修改以下定义
                     <      	
                     <      	.define	DATA_PORT_HIGHT	0x00		//数据口输出高八位定义,若数据接口为IO端口的高八位,则不屏蔽
                     <      	.define	M_IO_DATA_MASK	0xff00			//若数据口为高八位,则定义值为0xff00
                     <      	
                     <      	//.define M_IO_EP			0x0020			//EP与SPCE061A的接口定义
                     <      	//.define	M_IO_RW			0x0010			//RW与SPCE061A的接口定义
                     <      	//.define	M_IO_AO			0x0008			//AO与SPCE061A的接口定义
                     <      	//.define	M_IO_CS			0x0004			//CS与SPCE061A的接口定义
                     <      	 .define    M_IO_EP			0x0040			//EP与SPCE061A的接口定义
                     <      	 .define	M_IO_RW			0x0020			//RW与SPCE061A的接口定义
                     <      	 .define	M_IO_AO			0x0010			//AO与SPCE061A的接口定义
                     <      	 .define	M_IO_CS			0x0200			//CS与SPCE061A的接口定义B9
                     <      	//数据端口定义
                     <      	.define	P_IO_Data_D		P_IOA_Data
                     <      	.define	P_IO_Data_A		P_IOA_Attrib
                     <      	.define	P_IO_Data_Di	P_IOA_Dir
                     <      	.define P_IO_Data_B		P_IOA_Buffer
                     <      	//控制端口定义
                     <      	.define	P_IO_Ctrl_D		P_IOB_Data
                     <      	.define	P_IO_Ctrl_A		P_IOB_Attrib
                     <      	.define	P_IO_Ctrl_Di	P_IOB_Dir
                     <      	.define P_IO_Ctrl_B		P_IOB_Buffer
                     <      	//.....end端口修改即修订到前面即可
                     <      	.define	P_IO_Data		P_IO_Data_D
                     <      	.define	P_IO_Ctrl		P_IO_Ctrl_D
00000000                    	.ram
00009DFB                    	.code
                            	//***************************************************************************//
                            	//程序:F_SPLC501_Initial_IO()
                            	//描述:SPLC501接口的初始化程序  C语言调用,汇编语言调用  
                            	//参数:无
                            	
                            	//注意:破坏R1寄存器,保护R1
                            	//***************************************************************************//
                            	.public _F_SPLC501_Initial_IO
                            	_F_SPLC501_Initial_IO:
                            	F_SPLC501_Initial_IO:
00009DFB 88 D2              			push	r1 to [sp]
00009DFC 11 93 02 70        			r1 = [P_IO_Data_Di]
00009DFE 09 A3 00 FF        			r1 |= M_IO_DATA_MASK
00009E00 19 D3 02 70        			[P_IO_Data_Di] = r1
00009E02 11 93 03 70        			r1 = [P_IO_Data_A]
00009E04 09 A3 00 FF        			r1 |= M_IO_DATA_MASK
00009E06 19 D3 03 70        			[P_IO_Data_A] = r1
00009E08 11 93 01 70        			r1 = [P_IO_Data_B]
00009E0A 09 A3 00 FF        			r1 |= M_IO_DATA_MASK
00009E0C 19 D3 00 70        			[P_IO_Data_D] = r1
                            			
00009E0E 11 93 07 70        			r1 = [P_IO_Ctrl_Di]
00009E10 09 A3 70 02        			r1 |= (M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
00009E12 19 D3 07 70        			[P_IO_Ctrl_Di] = r1
00009E14 11 93 08 70        			r1 = [P_IO_Ctrl_A]
00009E16 09 A3 70 02        			r1 |= (M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
00009E18 19 D3 08 70        			[P_IO_Ctrl_A] = r1
00009E1A 11 93 06 70        			r1 = [P_IO_Ctrl_B]
00009E1C 09 B3 8F FD        			r1 &= ~(M_IO_EP+M_IO_AO+M_IO_RW+M_IO_CS)
00009E1E 19 D3 05 70        			[P_IO_Ctrl_D] = r1
00009E20 88 90              			pop		r1 from [sp]
00009E21 90 9A              			retf
                            	//***************************************************************************//
                            	//程序:F_SPLC501_Write_Com()
                            	//描述:往SPLC501里写一个字节指令  C语言调用,汇编语言调用  
                            	//参数:r1送入要传送的指令
                            	//声明:
                            	//注意:破坏R1寄存器,保护R2、R5寄存器
                            	//***************************************************************************//
                            	.public	_F_SPLC501_Write_Com
                            	_F_SPLC501_Write_Com:
                            	F_SPLC501_Write_Com:
00009E22 90 D6              		push	r2,r3 to [sp]
00009E23 88 DA              		push	r5 to [sp]
                            		
00009E24 12 95 06 70        		r2 = [P_IO_Ctrl_B]				//得到IOB口的状态
00009E26 0A B5 BF FD        		r2 &= ~(M_IO_EP+M_IO_CS)		//EP CS to Low 20050613 Edit by xinqiang			
00009E28 1A D5 06 70        		[P_IO_Ctrl_B] = r2 				//EP Low
00009E2A 12 95 06 70        		r2 = [P_IO_Ctrl_B]
00009E2C 0A B5 CF FF        		r2 &= ~(M_IO_AO+M_IO_RW)	
00009E2E 1A D5 06 70        		[P_IO_Ctrl_B] = r2				//AO RW Low
                            		
                            	.ifdef DATA_PORT_HIGHT
00009E30 59 93              		r1 = r1 lsl 4
00009E31 59 93              		r1 = r1 lsl 4
                            	.endif
                            		
00009E32 13 97 01 70        		r3 = [P_IO_Data_B]
00009E34 0B B7 FF 00        		r3 &= ~M_IO_DATA_MASK 
00009E36 09 B3 00 FF        		r1 &= M_IO_DATA_MASK					//Get Low Data Command
00009E38 03 03              		r1 = r1+r3
00009E39 19 D3 00 70        		[P_IO_Data]	= r1				//往数据口送数据
00009E3B 00 EE              		nop
                            		
00009E3C 0A A5 40 00        		r2 |= M_IO_EP					//EP to Hight
00009E3E 1A D5 05 70        		[P_IO_Ctrl]	= r2
00009E40 00 EE              		nop
00009E41 0A B5 BF FF        		r2 &= ~M_IO_EP					//EP to Low
00009E43 0A A5 00 02        		r2 |= M_IO_CS					//CS to hight		20050613 Edit by xinqiang
00009E45 1A D5 05 70        		[P_IO_Ctrl] = r2
                            		
00009E47 88 98              		pop		r5 from [sp]
00009E48 90 92              		pop		r2,r3 from [sp]
00009E49 90 9A              		retf
                            		
                            	//***************************************************************************//
                            	//程序:F_SPLC501_Write_Data()
                            	//描述:往SPLC501里写一个字节数据  C语言调用,汇编语言调用  
                            	//参数:r1送入要传送的数据
                            	//声明:
                            	//注意:破坏R1寄存器,保护R2、R5寄存器
                            	//***************************************************************************//
                            	.public _F_SPLC501_Write_Data
                            	_F_SPLC501_Write_Data:
                            	F_SPLC501_Write_Data:
00009E4A 88 D4              		push	r2 to [sp]
                            		
00009E4B 12 95 06 70        		r2 = [P_IO_Ctrl_B]				//得到IOB口的状态
00009E4D 0A B5 BF FD        		r2 &= ~(M_IO_EP+M_IO_CS)		//EP CS to Low	20050613 Editby xinqiang					
00009E4F 1A D5 06 70        		[P_IO_Ctrl_B] = r2 				//EP Low
00009E51 12 95 06 70        		r2 = [P_IO_Ctrl_B]
00009E53 50 A4              		r2 |= M_IO_AO
00009E54 0A B5 DF FF        		r2 &= ~(M_IO_RW)	
00009E56 1A D5 06 70        		[P_IO_Ctrl_B] = r2				//AO Hight, RW Low
                            		
                            	.ifdef DATA_PORT_HIGHT
00009E58 59 93              		r1 = r1 lsl 4
00009E59 59 93              		r1 = r1 lsl 4
                            	.endif
                            		
00009E5A 13 97 01 70        		r3 = [P_IO_Data_B]
00009E5C 0B B7 FF 00        		r3 &= ~M_IO_DATA_MASK 
00009E5E 09 B3 00 FF        		r1 &= M_IO_DATA_MASK					//Get Low Data Command
00009E60 03 03              		r1 = r1+r3
00009E61 19 D3 00 70        		[P_IO_Data]	= r1				//往数据口送数据
00009E63 00 EE              		nop
                            		
00009E64 0A A5 40 00        		r2 |= M_IO_EP					//EP to Hight
00009E66 1A D5 05 70        		[P_IO_Ctrl]	= r2
00009E68 00 EE              		nop
00009E69 0A B5 BF FF        		r2 &= ~M_IO_EP					//EP to Low
00009E6B 0A A5 00 02        		r2 |= M_IO_CS					//CS to Hight  20050613 Editby xinqiag
00009E6D 1A D5 05 70        		[P_IO_Ctrl] = r2	
                            		
00009E6F 88 92              		pop		r2 from [sp]
00009E70 90 9A              		retf
                            		
                            	//***************************************************************************//
                            	//程序:F_SPLC501_Read_Data()
                            	//描述:从SPLC501里读一个字节数据  C语言调用,汇编语言调用  
                            	//参数:r1输出传送的数据
                            	//声明:
                            	//注意:破坏R1寄存器,保护R2、R5寄存器
                            	//***************************************************************************//
                            	.public _F_SPLC501_Read_Data
                            	.public F_SPLC501_Read_Data
                            	_F_SPLC501_Read_Data:
                            	F_SPLC501_Read_Data:
00009E71 40 F0 76 9E        		call F_SPLC501_Read_Data1
00009E73 40 F0 76 9E        		call F_SPLC501_Read_Data1
00009E75 90 9A              		retf
                            	F_SPLC501_Read_Data1:
00009E76 88 D4              		push	r2 to [sp]
00009E77 12 95 02 70        		r2 = [P_IO_Data_Di]				//设置数据口为输入
00009E79 0A B5 FF 00        		r2 &= ~M_IO_DATA_MASK
00009E7B 1A D5 02 70        		[P_IO_Data_Di] = r2
                            		
00009E7D 12 95 06 70        		r2 = [P_IO_Ctrl_B]				//得到IOB口的状态
00009E7F 0A B5 BF FD        		r2 &= ~(M_IO_EP+M_IO_CS)		//EP CS to Low 20050613  Editby xinqiang					
00009E81 1A D5 06 70        		[P_IO_Ctrl_B] = r2 				//EP Low
00009E83 70 A4              		r2 |= (M_IO_AO+M_IO_RW)
00009E84 1A D5 06 70        		[P_IO_Ctrl_B] = r2				//AO Hight, RW Hight
00009E86 00 EE              		nop
00009E87 0A A5 40 00        		r2 |= M_IO_EP
00009E89 1A D5 06 70        		[P_IO_Ctrl_B] = r2				//产生EP高电平,
00009E8B 00 EE              		nop
00009E8C 0A B5 BF FF        		r2 &= ~M_IO_EP					//EP to Low
00009E8E 1A D5 05 70        		[P_IO_Ctrl] = r2
00009E90 11 93 00 70        		r1 = [P_IO_Data]
00009E92 09 B3 00 FF        		r1 &= M_IO_DATA_MASK
00009E94 0A A5 00 02        		r2 |= M_IO_CS
00009E96 1A D5 05 70        		[P_IO_Ctrl] = r2
00009E98 12 95 02 70        		r2 = [P_IO_Data_Di]				//恢复数据口为输出状态
00009E9A 0A A5 00 FF        		r2 |= M_IO_DATA_MASK
00009E9C 1A D5 02 70        		[P_IO_Data_Di] = r2
                            	.ifdef DATA_PORT_HIGHT
00009E9E 79 93              		r1 = r1 lsr 4
00009E9F 79 93              		r1 = r1 lsr 4
                            	.endif
00009EA0 88 92              		pop		r2 from [sp]
00009EA1 90 9A              		retf
                            	
                            	//***************************************************************************//
                            	//程序:F_SPLC501_Read_Status()
                            	//描述:从SPLC501里读状态字数据  C语言调用,汇编语言调用  
                            	//参数:r1输出传送的数据
                            	//声明:小丑	20050518	sunnorth  Mz Design
                            	//注意:破坏R1寄存器,保护R2寄存器
                            	//***************************************************************************//
                            	.public _F_SPLC501_Read_Status
                            	.public F_SPLC501_Read_Status
                            	_F_SPLC501_Read_Status:
                            	F_SPLC501_Read_Status:
00009EA2 88 D4              		push	r2 to [sp]
                            		
00009EA3 12 95 02 70        		r2 = [P_IO_Data_Di]				//设置数据口为输入
00009EA5 0A B5 FF 00        		r2 &= ~M_IO_DATA_MASK
00009EA7 1A D5 02 70        		[P_IO_Data_Di] = r2
                            		
00009EA9 12 95 06 70        		r2 = [P_IO_Ctrl_B]				//得到IOB口的状态
00009EAB 0A B5 BF FD        		r2 &= ~(M_IO_EP+M_IO_CS)		//EP CS to Low 20050613 Editby Xinqiang					
00009EAD 1A D5 06 70        		[P_IO_Ctrl_B] = r2 				//EP Low
00009EAF 12 95 06 70        		r2 = [P_IO_Ctrl_B]
00009EB1 0A B5 EF FF        		r2 &= ~(M_IO_AO) 
00009EB3 60 A4              		r2 |= M_IO_RW
00009EB4 1A D5 06 70        		[P_IO_Ctrl_B] = r2				//AO Hight, RW Hight
00009EB6 00 EE              		nop
00009EB7 0A A5 40 00        		r2 |= M_IO_EP
00009EB9 1A D5 06 70        		[P_IO_Ctrl_B] = r2				//产生EP高电平,
00009EBB 00 EE              		nop
00009EBC 11 93 00 70        		r1 = [P_IO_Data]
00009EBE 09 B3 00 FF        		r1 &= M_IO_DATA_MASK
                            		
00009EC0 0A B5 BF FF        		r2 &= ~M_IO_EP					//EP to Low
00009EC2 0A A5 00 02        		r2 |= M_IO_CS					//CS to Hight 20050613 Editby Xinqiang
00009EC4 1A D5 05 70        		[P_IO_Ctrl] = r2	
                            		
00009EC6 12 95 02 70        		r2 = [P_IO_Data_Di]				//恢复数据口为输出状态
00009EC8 0A A5 00 FF        		r2 |= M_IO_DATA_MASK
00009ECA 1A D5 02 70        		[P_IO_Data_Di] = r2
                            	.ifdef DATA_PORT_HIGHT
00009ECC 79 93              		r1 = r1 lsr 4
00009ECD 79 93              		r1 = r1 lsr 4
                            	.endif
00009ECE 88 92              		pop		r2 from [sp]
00009ECF 90 9A              		retf
                            			
                            	//****************************************************************************************************
                            	// 128X64I液晶底层驱动[6X8]字体库
                            	// 设计者: powerint
                            	// 描  述: [6X8]西文字符的字模数据 (纵向取模,字节倒序)
                            	// 日  期: 2004.4.27
                            	// 版本号: 1.1
                            	//****************************************************************************************************
                            	.PUBLIC _Asii8
                            	_Asii8:
00009ED0 00 00 00 00        	.DW  0x0000,0x0000,0x0000,0x0000,0x065F,0x0600,0x0007,0x0300,0x0703,0x0024,0x7E24,0x7E24  
         00 00 00 00
         5F 06 00 06
         07 00 00 03
         03 07 24 00

⌨️ 快捷键说明

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