Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <REG51F380.H>
- ;-------------------------------------------------------------------------------------------------------------------;
- ;CONSTANT DEFINES FOR CHAR_NUM AND CHAR_STATE
- ;-------------------------------------------------------------------------------------------------------------------;
- CHAR_0 EQU 0C0H ;DEFINE CHARS FOR 8BITSEG
- CHAR_1 EQU 0F9H
- CHAR_2 EQU 0A4H
- CHAR_3 EQU 0B0H
- CHAR_4 EQU 099H
- CHAR_5 EQU 092H
- CHAR_6 EQU 082H
- CHAR_7 EQU 0F8H
- CHAR_8 EQU 080H
- CHAR_9 EQU 090H
- CHAR_L EQU 0C7H
- ;-------------------------------------------------------------
- S_LOCKED EQU 0
- STATE DATA 30H
- N_STATE DATA 31H
- USER_KEY DATA 32H
- SEC_KEY IDATA 50H
- MASQ EQU 0A2H
- KEYLEN EQU 4
- KSET EQU P0.6
- KLOAD EQU P0.7
- CSEG AT 500H
- DEFAULT_KEY:
- DB 0A3H, 0A0H, 0A1H, 0A6H, 0A7H, 0A4H, 0A5H
- CSEG AT 600H ;caracteres segmento 8bits
- DIGITS_TABLE:
- DB CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6, CHAR_7, CHAR_8, CHAR_9 ;0-9
- CSEG AT 0H
- JMP RESET
- ;-------------------------------------------------------------------------------------------------
- ; INIT_DEVICE
- ;-------------------------------------------------------------------------------------------------
- PCA_Init:
- MOV PCA0MD, #000h
- RET
- Port_IO_Init:
- MOV XBR1, #040h
- RET
- Init_Device:
- lcall PCA_Init
- lcall Port_IO_Init
- ret
- ;-------------------------------------------------------------------------------------------------
- ; RESET
- ;-------------------------------------------------------------------------------------------------
- RESET:
- ACALL Init_Device
- SETB KSET ;ATIVAR BOTOES
- SETB KLOAD
- MOV R0, #SEC_KEY
- MOV R1, #USER_KEY
- MOV R3, #0H
- MOV A, #0H
- MOV STATE, #S_LOCKED
- MOV N_STATE, #S_LOCKED
- ACALL RELOAD_DEFAULT_KEY
- JMP STATE_MACHINE
- ;-------------------------------------------------------------------------------------------------
- ; RELOAD DEFAULT KEY
- ;-------------------------------------------------------------------------------------------------
- RELOAD_DEFAULT_KEY:
- MOV DPTR, #DEFAULT_KEY
- MOV R0, #SEC_KEY
- MOV R3, #0H
- DEFAULT_KEY_LOOP:
- MOV A, R3
- MOVC A, @A+DPTR
- MOV @R0, A
- INC R0
- INC R3
- CLR CY
- MOV A, R3
- SUBB A, #KEYLEN
- JNZ DEFAULT_KEY_LOOP
- RET
- ;-------------------------------------------------------------------------------------------------
- ; STATE MACHINE
- ;-------------------------------------------------------------------------------------------------
- STATE_MACHINE:
- MOV STATE, N_STATE
- MOV A, STATE
- RL A
- MOV DPTR, #JMP_TABLE
- JMP @A+DPTR
- JMP_TABLE:
- AJMP LOCKED
- AJMP $
- AJMP $
- ;-------------------------------------------------------------------------------------------------
- ; STATE LOCKED
- ;-------------------------------------------------------------------------------------------------
- LOCKED:
- MOV DPTR, #DIGITS_TABLE
- MOV R3, #0H
- MOV R1, #USER_KEY
- MOV P2, #CHAR_L
- ACALL START
- DISPLAYBCD:
- MOV A, R3
- MOVC A, @A+DPTR
- MOV P2, A
- BUTTONS:
- JNB KLOAD, READ_VAL
- JB KSET, BUTTONS
- INCREMENT:
- JNB KSET, $
- INC R3
- CJNE R3, #10, DISPLAYBCD
- MOV R3, #0H
- JMP DISPLAYBCD
- START: ;aguarda que o utilizador carregue no kset para continuar o programa
- JB KSET, START
- JNB KSET, $
- RET
- READ_VAL:
- JNB KLOAD, $
- MOV A, R3
- MOV @R1, A
- INC R1
- MOV A, R1
- MOV R3, #0H
- CJNE A, #36H, DISPLAYBCD
- MOV P2, #0FH
- END
Advertisement
Add Comment
Please, Sign In to add comment