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

📄 stc2.asm

📁 STC89LE51读写24C02和RTL8309的PHY
💻 ASM
📖 第 1 页 / 共 3 页
字号:

/********************************************************************** 

 函 数 名:BHD
 功    能:
 说    明:
 调    用: 无
 寄 存 器: 
 入口参数:
 返 回 值:A
 设    计                         日    期:2007.3.26
 修    改:                       日    期: 
***********************************************************************/
BHD:
		MOV	R1,#DISP1
		MOV	B,#0AH
		MOV	A,@R1
		MUL	AB
		INC	R1
		ADD	A,@R1
		RET

/********************************************************************** 

 函 数 名:QFDIS
 功    能:
 说    明:
 调    用: 无
 寄 存 器: 
 入口参数:
 返 回 值:A
 设    计                         日    期:2007.3.26
 修    改:                       日    期: 
***********************************************************************/
QFDIS:
		MOV	R1,#DISP3
		MOV	A,@R1
		CPL	A
		MOV	@R1,A
		INC	R1
		MOV	A,@R1
		CPL	A
		MOV	@R1,A
		RET


/********************************************************************** 

 函 数 名:SECTOR_ERASE
 功    能:扇区檫除
 说    明:檫除整个扇区,开始地址为EEP_ADR_H,EEP_ADR_L
 调    用: 无
 入口参数:EEP_ADR_H,EEP_ADR_L
 返 回 值:无
 设    计:                     日    期:2007.1.9
 修    改:                     日    期: 
***********************************************************************/
SECTOR_ERASE:
          
		MOV	ISP_ADDRH,EEP_ADR_H		;送地址高字节
		MOV	ISP_ADDRL,EEP_ADR_L		;送地址低字节
		CLR	EA				;关中断
		MOV	ISP_CONTR,#WAIT_TIME		;设置等待时间
		ORL	ISP_CONTR,#10000000B		;允许ISP/IAP操作
		MOV	ISP_CMD,#ISP_IAP_SECTOR_ERASE	;送扇区擦除命令	
		MOV	ISP_TRIG,#46H			;先送46H,再送B9H到ISP/IAP触发寄存器,送完B9后,ISP/IAP命令立即被触发起动。
		MOV	ISP_TRIG,#0B9H
		NOP					;扇区擦除成功
		ANL	ISP_CONTR,#01111111B		;禁止ISP/IAP操作		
		SETB	EA				;处理完ISP/IAP动作即可开中断  
		RET
         
/********************************************************************** 

 函 数 名:BYTE_PROGRAM
 功    能:字节编程
 说    明:开始地址为EEP_ADR_H,EEP_ADR_L,数据为A
 调    用: 无
 入口参数:EEP_ADR_H,EEP_ADR_L,EEP_DATA
 返 回 值:无
 设    计:                     日    期:2007.1.9
 修    改:                     日    期: 
***********************************************************************/
BYTE_PROGRAM: 

		MOV	ISP_DATA,A			;送字节编程数据到ISP_DATA
		MOV	ISP_ADDRH,EEP_ADR_H		;送地址高字节
		MOV	ISP_ADDRL,EEP_ADR_L		;送地址低字节
		CLR	EA				;关中断
		MOV	ISP_CONTR,#WAIT_TIME		;设置等待时间
		ORL	ISP_CONTR,#10000000B		;允许ISP/IAP操作
		MOV	ISP_CMD,#ISP_IAP_BYTE_PROGRAM	;送字节编程命令	
		MOV	ISP_TRIG,#46H			;先送46H,再送B9H到ISP/IAP触发寄存器,送完B9后,ISP/IAP命令立即被触发起动。
		MOV	ISP_TRIG,#0B9H
		NOP					;编程成功
		ANL	ISP_CONTR,#01111111B		;禁止ISP/IAP操作		
		SETB	EA				;处理完ISP/IAP动作即可开中断  
		RET

/********************************************************************** 

 函 数 名:BYTE_READ
 功    能:字节读
 说    明:开始地址为EEP_ADR_H,EEP_ADR_L
 调    用: 无
 入口参数:EEP_ADR_H,EEP_ADR_L
 返 回 值:A
 设    计:                     日    期:2007.1.9
 修    改:                     日    期: 
***********************************************************************/            
BYTE_READ:           
              
		MOV	ISP_ADDRH,EEP_ADR_H		;送地址高字节
		MOV	ISP_ADDRL,EEP_ADR_L		;送地址低字节
		CLR	EA				;关中断
		MOV	ISP_CONTR,#WAIT_TIME		;设置等待时间
		ORL	ISP_CONTR,#10000000B		;允许ISP/IAP操作
		MOV	ISP_CMD,#ISP_IAP_BYTE_READ	;送字节读命令
		MOV	ISP_TRIG,#46H			;先送46H,再送B9H到ISP/IAP触发寄存器,送完B9后,ISP/IAP命令立即被触发起动。
		MOV	ISP_TRIG,#0B9H
		NOP					;数据读出到ISP_DATA寄存器
		ANL	ISP_CONTR,#01111111B		;禁止ISP/IAP操作		
		SETB	EA				;处理完ISP/IAP动作即可开中断
		MOV	A,ISP_DATA			;读出数据送往A.
		RET
/********************************************************************** 

 函 数 名:SAVEEEP
 功    能:保存EEPROM
 说    明:
 调    用: 无
 入口参数:无
 寄 存 器: 
 返 回 值:无
 设    计:                       日    期:2007.1.9
 修    改:                       日    期: 
***********************************************************************/
SAVEEEP:
		MOV      EEP_ADR_H,#EEPROM_24C02L_Addr1
          	MOV      EEP_ADR_L,#EEPROM_24C02L_Addr2
          	LCALL    SECTOR_ERASE
		MOV      EEP_ADR_H,#EEPROM_24C02H_Addr1
          	MOV      EEP_ADR_L,#EEPROM_24C02H_Addr2
          	LCALL    SECTOR_ERASE
		
		MOV	R0,#00H
		MOV     EEP_ADR_H,#EEPROM_24C02L_Addr1
          	MOV     EEP_ADR_L,#EEPROM_24C02L_Addr2
SADDRL:
		MOVX    A,@R0
          	LCALL   BYTE_PROGRAM 
          	INC	EEP_ADR_L
		INC	R0
		CJNE	R0,#80H,SADDRL
 		MOV     EEP_ADR_H,#EEPROM_24C02H_Addr1
          	MOV     EEP_ADR_L,#EEPROM_24C02H_Addr2
SADDRH:
		MOVX    A,@R0
		LCALL   BYTE_PROGRAM 
          	INC	EEP_ADR_L
		INC	R0
		CJNE	R0,#00H,SADDRH		
		RET

/********************************************************************** 

 函 数 名:COPYEEP
 功    能:读出EEPROM
 说    明:
 调    用: 无
 入口参数:无
 寄 存 器: 
 返 回 值:无
 设    计:                       日    期:2007.1.9
 修    改:                       日    期: 
***********************************************************************/
COPYEEP:
		MOV	R0,#00H
		MOV     EEP_ADR_H,#EEPROM_24C02L_Addr1
          	MOV     EEP_ADR_L,#EEPROM_24C02L_Addr2
CADDRL:
          	LCALL   BYTE_READ 
          	MOVX    @R0,A
		INC	EEP_ADR_L
		INC	R0
		CJNE	R0,#80H,CADDRL
 		MOV     EEP_ADR_H,#EEPROM_24C02H_Addr1
          	MOV     EEP_ADR_L,#EEPROM_24C02H_Addr2
CADDRH:
		LCALL   BYTE_READ 
          	MOVX    @R0,A
		INC	EEP_ADR_L
		INC	R0
		CJNE	R0,#00H,CADDRH		
		RET

/********************************************************************** 

 函 数 名:SMICYC
 功    能:SMI时钟
 说    明:
 调    用: 无
 入口参数:无
 寄 存 器: 
 返 回 值:无
 设    计:                       日    期:2007.3.5
 修    改:                       日    期: 
***********************************************************************/

SMICYC:
		
		MOV	R3,#30H

SHIFT:		
		CLR	SCL
		MOV	R2,#06H
		MOV	R0,#REGAD
		CLR 	C
SHIFT1:		MOV	A,@R0	
		RLC	A
		MOV	@R0,A
		INC	R0
		DJNZ	R2,SHIFT1
		MOV	SDA,C
		SETB	SCL		;时钟高
		DJNZ	R3,SHIFT
		CLR	SCL
		RET

/********************************************************************** 

 函 数 名:PHYRD
 功    能:读PHY
 说    明:
 调    用: 无
 入口参数:无
 寄 存 器: 
 返 回 值:无
 设    计:                       日    期:2007.3.5
 修    改:                       日    期: 
***********************************************************************/
PHYRD:
		;SETB	SDA
		ACALL	D5U
		MOV	R3,#10H
LIGBIT:		;SETB	SCL
		CLR	SCL
		ACALL	D5U
		MOV	C,SDA
		SETB	SCL
		;CLR	SCL
		MOV	R2,#02H
		MOV	R0,#PHYDL
LIGSFT:		MOV	A,@R0
		RLC	A
		MOV	@R0,A
		INC	R0
		DJNZ	R2,LIGSFT
		DJNZ	R3,LIGBIT
		
                ACALL	INIPREAME
		RET

/********************************************************************** 

 函 数 名:PHYWR
 功    能:写PHY
 说    明:
 调    用: 无
 入口参数:无
 寄 存 器: 
 返 回 值:无
 设    计:                       日    期:2007.3.5
 修    改:                       日    期: 
***********************************************************************/
PHYWR:
		MOV	R3,#10H
WIGBIT:		MOV	R2,#02H
		MOV	R0,#PHYDL
		CLR	C
WIGSET:		MOV	A,@R0
		RLC	A
		MOV	@R0,A
		INC	R0
		DJNZ	R2,WIGSET
		MOV	SDA,C
		SETB	SCL
		ACALL	D5U
		CLR	SCL
		DJNZ	R3,WIGBIT
		ACALL	D5U
		
		ACALL	INIPREAME	
		RET

/********************************************************************** 

 函 数 名:INIPREAME
 功    能:初始PREAME
 说    明:
 调    用: 无
 入口参数:无
 寄 存 器: 
 返 回 值:无
 设    计:                       日    期:2007.3.5
 修    改:                       日    期: 
***********************************************************************/
INIPREAME:
		MOV	R0,#PREAME3
		MOV	R2,#04H
PREAME:
		MOV	@R0,#0FFH
		INC	R0
		DJNZ	R2,PREAME
		RET


/********************************************************************** 

 函 数 名:COM_ISR
 功    能:串口中断
 说    明:RI为1时产生中断
 调    用: 无
 入口参数:无
 寄 存 器: 
 返 回 值:无
 设    计:                       日    期:2007.1.9
 修    改:                       日    期: 
***********************************************************************/        
COM_ISR:   
		PUSH    ACC
           	PUSH    PSW
           	SETB    PSW.3		  ;第3组
	   	SETB    PSW.4
	              
	   	JNB     RI,NEXTC1 	;收完一字节否?
	   	CLR     RI

NEXTC2:    
           

           	MOV     A,#00H    	;00为接收缓冲区的地址
           	;ADD     A,R_IN
           	MOV     R0,A
           	MOV     @R0,SBUF 	
	   
NEXTC1:   
           	POP     PSW
           	POP     ACC
           	RETI   

/********************************************************************** 

 函 数 名:COM_INITIALIZE
 功    能:串口初始化
 说    明:设置工作模式3
 调    用: COM_BAUD_SET
 入口参数:无
 寄 存 器: 
 返 回 值:无
 设    计:                       日    期:2007.1.9
 修    改:                       日    期: 
***********************************************************************/
COM_INITIALIZE:
           	LCALL   COM_BAUD_SET
           	CLR     EA
           	SETB    SM0
	   	SETB    SM1
	   	CLR     SM2
	   	SETB    REN
	   	CLR     TI
	   	CLR     RI
           	SETB    ES
           	SETB    PS
           	SETB    EA
           	RET           

;----------------------------------------------------------
;波特率设置                                                
; 22.1184  9600   TH1=0F4H
; 22.1184  38400  TH1=0FDH
; 11.0592  9600   TH1=0FAH                                                     
;----------------------------------------------------------
/********************************************************************** 

 函 数 名:COM_BAUD_SET
 功    能:波特率设置
 说    明:设置波特率等
 调    用: 
 入口参数:无
 返 回 值:无
 设    计:                       日    期:2007.1.9
 修    改:                       日    期: 
***********************************************************************/ 
COM_BAUD_SET:
           	CLR    EA
	   	CLR    TI
           	CLR    TR1
           	CLR    ET1
           	ORL    PCON,#80H
	   	ANL    TMOD,#0FH
           	ORL    TMOD,#20H
           	MOV    TH1,#0F4H    
           	SETB   TR1
           	SETB   EA
           	RET
           
/********************************************************************** 



/********************************************************************** 
 字段表
***********************************************************************/
SEGTAB:
	DB	0C0H
	DB	0F9H
	DB	0A4H
	DB	0B0H
	DB	99H
	DB	92H
	DB	82H
	DB	0F8H
	DB	80H
	DB	90H
	DB	88H
	DB	83H
	DB	0C6H
	DB	0A1H
	DB	86H
	DB	8EH
	DB	0FFH

KEYTAB:
	DB	7DH	;0
	DB	0EEH	;1
	DB	0EDH	;2
	DB	0EBH	;3
	DB	0DEH	;4
	DB	0DDH	;5
	DB	0DBH	;6
	DB	0BEH	;7
	DB	0BDH	;8
	DB	0BBH	;9
	DB	7DH	;A
	DB	0EEH	;B
	DB	0EDH	;C
	DB	0EBH	;D
	DB	0DEH	;E
	DB	0DDH	;F
	DB	7EH	;10,READ
	DB	7BH	;11,MEM
	DB	77H	;12,RET
	DB	0B7H	;13,CON
	DB	0D7H	;14,V
	DB	0E7H	;15,^
	DB	7BH	;16,PORT
	DB	7EH	;17,WRITE
	DB	0D7H	;18,SAVE
	DB	0E7H	;19,COPY
KEYSCN:
	DB	7FH
	DB	0BFH
	DB	0DFH
	DB	0EFH

	END

⌨️ 快捷键说明

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