;high enable control OSCX EQU 14H ;Bit0:Turn on OSCX oscillator,Bit1:CPU clocks
;select(1:OSCX/0:OSC),Bit3:OSCX ;type selection SETLCD EQU 15H ;Bit0:Select LCD DUTY,Bit1:LCD off, ;Bit2,3:LCD frequency control SEGOUT EQU 16H ;Bit2:Set LCD segment as output,Bit3:LCD ;power degrade PSG1L EQU 17H ;PSG channel1 low nibble
PSG1H EQU 18H ;PSG channel1 high nibble,Bit3: ;channel1 octave shift control
PSG21A EQU 19H ;PSG channel2 nibble1 or alarm output PSG22 EQU 1AH ;PSG channel2 nibble2 PSG23 EQU 1BH ;PSG channel2 nibble3
PSG24 EQU 1CH ;PSG channel2 nibble4,Bit3:channel2 ;octave shift control
PSGCTR1 EQU 1DH ;Bit0,Bit1:channel1,2 enable, ;Bit2,Bit3:volume control
PSGCTR2 EQU 1EH ;Bit0,1:PSG1,PSG2 mode control, ;Bit2,3:PSG1,PSG2 clock source selection
;******************************** ;LCD REGISTER DEFINE
;******************************** SEG1L EQU 00H SEG2L EQU 01H SEG3L EQU 02H SEG4L EQU 03H SEG5L EQU 04H SEG6L EQU 05H SEG7L EQU 06H SEG8L EQU 07H SEG9L EQU 08H SEG10L EQU 09H SEG11L EQU 0AH SEG12L EQU 0BH SEG1H EQU 28H SEG2H EQU 29H SEG3H EQU 2AH SEG4H EQU 2BH SEG5H EQU 2CH SEG6H EQU 2DH SEG7H EQU 2EH
23
SEG8H EQU 2FH SEG9H EQU 30H SEG10H EQU 31H SEG11H EQU 32H SEG12H EQU 33H
;******************************** ;USER REGISTER DEFINE
;******************************** TEMPT EQU 20H ;variable register CT0 EQU 21H ;variable 0 register CT1 EQU 22H ;variable 1 register CT2 EQU 23H ;variable 2 register PARM EQU 24H ;parmeter register KEY1 EQU 25H ;key variable register KEY_F EQU 26H ;key flag register KEY_NUM EQU 27H ;key number register S_CODE EQU 28H ;scan code register B_AC EQU 29H ;ac buffer register B_TBR EQU 2AH ;tbr buffer register PORTB_B EQU 2BH ;portb buffer register KEY2 EQU 2CH ;key variable register KEYREG EQU 2DH ;key register for display and deal with MODE EQU 2EH ;mode information register CON_OPEN EQU 2FH ;available when open WIND EQU 30H ;wind information register OCTIME EQU 31H ;open and close time register DATA_1 EQU 32H ;data used for temperature high nibble DATA_2 EQU 33H ;data used for temperature low nibble DATA_3 EQU 34H ;data used for set time to open hour high nibble DATA_4 EQU 35H ;data used for set time to open hour low nibble DATA_5 EQU 36H ;data used for set time to open minute high nibble DATA_6 EQU 37H ;data used for set time to open minute low nibble DATA_7 EQU 38H ;data used for set time to open hour high nibble DATA_8 EQU 39H ;data used for set time to open hour low nibble DATA_9 EQU 3AH ;data used for set time to open minute high nibble DATA_10 EQU 3BH ;data used for set time to open minute low nibble TIMEOP EQU 3CH ;set time open register TIMECL EQU 3DH ;set time close register OP_CL EQU 3EH ;open or close register CODEAH EQU 3FH ;code register CODEAL EQU 40H ; CODEBH EQU 41H CODEBL EQU 42H
24
CODECH EQU 43H CODECL EQU 44H CODEDH EQU 45H CODEDL EQU 46H CODEEH EQU 47H CODEEL EQU 48H CODE EQU 49H
;******************************** ORG 00H JMP RESET NOP JMP TIMER0 NOP
JMP INTB
;******************************** RESET:
CALL INITIAL_SYSTEM_REGISTER ;system initial
CALL INITIAL_USER_REGISTER ;user register initial CALL CLOSE_ALL_LCD CALL DISPLAY_ALL_LCD CALL DELAY_2S ;JMP $
CALL DISPLAY_LCD CALL_KEYSCAN:
CALL KEYSCAN ;call keyscan program LDA KEY_F,00H ;if key flag=1,that key is hit BAZ DELAY_5S LDA KEY_NUM STA KEYREG
CALL LOW_HIGH ;low frequency to high frequency
;jump to key display and deal with SBI KEYREG,00H BAZ KEY0_OPEN SBI KEYREG,01H BAZ KEY1_CLOSE SBI KEYREG,02H BAZ KEY2_MODE SBI KEYREG,03H BAZ KEY3_WIND SBI KEYREG,04H BAZ KEY4_ADD SBI KEYREG,05H BAZ KEY5_MIN
25
SBI KEYREG,06H BAZ KEY6_TIMEOP SBI KEYREG,07H BAZ KEY7_TIMECL SBI KEYREG,08H BAZ KEY8_HOUR SBI KEYREG,09H BAZ KEY9_MINU
CALLDISP:
CALL DISPLAY_LCD LDI SEG11H,0EH ;light the code segment
CALL CODESEND LDI SEG11H,0CH ;unlight the code segment
INITIAL_SYSTEM_REGISTER ;initial interrupt LDI IE,00H ;close all interupt LDI IRQ,00H ;clear IRQ ;initial timer0 LDI TM0,00H LDI TL0,00H LDI TH0,00H
;initial basetimer LDI BTM,00H ;initial port LDI PORTA,00H LDI PORTB,00H LDI SPA,02H ;set portA input,pa1 output LDI SPB,0FH ;set portB output ;initial pointer LDI TBR,00H LDI INX,00H LDI DPL,00H LDI DPM,00H LDI DPH,00H ;initial clock LDI OSCX,00H ;set OSC as CPU clock,OSCX set as ;ceramic oscillatorinitial LCD LDI SETLCD,02H ;turn LCD,LCDCLK=OSC/64,1/8duty,1/4bias
LDI SEGOUT,0CH ;set LCD as segment output,LPD=1
26
off
相关推荐: