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

📄 nec7542.asm

📁 基于单片机NEC7542的单向复费率电能表汇编程序
💻 ASM
字号:

;--------------------------------
;- VECTOR TABLE                 -
;--------------------------------
INT0	CSEG	AT	0000H
MAIN:	DW	START

INT1	CSEG	AT	0004H
INTLVI:	DW	NOUSE				;//LOW-VOLTAGE DETECTION

INT2	CSEG	AT	0006H
INTP0:	DW	NOUSE				;//PIN INPUT EDGE DETECTION

INT3	CSEG	AT	0008H
INTP1:	DW	NOUSE

INT4	CSEG	AT	000AH
INTP2:	DW	NOUSE

INT5	CSEG	AT	000CH
INTP3:	DW	NOUSE

INT6	CSEG	AT	000EH
INTP4:	DW	NOUSE

INT7	CSEG	AT	0010H
INTP5:	DW	NOUSE

INT8	CSEG	AT	0012H
INTSRE6:DW	NOUSE				;//UART6 RECEPTION ERROR GERNERATION

INT9	CSEG	AT	0014H
INTSR6:	DW	NOUSE				;//END OF UART6 RECEPTION 

INT10	CSEG	AT	0016H
INTST6:	DW	NOUSE				;//END OF UART6 TRANSMISSION

INT11	CSEG	AT	0018H
INTST0:	DW	NOUSE				;//END OF CSI10 COMMUNICATION/END OF UART0 TRANSMISSION

INT12	CSEG	AT	001AH
INTTMH1:DW	NOUSE				;//MATCH BETWEEN TMH1 AND CMP01

INT13	CSEG 	AT 	001CH
INTTMH0:DW 	NOUSE				;//MATCH BETWEEN TMH0 AND CMP00

INT14	CSEG	AT	001EH
INTTM50:DW	NOUSE				;//MATCH BETWEEN TM50 AND CR50

INT15	CSEG	AT	0020H
INTTM000:DW	NOUSE				;//MATCH BETWEEN TM00 AND CR000

INT16	CSEG 	AT 	0022H
INTTM010:DW	NOUSE				;//MATCH BETWEEN TM00 AND CR010

INT17	CSEG	AT	0024H
INTAD:	DW	NOUSE				;//END OF A/D CONVERSION

INT18	CSEG	AT	0026H
INTSR0:	DW	NOUSE				;//END OF UART0 RECEPTION OR RECEPTION ERROR GENERATION

INT19	CSEG	AT	0028H
INTWTI:	DW	NOUSE					;//WATCH TIMER REFERENCE TIME INTERVAL SIGNAL

INT20	CSEG	AT	002AH
INTTM51:DW	NOUSE				;//MATCH BETWEEN TM51 AND CR51

INT21	CSEG	AT	002CH
INTKR:  DW	NOUSE				;//KEY INTERRUPT DETECT

INT22	CSEG	AT	002EH
INTWT:  DW	IT05S				;//WATCH TIMER OVERFLOW

INT23	CSEG	AT	0030H
INTP6:	DW	NOUSE				;//PIN INPUT EDGE DETECTION(AVAILABLE ONLY IN THE 48-PIN PRODUCTION)


RAM		DSEG	AT  0FE20H
TIMERON_H	:	DS	1
TIMERON_M	:	DS	1
TIMEROFF_H	:	DS	1
TIMEROFF_M	:	DS	1
STATUS		:	DS	17				;//ON/OFF/COMPENSATE,MODE,WIND SPEED,DIRECTION,FUNCTION,TEMPERATURE
LCD_RAM		:	DS	6
SEND_RAM	:	DS	11				;//A,B,C,D,E(BUFFER); A,B,C,D,E,CHECKSUM
COMRX_RAM	:	DS	8				;//A,B,C,D,E,F,G,CHECKSUM
REMOTE_DATA	:	DS	20
AD_RAM		:	DS	4


M_FLG			BSEG
_ANI			DBIT
_TIMUP_SYSON	DBIT
_TYPE_SEL		DBIT
_DELAY_EEPROM	DBIT
_START_5S		DBIT
_STOP_5S		DBIT
_STAND_FREQ		DBIT


_COOL			EQU		(LCD_RAM).0
_ELEC_WARM		EQU		(LCD_RAM).1
_AUTO			EQU		(LCD_RAM).2
_DEHUMIDIFY		EQU		(LCD_RAM).4
_POWER_OP		EQU		(LCD_RAM).6
_QUIET_OP		EQU		(LCD_RAM).7
_WARM			EQU		(LCD_RAM+1).0
K11				EQU		(LCD_RAM+1).1
K10				EQU		(LCD_RAM+1).2
_O2				EQU		(LCD_RAM+1).3
_WIND			EQU		(LCD_RAM+1).4
_HUMIDIFY		EQU		(LCD_RAM+1).5
_WIND_SPD1		EQU		(LCD_RAM+2).0
_DEGREE			EQU		(LCD_RAM+2).1
_PERCENT		EQU		(LCD_RAM+2).2
_WIND_SPD0		EQU		(LCD_RAM+2).4
_SLEEP			EQU		(LCD_RAM+2).5
_TIMER			EQU		(LCD_RAM+2).6
_HEALTH			EQU		(LCD_RAM+2).7
_2G				EQU		(LCD_RAM+3).2
_WIND_SPD2		EQU		(LCD_RAM+3).4
_1G				EQU		(LCD_RAM+4).2
_WIND_SPD3		EQU		(LCD_RAM+4).4
_WIND_SPD5		EQU		(LCD_RAM+5).0
_WIND_SPD6		EQU		(LCD_RAM+5).1
_WIND_SPD4		EQU		(LCD_RAM+5).4
_TEMP			EQU		(LCD_RAM+5).5
_HUM			EQU		(LCD_RAM+5).6
_SETTING		EQU		(LCD_RAM+5).7



LCD_CS			EQU		P1.2
LCD_WR			EQU		P1.5
LCD_DATA		EQU		P1.6


;//CONSTANT DEFINE
LCD_SYSEN		EQU		00000001B		;//TURN ON SYSTEM OSC COMMAND CODE
LCD_OSC			EQU		00011000B		;//RC 256K
LCD_ON			EQU		00000011B		;//TURN ON LCD BIAS GENERATOR
LCD_BIAS		EQU		00101011B		;//1/3BIAS 4DUTY


;//*******************************************
OPT_SET CSEG AT 80H
	DB	78H
	DB	00H
	DB	00H
	DB	00H
ONC_SET CSEG AT 84H
  	DB	02H

SECU_ID CSEG AT 85H
	DB	0FFH	
	DB	0FFH	
	DB	0FFH	
	DB	0FFH	
	DB	0FFH	
	DB	0FFH	
	DB	0FFH	
	DB	0FFH	
	DB	0FFH	
	DB	0FFH

;//*******************************************
START:			
				NOP
			    DI
        		NOP
        		MOVW    IF0,#00
        		MOVW    IF1,#00
        		MOVW    MK0,#0FFH
        		MOVW    MK1,#0FFH
        		MOV    	PCC,#00
	   			MOVW    HL,#0FC00H					;//CLEAR RAM
RAMCLR:
        		MOV     A,#0
        		MOV     [HL],A
        		INCW    HL
        		MOVW    AX,HL
       			CMPW    AX,#0FEFEH
        		BC      $RAMCLR        
        		MOVW    AX,#0FCFFH					;//stack index set
        		MOVW    SP,AX
		        NOP
				CALL	!INISFR				;//INITIALIZE SFR
				EI
				CALL	!INIRAM				;//INI LCD RAM(DISPLAY ALL FOR 3S)&COM_SEND RAM
				
			
MAIN1:			NOP
				NOP
				NOP
				NOP
				BR		MAIN1
				
;//******************************************************
;//		SPR	INIT
;//******************************************************
INISFR:		
MOV		PM0,#11111100B
				MOV		PM1,#00010010B
				MOV		PM2,#01100000B
				MOV		PM3,#11111100B
				MOV		PM4,#11111100B
				MOV		PM6,#11111000B
				MOV		PM7,#11111000B
				MOV		PM12,#11100000B
				
				MOV		P0,#0
				MOV		P1,#0
				MOV		P2,#0
				MOV		P3,#0
				MOV		P4,#0
				MOV		P6,#0
				MOV		P7,#0
				MOV		P12,#0
				
				MOV		ADPC,#00001000B
				
				MOV		TMC50,#00000111B		;//BUZZER USE
				MOV		TCL50,#00000101B		;//62.5K/0.016ms
				MOV		CR50,#16				;//2K

				MOV		TMC51,#00001100B		;//REMOTE USE
				MOV		TCL51,#00000101B		;//4M/64=62.5K/0.016MS
				MOV		CR51,#15
		
        		MOV		WTM,#00100011b			;//WATCH TIMER 2.048MS
        		CLR1	WTIMK
        		CLR1	WTMK					;//INTERVAL TIME 0.5S

        		MOV		EGP,#00001000B				;//INTP3(50HZ)BOTH EDGE,OTHER FALLING EDGE
        		MOV		EGN,#00111111B
				
        		CLR1	PMK4                    ;//ENABLE INTP4 INTERRUPT
        		
        		CLR1	TMMK51
        
        		SET1	RSTOP
        		CLR1	EXCLK
        		SET1	OSCSEL
        		SET1	XSEL
        		SET1	MCM0
        		CLR1	MSTOP
				NOP

								
				RET
				
				
				
				
				
				
;//*************************************************************
;//INIT LCD RAM FOR DISPLAY ALL & START 3S TIMER & COM_SEND RAM
;//*************************************************************
INIRAM:
				SET1	LCD_CS
				NOP
				NOP
				CLR1	LCD_CS
				MOV		A,#10000000B	;//COMMAND
				MOV		B,#3
				CALL	!LCD_TRANS
				MOV		A,#LCD_SYSEN
				MOV		B,#9
				CALL	!LCD_TRANS
				MOV		A,#LCD_OSC
				MOV		B,#9
				CALL	!LCD_TRANS
				MOV		A,#LCD_BIAS
				MOV		B,#9
				CALL	!LCD_TRANS
				MOV		A,#LCD_ON
				MOV		B,#9
				CALL	!LCD_TRANS
				NOP
				SET1	LCD_CS
				NOP
				NOP
				
				MOVW	HL,#STATUS
				MOV		A,#0
				MOV		[HL],A
				CLR1	LCD_CS
				MOV		A,#10100000B				;//WRITE
				MOV		B,#3
				CALL	!LCD_TRANS
				NOP
				MOV		A,#00000000B
				MOV		B,#6
				CALL	!LCD_TRANS					;//ADDRESS
				MOV		C,#6
INIRAM01:		MOV		A,#0FFH						;//DISPLAY ALL// 2 SEG
				MOV		B,#8
				CALL	!LCD_TRANS
				NOP
				DBNZ	C,$INIRAM01
				
INIRAM90:		NOP
				RET
			

;//******************************************************
;//			0.5S INTERRUPT
;//******************************************************
IT05S:		
				NOP
				NOP
				PUSH	AX
				PUSH	BC
				PUSH	HL
				CALL	!DISPLAY
		
				NOP
				POP		HL
				POP		BC
				POP		AX
				RETI
																		
				
;//********************************************************
;//		DISPLAY ACCORDING TO CURRENT MODE
;//********************************************************
DISPLAY:		
				SET1	LCD_CS
				NOP
				NOP
				NOP
				NOP
				CLR1	LCD_CS
				MOV		A,#10100000B
				MOV		B,#3
				CALL	!LCD_TRANS
				MOV		A,#00000000B
				MOV		B,#6
				CALL	!LCD_TRANS
				MOVW	HL,#LCD_RAM
				MOV		C,#6
DISPLAY01:		MOV		A,[HL]
				MOV		B,#8
				CALL	!LCD_TRANS
				INCW	HL
				DBNZ	C,$DISPLAY01
				
DISPLAY90:		NOP
				RET
				
;//******************************************************
;//		LCD BIT DATA TRANSFER 
;//ENTRANCE:A(DATA),B(NUM OF BITS)
;//******************************************************
LCD_TRANS:		ROLC	A,1
				BC		$LCD_TRANS10
				CLR1	LCD_DATA
				BR		$LCD_TRANS11
LCD_TRANS10:	SET1	LCD_DATA
LCD_TRANS11:	NOP
				NOP
				NOP
				NOP
				SET1	LCD_WR
				NOP
				NOP
				NOP
				NOP
				CLR1	LCD_WR
				NOP
				NOP
				NOP
				NOP
				DBNZ	B,$LCD_TRANS
				NOP
				NOP
				RET
				
;//*************************************************************
;//				DISPLAY DIGITAL PROCESS
;//IN:A(COMPRESS BCD)   OUT:C,A(C:DECADE A:SINGLE)
;//************************************************************
DIS_DIGI:
				MOV		C,A	
				AND		A,#0F0H				;//DECADE
				MOV		B,#4
DIGI01:			ROR		A,1
				DBNZ	B,$DIGI01
				MOV		B,A
				MOVW	AX,#DIGITAL
				CALL	!TABLE
				XCH		A,C
				AND		A,#0FH
				MOV		B,A
				MOVW	AX,#DIGITAL
				CALL	!TABLE
				RET

;//**************************************************************
;//		SEARCH RESULT FROM TABLE
;//ENTRANCE:AX(TABLE ADDRESS),B(POSITION) EXIT: A(VALUE)
;//**************************************************************
TABLE:
				XCH		A,X
				ADD		A,B
				XCH		A,X
				ADDC	A,#0
				MOVW	HL,AX
				MOV		A,[HL]
				RET
				
;//*****************************************************************
;//			COMPRESSED BCD PLUS
;//IN:A(COMPRESSED BCD) B(COMPRESSED BCD) OUT:A(COMPRESSED BCD)
;//*****************************************************************
BCD_PLUS:		
				ADD		A,B
				MOV		B,A
				AND		A,#0FH
				CMP		A,#10
				BC		$BCD_PLUS01
				MOV		A,B
				ADD		A,#6
				BR		$BCD_PLUS90
BCD_PLUS01:		MOV		A,B				
BCD_PLUS90:		NOP
				RET
				
;//*****************************************************************
;//			COMPRESSED BCD MINUS
;//****************************************************************
BCD_MINUS:
				SUB		A,B
				XCH		A,B
				AND		A,#0FH
				XCH		A,B
				MOV		C,A
				AND		A,#0FH
				ADD		A,B
				CMP		A,#10
				BC		$BCD_MINUS01
				MOV		A,C
				SUB		A,#6
				BR		$BCD_MINUS90
BCD_MINUS01:	MOV		A,C
BCD_MINUS90:	NOP
				RET				

;//***************************************************************
;//			BINARY TO COMPRESSED BCD
;//IN:A(BINARY) OUT:A(COMPRESSED BCD)
;//***************************************************************
BIN_BCD:
				MOV		X,A
				AND		A,#0F0H
				CMP		A,#0
				BZ		$BIN03
				MOV		C,#4
BIN01:			ROL		A,1
				DBNZ	C,$BIN01
				MOV		C,A
				MOV		A,#0
BIN02:			MOV		B,#16H
				CALL	!BCD_PLUS
				DBNZ	C,$BIN02
BIN03:			XCH		A,X
				AND		A,#0FH
				MOV		B,A
				XCH		A,X
				CALL	!BCD_PLUS
				RET
;//*************************************************************
;//			COMPRESSED BCD TO BINARY
;//IN:A  OUT:A
;//*************************************************************
BCD_BIN:
				MOV		X,A
				AND		A,#0F0H
				CMP		A,#0
				BZ		$BCD90
				MOV		B,#4
BCD01:			ROR		A,1
				DBNZ	B,$BCD01
				MOV		C,A
				MOV		A,#0
BCD02:			ADD		A,#16
				DBNZ	C,$BCD02
				ADD		A,X
BCD90:			RET
;//*************************************************************
NOUSE:
				RETI

;//*****************************************************************
;//TABLE
;//*****************************************************************
DIGITAL:		DB		0EBH,60H,0C7H,0E5H,6CH,0ADH,0AFH,0E0H,0EFH,0EDH,0EEH,0EFH,8BH,0EBH,8FH,8EH
END




⌨️ 快捷键说明

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