Advertisement
cabeca_de_pica

Untitled

Dec 2nd, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <REG51F380.H>
  2.  
  3. ;-------------------------------------------------------------------------------------------------------------------;
  4. ;CONSTANT DEFINES FOR CHAR_NUM AND CHAR_STATE
  5. ;-------------------------------------------------------------------------------------------------------------------;
  6. CHAR_0          EQU 0C0H                ;DEFINE CHARS FOR 8BITSEG
  7. CHAR_1          EQU 0F9H
  8. CHAR_2          EQU 0A4H
  9. CHAR_3          EQU 0B0H
  10. CHAR_4          EQU 099H
  11. CHAR_5          EQU 092H
  12. CHAR_6          EQU 082H
  13. CHAR_7          EQU 0F8H
  14. CHAR_8          EQU 080H
  15. CHAR_9          EQU 090H
  16.    
  17. CHAR_L EQU 0C7H
  18. CHAR_F EQU 68H
  19. ;-------------------------------------------------------------
  20.  
  21. S_RECOVER EQU 0
  22. S_LOCKED EQU 1
  23. S_OPEN EQU 2
  24. S_ENCRYPT EQU 3
  25. S_DESENCRYPT EQU 4
  26. S_FAIL EQU 5
  27.  
  28. STATE DATA 30H
  29. N_STATE DATA 31H
  30. USER_KEY DATA 32H ;XDATA
  31. SEC_KEY IDATA 50H
  32.  
  33. RECOVERY BIT 1
  34. FECHADO BIT 0
  35. VALID BIT 0
  36.    
  37. MASQ EQU 0A2H
  38. KEYLEN EQU 4
  39. KSET EQU P0.6
  40. KLOAD EQU P0.7
  41. TB EQU P2.7
  42.  
  43.  
  44. CSEG AT 600H        ;caracteres segmento 8bits
  45.     DIGITS_TABLE:
  46.         DB CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6, CHAR_7, CHAR_8, CHAR_9   ;0-9
  47.                
  48. CSEG AT 0H
  49.     JMP RESET
  50. ;-------------------------------------------------------------------------------------------------
  51. ;       INIT_DEVICE
  52. ;-------------------------------------------------------------------------------------------------
  53. PCA_Init:
  54.     MOV  PCA0MD,    #000h
  55.     RET
  56. Port_IO_Init:
  57.     MOV  XBR1,      #040h
  58.     RET
  59. TIMER_INIT:
  60.     MOV FLSCL, #90H
  61.     MOV CLKSEL, #30H
  62.     RET
  63. Init_Device:
  64.     lcall PCA_Init
  65.     lcall Port_IO_Init
  66.     LCALL TIMER_INIT
  67.     ret
  68. ;-------------------------------------------------------------------------------------------------
  69. ;       RESET
  70. ;-------------------------------------------------------------------------------------------------
  71. RESET:
  72.     ACALL Init_Device
  73.     SETB KSET               ;ATIVAR BOTOES
  74.     SETB KLOAD
  75.     SETB TB
  76.     SETB RECOVERY
  77.     CLR FECHADO
  78.     CLR VALID
  79.     MOV R0, #SEC_KEY
  80.     MOV R1, #USER_KEY
  81.     MOV R3, #0H
  82.     MOV A, #0H
  83.     MOV B, #0H
  84.     MOV STATE, #S_RECOVER
  85.     MOV N_STATE, #S_RECOVER
  86.     JMP STATE_MACHINE
  87. ;-------------------------------------------------------------------------------------------------
  88. ;       STATE MACHINE
  89. ;-------------------------------------------------------------------------------------------------
  90. STATE_MACHINE:
  91.     MOV STATE, N_STATE
  92.     MOV A, STATE
  93.     RL A
  94.     MOV DPTR, #JMP_TABLE
  95.     JMP @A+DPTR
  96. JMP_TABLE:
  97.     AJMP RECOVER
  98.     AJMP LOCKED
  99.     AJMP OPEN
  100.     AJMP ENCRYPT
  101.     AJMP DESENCRYPT
  102.     AJMP FAIL
  103.        
  104. ;-------------------------------------------------------------------------------------------------
  105. ;       STATE RECOVERY + STATE LOCKED ----USAM O MESMO CODIGO
  106. ;-------------------------------------------------------------------------------------------------
  107. START:              ;aguarda que o utilizador carregue no kset para continuar o programa
  108.     JB KSET, START
  109.     JNB KSET, $
  110.     RET
  111.    
  112. RECOVER:
  113.     JMP DISPCHARS
  114. LOCKED:
  115.     MOV R1, #USER_KEY
  116.     MOV P2, #CHAR_L
  117.     CLR TB
  118.     ACALL START
  119.  
  120. DISPCHARS:
  121.     MOV DPTR, #DIGITS_TABLE
  122.     MOV R3, #0H
  123. DISPLAYBCD:
  124.     MOV A, R3
  125.     MOVC A, @A+DPTR
  126.     MOV P2, A
  127.     JNB FECHADO, BUTTONS
  128.     CLR TB
  129. BUTTONS:
  130.     JNB KLOAD, SETNUM
  131.     JB KSET, BUTTONS
  132. INCREMENT:
  133.     JNB KSET, $
  134.     INC R3
  135.     CJNE R3, #10, DISPLAYBCD
  136.     MOV R3, #0H
  137.     JMP DISPLAYBCD
  138.  
  139. SETNUM:
  140.     JNB KLOAD, $
  141.     JB RECOVERY, RELOAD_KEY
  142.     JB FECHADO, LOCKED_2
  143.     JMP SETNUM
  144.  
  145. RELOAD_KEY:
  146.     MOV A, R3
  147.     MOV @R1, A
  148.     INC R1
  149.     CJNE R1, #36H, DISPCHARS        ;รจ errado comparar com o endereco de memoria? deveriamos usar r4 para incremento e comparar r4 com keylen?
  150.     CLR RECOVERY
  151.     MOV N_STATE, #S_ENCRYPT
  152.     JMP STATE_MACHINE
  153.    
  154. LOCKED_2:
  155.     MOV A, R3
  156.     MOV @R1, A
  157.     INC R1
  158.     CJNE R1, #36H, DISPCHARS        ;รจ errado comparar com o endereco de memoria? deveriamos usar r4 para incremento e comparar r4 com keylen?
  159.     MOV N_STATE, #S_DESENCRYPT
  160.     JMP STATE_MACHINE
  161.  
  162. ;-------------------------------------------------------------------------------------------------
  163. ;       STATE DESENCRYPT
  164. ;-------------------------------------------------------------------------------------------------
  165. DESENCRYPT:
  166.     MOV R0, #SEC_KEY
  167.     MOV R1, #USER_KEY
  168.     MOV R3, #0H
  169.     MOV N_STATE, #S_FAIL
  170.     CLR VALID
  171. DESENCRYPT_LOOP:
  172.     MOV A, @R0
  173.     MOV B, @R1
  174.     XRL A, #MASQ
  175.     CJNE A, B, STATE_MACHINE
  176.     INC R0
  177.     INC R1
  178.     INC R3
  179.     CJNE R3, #KEYLEN, DESENCRYPT_LOOP
  180.     SETB VALID
  181.     SETB TB
  182.     CLR FECHADO
  183.     MOV N_STATE, #S_OPEN
  184.     JMP STATE_MACHINE
  185.    
  186. ;-------------------------------------------------------------------------------------------------
  187. ;       STATE ENCRYPT
  188. ;-------------------------------------------------------------------------------------------------
  189. ENCRYPT:
  190.     MOV R0, #SEC_KEY
  191.     MOV R1, #USER_KEY
  192.     MOV R3, #0H
  193. ENCRYPT_LOOP:
  194.     MOV A, @R1
  195.     XRL A, #MASQ
  196.     MOV @R0, A
  197.     INC R3
  198.     INC R1
  199.     INC R0
  200.     CJNE R3, #KEYLEN, ENCRYPT_LOOP      ;precisamos checkar o kload(segundo fluxograma)??? ou outra coisa antes de ir para estado locked
  201.     MOV N_STATE, #S_LOCKED
  202.     SETB FECHADO
  203.     JMP STATE_MACHINE
  204.  
  205. ;-------------------------------------------------------------------------------------------------
  206. ;       STATE FAIL
  207. ;-------------------------------------------------------------------------------------------------
  208. FAIL:
  209.     MOV P2, #CHAR_F
  210.     CLR TB                      ;OU PODEMOS IGNORAR O TB NO CASO DE BLOQUEIO?
  211.     ;engodo do timer
  212.     JMP FAIL
  213.     MOV N_STATE, #S_LOCKED
  214.     JMP STATE_MACHINE
  215. ;-------------------------------------------------------------------------------------------------
  216. ;       STATE OPEN
  217. ;-------------------------------------------------------------------------------------------------
  218. OPEN:
  219.     JNB VALID, $
  220.     MOV P2, #CHAR_0
  221.     JNB KLOAD, CLOSE
  222.     JB KSET, OPEN
  223.     JNB KSET, $
  224. NEW_PASSWORD:
  225.    
  226.    
  227. CLOSE:
  228.     JNB KLOAD, $
  229.     MOV N_STATE, #S_LOCKED
  230.     JMP STATE_MACHINE
  231.    
  232. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement