来源:网上转载 作者:程序匠人
; Test self SH69P53,ram(192*4), ROM(3072*16), Timer0&1,
; ADC function program
;*************************
list p=69P56
;*************************
IE EQU 00H ; IEX, IET0, IET1, IEP
IRQ EQU 01H
TM0 EQU 02H
TM1 EQU 03H
TL0 EQU 04H
TH0 EQU 05H
TL1 EQU 06H
TH1 EQU 07H
PORTA EQU 08H
PORTB EQU 09H
PORTC EQU 0AH
PORTD EQU 0BH
PORTE EQU 0CH
PPHL EQU 0DH ; PULLEN, PH/PL, OXS(1:OSCX, 0:OSC), OXON
TBR EQU 0EH
INX EQU 0FH
DPL EQU 10H
DPM EQU 11H
DPH EQU 12H
T0SE EQU 13H
PBIE EQU 14H
PBIF EQU 15H
ALM EQU 16H
AEC EQU 17H
PAXOUT EQU 18H
PBXOUT EQU 19H
PCXOUT EQU 1AH
PDXOUT EQU 1BH
PEXOUT EQU 1CH
EL EQU 1DH
WDT EQU 1EH
; EQU 1FH
VACR EQU 20H ; BIT3=VREFS, BIT[2:0]=ACR2~0
ADCS EQU 21H ; BIT3=ADCON, BIT[2:0]=CH2~1
GOT EQU 22H ; BIT3=GO/DONEB, BIT2&BIT1=TADC1&0, BIT0=ADCS
ADCDL EQU 23H
ADCDH EQU 24H
LCD EQU 25H ; , LCDON, RLCD[1:0](Bias Resistor)
LPS EQU 26H ; LPS[1:0], DUTY[1:0]
LVD EQU 27H ; LVD, SEG=OUTPUT, PE=SEG, PD=SEG
PWM0 EQU 00H ; +7
PWM1 EQU 01H ; +7
PP0L EQU 02H ; +7
PP0M EQU 03H ; +7
PP0H EQU 04H ; +7
PD0L EQU 05H ; +7
PD0M EQU 06H ; +7
PD0H EQU 07H ; +7
PP1L EQU 08H ; +7
PP1M EQU 09H ; +7
PP1H EQU 0AH ; +7
PD1L EQU 0BH ; +7
PD1M EQU 0CH ; +7
PD1H EQU 0DH ; +7
RDT1 EQU 0EH ; +7
RDT2 EQU 0FH ; +7
RDT3 EQU 10H ; +7
RDT4 EQU 11H ; +7
; ADRn
ADR0 EQU 060H
ADR1 EQU ADR0+01h
ADR2 EQU ADR0+02h
ADR3 EQU ADR0+03h
ADR4 EQU ADR0+04h
ADR5 EQU ADR0+05h
ADR6 EQU ADR0+06h
ADR7 EQU ADR0+07h
ADR8 EQU ADR0+08h
ADR9 EQU ADR0+09h
ADRA EQU ADR0+0Ah
ADRB EQU ADR0+0BH
ADRC EQU ADR0+0CH
ADRE EQU ADR0+0EH
ADRF EQU ADR0+0FH
TFLG EQU 040H
CT0 EQU 041H
CT1 EQU 042H
CTP EQU 043H
CT EQU 044H
TEMP0 EQU 028H
; SELF TEST FLAG AS NORMAL RAM
FLG0 EQU 050H
FLG1 EQU 051H
FLG2 EQU 052H
FLG3 EQU 053H
FLG4 EQU 054H
FLGA EQU 055H
FLGB EQU 056H
FLGC EQU 057H
FLGD EQU 058H
FLGE EQU 059H
FLGF EQU 05AH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000H
PROGRAM:
JMP POWERON
NOP
RTNI
RTNI
NOP
ORG 0005H
POWERON:
; LDA WDT,0
; BA3 T_WDT
LDI PAXOUT,0FH ; PORTA OUTPUT ENABLE
LDI PBXOUT,0FH ; PORTB OUTPUT ENABLE
; LDI PCXOUT,0FH ; PORTC OUTPUT ENABLE
LDI PDXOUT,0FH ; PORTD OUTPUT ENABLE
LDI PORTD,00H
LDI PEXOUT,0FH ; PORTE OUTPUT ENABLE
LDI TM0,03H
; LDA WDT,0
; BA3 WDT_RST
LDI CT0,00H
LDI CT1,00H
LDI CT,00H
LDI FLGA,00H
STA FLGB,0
STA FLGC,0
STA FLGD,0
STA FLGE,0
STA TFLG,0
; JMP TIME_L1
; JMP T_TIMER
; JMP T_PINT
; JMP VIN_PH
; JMP T_ALM
; JMP T_WDT
;******************************************************************
ORT OUTPUT TEST
;*****************
T_PORT:
NOP
NOP
NOP
NOP
LDA WDT,0
LDI PORTA,0FH
LDI PORTB,0FH
LDI PORTC,0FH
LDI PORTD,0FH
LDI PORTE,0FH
NOP
NOP
NOP
NOP
NOP
NOP
LDA WDT,0
LDI PORTA,00H
LDI PORTB,00H
LDI PORTC,00H
LDI PORTD,00H
LDI PORTE,00H
ADIM CT,01H
BNC T_PORT
ADIM CT0,01H
BNC T_PORT+2
ADIM CT1,01H
BNC T_PORT+4
LDA WDT,0
BA3 $+2
JMP $+2
STOP
LDA TFLG,0
BNZ $+6
LDI PPHL,0001B ; OSCX ON
CALL DLAY5MS
LDI PPHL,0011B ; SYSCLK=OSCX
LDI TFLG,0FH
JMP T_PORT
LDI TFLG,00H
LDI TM0,03H ; 1/32, 4/32768Hz*32(03H)*256=1s
; LDI TL0,00H
; LDI TH0,00H
; LDI IRQ,00H
ANDIM PBXOUT,1010B ; PORTB.2&.0=INPUT
ORIM PPHL,1100B ; PULL UP ON
LDI PORTB,0101B ; PORTB.2&.0=INPUT PULL HIGH
NOP
LDA WDT,0
LDA PORTB,0
STA FLGB,0
EORIM FLGB,0101B
BNZ START+4 ; RUN=OSCX(FFH)
ANDIM PPHL,1100B ; OSCX OFF
NOP
; JMP $
; JMP T_PORT
JMP START ; RUN=OSC(00H)
;******************************************************************
;TEST START
;*****************
START:
LDI FLG1,00H
LDI FLG0,00H
CALL DISPLAY
JMP T_LCD
LDI FLG1,0FH
LDI FLG0,0FH
CALL DISPLAY
T_LCD:
; JMP T_T0
LDI LCD,0100B ; LCD ON
; LDI DPH,06H
; LDI DPM,00H
; LDI DPL,00H
; LDI INX,0FH
; LDI DPL,01H
; LDI INX,0FH
; LDI LPS,0011B
; LDI LVD,0011B
; NOP
LDI PORTD,00H
LDI PORTE,00H
; CALL DLY100
; LDI PORTA,00H
; CALL DLY500
; JMP $-5
; LDI LCD,00H
; NOP
; NOP
; NOP
; STOP
; NOP
; NOP
; JMP $-1
;****************************************************************
;TEST LCDRAM
TSLCD:
LDI FLG2,0DH ; TEST LCDRAM($300H~$31DH, $328H~$344H)
LDI FLG1,0DH ;(20)
LDI FLG0,00H
CALL DISPLAY
CALL DLY500
LDI LVD,00H
LDI LPS,0000B
LCD_L0:
LDA LVD,0
STA FLG1,0
LDA LPS,0
STA FLG0,0
CALL DISPLAY
NOP
CALL LCDTEST
ADI LPS,01H
BA2 $+3
STA LPS,0
JMP LCD_L0
LDI LPS,07H
LCD_L1:
LDA LVD,0
STA FLG1,0
LDA LPS,0
STA FLG0,0
CALL DISPLAY
NOP
CALL LCDTEST
ADIM LPS,04H
BC $+2
JMP LCD_L1
ADI LVD,01H
BA2 $+3
STA LVD,0
JMP LCD_L1-1
LDI LVD,0111B
STA FLG1,0
LDI TEMP0,0FH
STA FLG0,0
CALL DISPLAY
CALL LCDOUT
SBIM TEMP0,01H
BC $-4
JMP START
JMP T_T0
;******************************
LCDTEST:
LDI TEMP0,0FH
; CALL RAMTEST1
; CALL DLY500
; SBIM TEMP0,01H
; BC $-3
CALL RAMTEST2
RTNI
LCDOUT: ; SCAN OUTPUT $358H~$36BH
NOP
LDI DPH,06H
LDI DPM,00H
LDI DPL,00H
LDI INX,01H
LDI DPL,01H
LDI INX,02H
LDI DPL,02H
LDI INX,04H
LDI DPL,03H
LDI INX,08H
LDI DPL,04H
LDI INX,03H
LDI DPL,05H
LDI INX,05H
LDI DPL,06H
LDI INX,09H
LDI DPL,07H
LDI INX,0AH
LDI DPM,05H
LDI DPL,08H
RAM_L0:
LDA TEMP0,0 ; AC=(TEMP0)
STA INX,0 ; RAM=(AC)
CALL DLY100
ADIM DPL,01H
BC $+6
SBI DPL,0CH
BNZ RAM_L0
SBI DPM,06H
BAZ $+4
JMP RAM_L0
ADIM DPM,01H
JMP RAM_L0
RTNI
;**************************
RAMTEST1:
LDI FLG1,02H
LDA TEMP0,0
STA FLG0,0
; CALL DISPLAY
LDI DPH,06H
LDI DPM,00H
LDI DPL,00H
RAM_L1:
LDA TEMP0,0 ; AC=(TEMP0)
STA INX,0 ; RAM=(AC)
CALL DLY100
ADIM DPL,01H
BC $+6
SBI DPL,0FH
BNZ RAM_L1
SBI DPM,01H
BAZ $+4
JMP RAM_L1
ADIM DPM,01H
JMP RAM_L1
LDI DPH,06H
LDI DPM,02H
LDI DPL,08H
RAM_L2:
LDA TEMP0,0 ; AC=(TEMP0)
STA INX,0 ; RAM=(AC)
CALL DLY100
ADIM DPL,01H
BC $+6
SBI DPL,05H
BNZ RAM_L2
SBI DPM,04H
BAZ $+4
JMP RAM_L2
ADIM DPM,01H
JMP RAM_L2
CALL DLY500
LDI DPH,06H
LDI DPM,00H
LDI DPL,00H
RAM_L3:
LDA TEMP0,0 ; AC=(TEMP0)
SUBM INX,0 ; RAM-(AC)=RAM=00H
BAZ $+2
CALL RAMERR
CALL DLY100
ADIM DPL,01H
BC $+6
SBI DPL,0FH
BNZ RAM_L3
SBI DPM,01H
BAZ $+4
JMP RAM_L3
ADIM DPM,01H
JMP RAM_L3
LDI DPH,06H
LDI DPM,02H
LDI DPL,08H
RAM_L4:
LDA TEMP0,0 ; AC=(TEMP0)
STA FLGF,0
ANDIM FLGF,03H
SUBM INX,0 ; RAM-(AC)=RAM=00H
BAZ $+2
CALL RAMERR
CALL DLY100
ADIM DPL,01H
BC $+6
SBI DPL,05H
BNZ RAM_L4
SBI DPM,04H
BAZ $+4
JMP RAM_L4
ADIM DPM,01H
JMP RAM_L4
CALL DLY500
RTNI
;*************************
RAMTEST2:
; LDI FLG1,03H
; LDA TEMP0,0
; STA FLG0,0
; CALL DISPLAY
LDI DPH,06H
LDI DPM,02H
STA FLGE,1
LDI DPL,08H
STA FLGF,1
LDI DPM,00H
STA DPM,1
LDI DPL,00H
STA DPL,1
RAM_L5:
LDA DPM,1
STA DPM,0
LDA DPL,1
STA DPL,0
LDI INX,01H
; jmp $-1
CALL DLY100
; nop
LDI INX,02H
CALL DLY100
; nop
LDI INX,04H
CALL DLY100
; nop
LDI INX,08H
CALL DLY100
; nop
LDA LPS,0
BA1 $+9
LDI INX,0FH
CALL DLY100
LDI INX,00H
CALL DLY100
CALL ADDLCDL
LDA TEMP0,0
BNZ RAM_L5
RTNI
LDI INX,00H
CALL DLY100
LDA FLGE,1
STA DPM,0
LDA FLGF,1
STA DPL,0
LDI INX,01H
CALL DLY100
LDI INX,02H
CALL DLY100
LDI INX,0FH
LDA DPM,1
STA DPM,0
LDA DPL,1
STA DPL,0
LDI INX,0FH
CALL DLY100
LDI INX,00H
LDA FLGE,1
STA DPM,0
LDA FLGF,1
STA DPL,0
LDI INX,00H
CALL DLY100
CALL ADDLCDH
LDA DPM,1
STA DPM,0
LDA DPL,1
STA DPL,0
CALL ADDLCDL
LDA TEMP0,0
BNZ RAM_L5
RTNI
ADDLCDL:
LDI TEMP0,00H
ADIM DPL,01H
BC $+6
SBI DPL,0FH
BNZ ADDL_L1
SBI DPM,01H
BAZ $+4
JMP ADDL_L1
ADIM DPM,01H
ADDL_L1:
LDI TEMP0,0FH
LDA DPM,0
STA DPM,1
LDA DPL,0
STA DPL,1
RTNI
ADDLCDH:
ADIM DPL,01H
BC $+6
SBI DPL,05H
BNZ ADDL_L2
SBI DPM,04H
BNZ ADDL_L2
RTNI
ADIM DPM,01H
ADDL_L2:
LDA DPM,0
STA FLGE,1
LDA DPL,0
STA FLGF,1
RTNI
;*************************
RAMERR:
LDA DPH,0
STA FLG2,0
LDA DPM,0
STA FLG1,0
LDA DPL,0
STA FLG0,0
; CALL ERR
RTNI
;****************************************
;T0
;****************************************
T_T0:
LDI FLG2,0BH ; TEST T0
LDI FLG1,0BH
LDI FLG0,0CH
CALL DISPLAY
LDA TM0,0
STA TM0,1
LDA T0SE,0
STA FLG0,0
CALL DISPLAY
LDI TM0,1111B
LDI TL0,00H
LDI TH0,0FH
LDI IRQ,00H
NOP
NOP
LDA IRQ,0
BA2 $+7
LDA TH0,0
STA FLG1,0
LDA TL0,0
STA FLG0,0
CALL DISPLAY1
JMP $-7
T0_LOOP:
LDI T0SE,01H
STA FLG0,0
LDI FLG1,0BH
CALL DISPLAY1
LDI TM0,1111B
LDI TL0,00H
LDI TH0,0FH
LDI IRQ,00H
NOP
NOP
LDA IRQ,0
BA2 $+7
LDA TH0,0
STA FLG1,0
LDA TL0,0
STA FLG0,0
CALL DISPLAY1
JMP $-7
ADIM T0SE,01H
BA2 $+2
JMP T0_LOOP+1
LDA TM0,1
STA TM0,0
LDI T0SE,00H
LDI FLG1,0CH
LDA T0SE,0
STA FLG0,0
CALL DISPLAY
LDI TM1,1111B
LDI TL1,00H
LDI TH1,0FH
LDI IRQ,00H
NOP
NOP
LDA IRQ,0
BA1 $+7
LDA TH1,0
STA FLG1,0
LDA TL1,0
STA FLG0,0
CALL DISPLAY
JMP $-7
T1_LOOP:
LDI T0SE,04H
STA FLG0,0
LDI FLG1,0CH
CALL DISPLAY
LDI TM1,1111B
LDI TL1,00H
LDI TH1,0FH
LDI IRQ,00H
NOP
NOP
LDA IRQ,0
BA1 $+7
LDA TH1,0
STA FLG1,0
LDA TL1,0
STA FLG0,0
CALL DISPLAY
JMP $-7
ADIM T0SE,04H
BNC T1_LOOP+1
LDI T0SE,0010B
LDI TM0,1111B
LDI TL0,00H
LDI TH0,0FH
LDI IRQ,00H
LDI IE,0100B
HALT
NOP
NOP
LDI FLG1,0BH
LDI FLG0,0BH
CALL DISPLAY1
LDI T0SE,1000B
LDI TM1,1111B
LDI TL1,00H
LDI TH1,0FH
LDI IRQ,00H
LDI IE,0010B
HALT
NOP
NOP
LDI FLG1,0CH
LDI FLG0,0CH
CALL DISPLAY
LDI T0SE,0011B
LDI TM0,1111B
LDI TL0,00H
LDI TH0,0FH
LDI IRQ,00H
LDI IE,0100B
HALT
NOP
NOP
LDI FLG1,0BH
LDI FLG0,0CH
CALL DISPLAY1
LDI T0SE,1100B
LDI TM1,1111B
LDI TL1,00H
LDI TH1,0FH
LDI IRQ,00H
LDI IE,0010B
HALT
NOP
NOP
LDI FLG1,0CH
LDI FLG0,0BH
CALL DISPLAY
CALL DLY2000
;*********************************************************
T_END:
LDI WDT,00H
LDA PPHL,0
BA1 $+5 ; RUN=OSCX
LDI FLG2,0FH
LDI FLG1,0FH
LDI FLG0,0FH ; TEST END
JMP $+4
LDI FLG2,00H
LDI FLG1,00H
LDI FLG0,00H ; TEST END
CALL DISPLAY
CALL DISPLAY
CALL DISPLAY
CALL DISPLAY
LDI PAXOUT,0FH
STA PBXOUT,0
STA PCXOUT,0
STA PDXOUT,0
LDI PORTC,0FH
STOP
NOP
NOP
JMP T_END
;********************************************************************
DISPLAY1:
ORIM PCXOUT,0111B
ANDIM PORTC,1000B
LDI PEXOUT,0FH
LDI PDXOUT,0FH
LDI TBR,0EH
LDA FLG1,0
CALL MARK
STA PORTE,0
LDA TBR,0
STA PORTD,0
ORIM PORTC,0010B
LDI TM1,00H
LDI TL1,00H
LDI TH1,08H
ANDIM IRQ,1101B
LDA WDT,0
LDA IRQ,0
BA1 $+2
JMP $-3
LDI TBR,0EH
LDA FLG0,0
CALL MARK
STA PORTE,0
LDA TBR,0
STA PORTD,0
ANDIM PORTC,1101B
ORIM PORTC,0001B
LDI TM1,00H
LDI TL1,00H
LDI TH1,08H
ANDIM IRQ,1101B
LDA WDT,0
LDA IRQ,0
BA1 $+2
JMP $-3
ANDIM PORTC,1000B
LDI TM1,00H
LDI TL1,00H
LDI TH1,08H
ANDIM IRQ,1101B
LDA WDT,0
LDA IRQ,0
BA1 $+2
JMP $-3
RTNI
DLAY5MS:
LDI CT0,04H
NOP
ADIM CT0,01H
BNC $-2
RTNI
DLY500:
LDI TL0,00H
LDI TH0,08H
DLY5_0:
ANDIM IRQ,1011B
LDA WDT,0
LDA IRQ,0
BA2 $+2
JMP $-3
RTNI
DLY100:
LDI TL0,0CH
LDI TH0,0CH
JMP DLY5_0
DLY1000:
LDI CT,02H
CALL DLY500
SBIM CT,01H
BNZ $-2
RTNI
DLY2000:
LDI CT,04H
CALL DLY500
SBIM CT,01H
BNZ $-2
RTNI
DISPLAY:
ORIM PCXOUT,0111B ; PC2~0=OUTPUT
ANDIM PORTC,1000B
LDI PEXOUT,0FH
LDI PDXOUT,0FH
LDI TBR,0EH
LDA FLG1,0
CALL MARK
STA PORTE,0
LDA TBR,0
STA PORTD,0
ORIM PORTC,0010B
CALL DLY500
LDI TBR,0EH
LDA FLG0,0
CALL MARK
STA PORTE,0
LDA TBR,0
STA PORTD,0
ANDIM PORTC,1101B
ORIM PORTC,0001B
CALL DLY500
CALL CLS
CALL DLY500
RTNI
CLS:
; LDI PORTE,00H
; LDI PORTF,00H
ANDIM PORTC,1000B
RTNI
ORG 5DFH
MARK:
TJMP
; ORG 5E0H
RTNW 0EH,07H ;0
RTNW 08H,04H ;1
RTNW 0DH,03H ;2
RTNW 0DH,06H ;3
RTNW 0BH,04H ;4
RTNW 07H,06H ;5
RTNW 07H,07H ;6
RTNW 0CH,04H ;7
RTNW 0FH,07H ;8
RTNW 0FH,06H ;9
RTNW 0FH,05H ;a
RTNW 03H,07H ;b
RTNW 06H,03H ;c
RTNW 09H,07H ;d
RTNW 07H,03H ;E
RTNW 07H,01H ;F
RTNW 01H,02H ;Do C4 12H****************************************************************
RTNW 03H,06H ;Re D4 36H
RTNW 02H,0DH ;Me
RTNW 06H,0FH ;Fa
RTNW 06H,0CH ;So
RTNW 00H,0DH ;La
RTNW 05H,02H ;Si
RTNW 04H,0BH ;Do^30=17,31=4B
RTNW 05H,0DH ;Re^
RTNW 06H,0EH ;Me^
RTNW 03H,09H ;Fa^
RTNW 06H,06H ;So^
RTNW 01H,09H ;La^
RTNW 06H,05H ;Si^
RTNW 04H,0AH ;Do^^
;*********************************************************
END