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
- CHAR_F EQU 8EH
- ;-------------------------------------------------------------------------------------------------------------------;
- ; ESTADOS
- ;-------------------------------------------------------------------------------------------------------------------;
- S_RECOVER EQU 0
- S_LOCKED EQU 1
- S_OPEN EQU 2
- S_ENCRYPT EQU 3
- S_DESENCRYPT EQU 4
- S_FAIL EQU 5
- MASQ EQU 0A2H
- MASQ_2 EQU 0FH
- KEYLEN EQU 4
- ERRO EQU 0
- ;-------------------------------------------------------------------------------------------------
- ; HARDWARE ASSIGNMENTS
- ;-------------------------------------------------------------------------------------------------
- KSET EQU P0.6
- KLOAD EQU P0.7
- TB EQU P2.7
- ;-------------------------------------------------------------------------------------------------
- ; VARIABLES
- ;-------------------------------------------------------------------------------------------------
- USER_KEY XDATA 70H
- SEC_KEY IDATA 60H
- DSEG AT 40H
- STATE: DS 1
- N_STATE: DS 1
- BSEG AT 0H ;comeca na area enderecavel ao bit - 20h
- VALID: DBIT 1
- RECOVERY: DBIT 1
- FECHADO: DBIT 1
- 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 CHAR_L, CHAR_F
- CSEG AT 0H
- JMP RESET
- ;-------------------------------------------------------------------------------------------------
- ; INIT_DEVICE
- ;-------------------------------------------------------------------------------------------------
- PCA_Init:
- MOV PCA0MD, #000h
- RET
- Port_IO_Init:
- MOV XBR1, #040h
- RET
- TIMER_INIT:
- MOV FLSCL, #90H
- MOV CLKSEL, #30H
- RET
- Init_Device:
- lcall PCA_Init
- lcall Port_IO_Init
- LCALL TIMER_INIT
- ret
- ;-------------------------------------------------------------------------------------------------
- ; RESET
- ;-------------------------------------------------------------------------------------------------
- RESET:
- ACALL Init_Device
- SETB KSET ;ATIVAR BOTOES
- SETB KLOAD
- SETB TB
- SETB RECOVERY
- CLR FECHADO
- CLR VALID
- MOV R0, #SEC_KEY
- MOV R1, #USER_KEY
- MOV R3, #0H
- MOV A, #0H
- MOV B, #0H
- MOV ERRO, #0
- MOV STATE, #S_RECOVER
- MOV N_STATE, #S_RECOVER
- JMP STATE_MACHINE
- ;-------------------------------------------------------------------------------------------------
- ; STATE MACHINE
- ;-------------------------------------------------------------------------------------------------
- STATE_MACHINE:
- MOV STATE, N_STATE
- MOV A, STATE
- RL A
- MOV DPTR, #JMP_TABLE
- JMP @A+DPTR
- JMP_TABLE:
- AJMP RECOVER
- AJMP LOCKED
- AJMP OPEN
- AJMP ENCRYPT
- AJMP DESENCRYPT
- AJMP FAIL
- ;-------------------------------------------------------------------------------------------------
- ; STATE RECOVERY + STATE LOCKED ----USAM O MESMO CODIGO
- ;-------------------------------------------------------------------------------------------------
- START: ;aguarda que o utilizador carregue no kset para continuar o programa
- JB KSET, START
- JNB KSET, $
- RET
- RECOVER:
- JMP DISPCHARS
- LOCKED:
- MOV R1, #USER_KEY
- MOV P2, #CHAR_L
- CLR TB
- ACALL START
- ;-------------------------------------------------------------------------------------------------
- ; 8 BIT SEGMENT UPDATE_DISPLAY AND INCREMENT
- ;-------------------------------------------------------------------------------------------------
- DISPCHARS:
- MOV DPTR, #DIGITS_TABLE
- MOV R3, #0H
- UPDATE_DISPLAY:
- MOV A, R3
- MOVC A, @A+DPTR
- MOV P2, A
- JNB FECHADO, BUTTONS
- CLR TB
- BUTTONS:
- JNB KLOAD, LOAD_KEY
- JB KSET, BUTTONS
- INCREMENT:
- JNB KSET, $
- INC R3
- CJNE R3, #10, UPDATE_DISPLAY
- JMP DISPCHARS
- ;-------------------------------------------------------------------------------------------------
- ; SALVAGUARDA O VALOR ESCOLHIDO
- ;-------------------------------------------------------------------------------------------------
- LOAD_KEY:
- MOV A, R3
- MOVX @R1, A
- INC R1
- MOV A, R1
- ANL A, #MASQ_2
- CJNE A, #KEYLEN, DISPCHARS
- AUX:
- JB RECOVERY, RELOAD_KEY
- JNB FECHADO, AUX
- MOV N_STATE, #S_DESENCRYPT
- JMP STATE_MACHINE
- RELOAD_KEY:
- CLR RECOVERY
- MOV N_STATE, #S_ENCRYPT
- JMP STATE_MACHINE
- ;-------------------------------------------------------------------------------------------------
- ; STATE DESENCRYPT
- ;-------------------------------------------------------------------------------------------------
- DESENCRYPT:
- MOV R0, #SEC_KEY
- MOV R1, #USER_KEY
- MOV R3, #0H
- MOV N_STATE, #S_FAIL
- CLR VALID
- DESENCRYPT_LOOP:
- MOV A, @R0
- XRL A, #MASQ
- MOV B, A
- MOVX A, @R1
- CJNE A, B, STATE_MACHINE
- INC R0
- INC R1
- INC R3
- CJNE R3, #KEYLEN, DESENCRYPT_LOOP
- SETB VALID
- SETB TB
- CLR FECHADO
- MOV N_STATE, #S_OPEN
- JMP STATE_MACHINE
- ;-------------------------------------------------------------------------------------------------
- ; STATE ENCRYPT
- ;-------------------------------------------------------------------------------------------------
- ENCRYPT:
- MOV R0, #SEC_KEY
- MOV R1, #USER_KEY
- MOV R3, #0H
- ENCRYPT_LOOP:
- MOVX A, @R1
- XRL A, #MASQ
- MOV @R0, A
- INC R3
- INC R1
- INC R0
- CJNE R3, #KEYLEN, ENCRYPT_LOOP
- MOV N_STATE, #S_LOCKED
- SETB FECHADO
- JMP STATE_MACHINE
- ;-------------------------------------------------------------------------------------------------
- ; STATE FAIL
- ;-------------------------------------------------------------------------------------------------
- FAIL:
- MOV P2, #CHAR_F
- CLR TB ;OU PODEMOS IGNORAR O TB NO CASO DE BLOQUEIO?
- INC ERRO
- ;engodo do timer
- JMP FAIL
- MOV N_STATE, #S_LOCKED
- JMP STATE_MACHINE
- ;-------------------------------------------------------------------------------------------------
- ; STATE OPEN
- ;-------------------------------------------------------------------------------------------------
- OPEN:
- MOV P2, #CHAR_0
- JNB KLOAD, OPEN
- JB KSET, OPEN
- JNB KSET, $
- NEW_PASSWORD:
- CLOSE:
- JNB KLOAD, $
- MOV N_STATE, #S_LOCKED
- JMP STATE_MACHINE
- END
Advertisement
Add Comment
Please, Sign In to add comment