📄 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 + -