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

📄 ds1302driver_io.lst

📁 基于凌阳的数字电子钟基于凌阳的数字电子钟基于凌阳的数字电子钟
💻 LST
字号:
Sunplus u'nSP Assembler - Ver. 1.14.3.1
              Listing File Has Been Relocated
                            	//======================================================
                            	// 文件名称:	DS1302Driver_IO.asm
                            	// 功能描述:	DS1302底层驱动程序,主要是与时序有关的代码
                            	// 维护记录:	2006-06-14	v1.0
                            	//   Mz出品		时序经典
                            	// 注	 意:	汇编语言版
                            	//======================================================
                            	//	IO port control registers
                            		.DEFINE		P_IOA_Data				0x7000
                            		.DEFINE		P_IOA_Buffer			0x7001
                            		.DEFINE		P_IOA_Dir				0x7002
                            		.DEFINE		P_IOA_Attrib			0x7003
                            		.DEFINE		P_IOA_Latch				0x7004
                            	
                            		.DEFINE		P_IOB_Data				0x7005
                            		.DEFINE		P_IOB_Buffer			0x7006
                            		.DEFINE		P_IOB_Dir				0x7007
                            		.DEFINE		P_IOB_Attrib			0x7008
                            	//redefine the I/O port for DS1302
                            	.DEFINE		Port_Data	P_IOB_Data
                            	.DEFINE		Port_Buffer	P_IOB_Buffer
                            	.DEFINE		Port_Dir	P_IOB_Dir
                            	.DEFINE		Port_Attrib	P_IOB_Attrib
                            	//Define the I/O Port bit connected with DS1302, just as CE\DA\CLK
                            	.DEFINE		M_CE	0x8000
                            	.DEFINE		M_DA	0x4000
                            	.DEFINE		M_CLK	0x2000
                            	
00009768                    	.CODE
                            	//======================================================
                            	// 汇编格式:	_F_DS1302_Initial_IO
                            	// C格式:		void F_DS1302_Initial_IO(void);
                            	// 实现功能:	端口初始化子程序
                            	// 入口参数:	无
                            	// 出口参数:	无
                            	//======================================================
                            	.PUBLIC _F_DS1302_Initial_IO
                            	_F_DS1302_Initial_IO:
00009768 11 93 07 70        		r1 = [Port_Dir]
0000976A 09 A3 00 E0        		r1 = r1|(M_CE+M_DA+M_CLK)
0000976C 19 D3 07 70        		[Port_Dir] = r1
0000976E 11 93 08 70        		r1 = [Port_Attrib]
00009770 09 A3 00 E0        		r1 = r1|(M_CE+M_DA+M_CLK)
00009772 19 D3 08 70        		[Port_Attrib] = r1
00009774 11 93 06 70        		r1 = [Port_Buffer]
00009776 09 B3 FF 1F        		r1 = r1&(~(M_CE+M_DA+M_CLK))
00009778 19 D3 06 70        		[Port_Buffer] = r1
0000977A 11 93 05 70        		r1 = [Port_Data]
0000977C 09 A3 00 E0        		r1 = r1|(M_CE+M_DA+M_CLK)
0000977E 19 D3 08 70        		[Port_Attrib] = r1
00009780 90 9A              		retf
                            	//======================================================
                            	// 汇编格式:	_F_DS1302_WriteByte
                            	// C格式:		void F_DS1302_WriteByte(unsigned int Addr,unsigned int Data)
                            	// 实现功能:	写一个字节数据至DS1302的指定地址的空间当中
                            	// 入口参数:	Addr  指定的地址
                            	//				Data	要写入的数据
                            	// 出口参数:	无
                            	//======================================================
                            	.PUBLIC	_F_DS1302_WriteByte
                            	_F_DS1302_WriteByte:
00009781 88 DA              		push bp to [sp]
00009782 08 0B 04 00        		bp = sp+4
00009784 C5 92              		r1 = [bp]					//get Addr
00009785 09 B3 FF 00        		r1 = r1&0x00ff
00009787 01 94              		r2 = [bp+1]					//Get Data
00009788 5A 95              		r2 = r2 lsl 4
00009789 5A 03              		r1 =r1+r2 lsl 4				//
0000978A 50 98              		r4 = 16
0000978B 12 95 06 70        		r2 = [Port_Buffer]
0000978D 0A A5 00 80        		r2 = r2|M_CE
0000978F 1A D5 06 70        		[Port_Buffer] = r2			//CE to hight ??
                            	?Write_Loop:
00009791 41 C2              		test r1,0x0001
00009792 03 5E              		jz	?Write_0
00009793 0A A5 00 40        		r2 = r2|M_DA
00009795 02 EE              		jmp ?Write_DD
                            	?Write_0:
00009796 0A B5 FF BF        		r2 = r2&(~M_DA)
                            	?Write_DD:
00009798 1A D5 06 70        		[Port_Buffer] = r2			//Send Data to the I/O
0000979A 0A A7 00 20        		r3 = r2|M_CLK	
0000979C 1B D7 06 70        		[Port_Buffer] = r3			//CLK to Hight
0000979E 61 93              		r1 = r1 lsr 1
0000979F 41 28              		r4-=1
000097A0 03 5E              		jz ?Write_Exit
000097A1 1A D5 06 70        		[Port_Buffer] = r2			//CLK to Low
000097A3 53 EE              		jmp	?Write_Loop
                            	?Write_Exit:
000097A4 1A D5 06 70        		[Port_Buffer] = r2
000097A6 0A B5 FF 3F        		r2 = r2&(~(M_DA+M_CE))
000097A8 1A D5 06 70        		[Port_Buffer] = r2
000097AA 88 98              		pop bp from [sp]
000097AB 90 9A              		retf
                            	//======================================================
                            	// 汇编格式:	_F_DS1302_ReadByte
                            	// C格式:		unsigned int F_DS1302_ReadByte(unsigned int Addr)
                            	// 实现功能:	计取DS1302当中指写地址空间的一个字节数据数据
                            	// 入口参数:	Addr  指定的地址
                            	// 出口参数:	无
                            	//======================================================
                            	.PUBLIC	_F_DS1302_ReadByte
                            	_F_DS1302_ReadByte:
000097AC 88 DA              		push r5 to [sp]
000097AD 48 98              		r4 = 8
000097AE 12 95 06 70        		r2 = [Port_Buffer]
000097B0 0A A5 00 80        		r2 = r2|M_CE
000097B2 1A D5 06 70        		[Port_Buffer] = r2			//CE to hight ??
                            	?Write1_Loop:
000097B4 41 C2              		test r1,0x0001
000097B5 03 5E              		jz	?Write1_0
000097B6 0A A5 00 40        		r2 = r2|M_DA
000097B8 02 EE              		jmp ?Write1_DD
                            	?Write1_0:
000097B9 0A B5 FF BF        		r2 = r2&(~M_DA)
                            	?Write1_DD:
000097BB 1A D5 06 70        		[Port_Buffer] = r2			//Send Data to the I/O
000097BD 0A A7 00 20        		r3 = r2|M_CLK	
000097BF 1B D7 06 70        		[Port_Buffer] = r3			//CLK to Hight
000097C1 61 93              		r1 = r1 lsr 1
000097C2 41 28              		r4-=1
000097C3 03 5E              		jz ?Read_DD
000097C4 1A D5 06 70        		[Port_Buffer] = r2			//CLK to Low
000097C6 53 EE              		jmp	?Write1_Loop
                            	?Read_DD:
000097C7 11 93 07 70        		r1 = [Port_Dir]
000097C9 09 B3 FF BF        		r1 = r1&(~M_DA)		
000097CB 19 D3 07 70        		[Port_Dir] = r1				//I/O as Floating input
000097CD 40 92              		r1 = 0						//Clear r1
000097CE 48 98              		r4 = 8
000097CF 0A A7 00 20        		r3 = r2|M_CLK				//R3 save the status as CLK is Hight
                            	?Read_Loop:
000097D1 1A D5 06 70        		[Port_Buffer] = r2			//CLK to low
000097D3 61 93              		r1 = r1 lsr 1
000097D4 00 EE              		nop							//for clk data delay,if cpuclock is highter,user shoud insert more 'nop'
000097D5 15 9B 05 70        		r5 = [Port_Data]			//Read the data of DS1302`s data port
000097D7 0D BB 00 40        		r5 = r5&M_DA
000097D9 02 5E              		jz ?Read_0
000097DA 0D 9B 80 00        		r5 = 0x0080					//lsb first so......
                            	?Read_0:
000097DC 05 A3              		r1 = r1|r5
000097DD 1B D7 06 70        		[Port_Buffer] = r3			//CLK to hight
000097DF 41 28              		r4-=1
000097E0 50 4E              		jnz ?Read_Loop
000097E1 13 97 07 70        		r3 = [Port_Dir]
000097E3 0B A7 00 40        		r3 = r3|M_DA
000097E5 1B D7 07 70        		[Port_Dir] = r3				//I/O as Output port
000097E7 0A B5 FF 5F        		r2 = r2&(~(M_CE+M_CLK))
000097E9 1A D5 06 70        		[Port_Buffer] = r2			//Set the CLK\CE to Low
000097EB 88 98              		pop r5 from [sp]
000097EC 90 9A              		retf
0 error(s), 0 warning(s).


























⌨️ 快捷键说明

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