cabeca_de_pica

Untitled

Dec 9th, 2019
796
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 8EH
  19. ;-------------------------------------------------------------------------------------------------------------------;
  20. ;       ESTADOS
  21. ;-------------------------------------------------------------------------------------------------------------------;
  22. S_RECOVER EQU 0
  23. S_LOCKED EQU 1
  24. S_OPEN EQU 2
  25. S_ENCRYPT EQU 3
  26. S_DESENCRYPT EQU 4
  27. S_FAIL EQU 5
  28.  
  29. MASQ EQU 0A2H
  30. MASQ_2 EQU 0FH
  31. KEYLEN EQU 4
  32. ERRO EQU 0
  33. ;-------------------------------------------------------------------------------------------------
  34. ;       HARDWARE ASSIGNMENTS
  35. ;-------------------------------------------------------------------------------------------------
  36. KSET EQU P0.6
  37. KLOAD EQU P0.7
  38. TB EQU P2.7
  39. ;-------------------------------------------------------------------------------------------------
  40. ;       VARIABLES
  41. ;-------------------------------------------------------------------------------------------------
  42. USER_KEY XDATA 70H
  43. SEC_KEY IDATA 60H
  44.    
  45. DSEG AT 40H
  46.     STATE: DS 1
  47.     N_STATE: DS 1
  48.    
  49. BSEG AT 0H      ;comeca na area enderecavel ao bit - 20h
  50.     VALID: DBIT 1
  51.     RECOVERY: DBIT 1
  52.     FECHADO: DBIT 1
  53.  
  54. CSEG AT 600H        ;caracteres segmento 8bits
  55.     DIGITS_TABLE:
  56.         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
  57.                
  58. CSEG AT 0H
  59.     JMP RESET
  60. ;-------------------------------------------------------------------------------------------------
  61. ;       INIT_DEVICE
  62. ;-------------------------------------------------------------------------------------------------
  63. PCA_Init:
  64.     MOV  PCA0MD,    #000h
  65.     RET
  66. Port_IO_Init:
  67.     MOV  XBR1,      #040h
  68.     RET
  69. TIMER_INIT:
  70.     MOV FLSCL, #90H
  71.     MOV CLKSEL, #30H
  72.     RET
  73. Init_Device:
  74.     lcall PCA_Init
  75.     lcall Port_IO_Init
  76.     LCALL TIMER_INIT
  77.     ret
  78. ;-------------------------------------------------------------------------------------------------
  79. ;       RESET
  80. ;-------------------------------------------------------------------------------------------------
  81. RESET:
  82.     ACALL Init_Device
  83.     SETB KSET               ;ATIVAR BOTOES
  84.     SETB KLOAD
  85.     SETB TB
  86.     SETB RECOVERY
  87.     CLR FECHADO
  88.     CLR VALID
  89.     MOV R0, #SEC_KEY
  90.     MOV R1, #USER_KEY
  91.     MOV R3, #0H
  92.     MOV A, #0H
  93.     MOV B, #0H
  94.     MOV ERRO, #0
  95.     MOV STATE, #S_RECOVER
  96.     MOV N_STATE, #S_RECOVER
  97.     JMP STATE_MACHINE
  98. ;-------------------------------------------------------------------------------------------------
  99. ;       STATE MACHINE
  100. ;-------------------------------------------------------------------------------------------------
  101. STATE_MACHINE:
  102.     MOV STATE, N_STATE
  103.     MOV A, STATE
  104.     RL A
  105.     MOV DPTR, #JMP_TABLE
  106.     JMP @A+DPTR
  107. JMP_TABLE:
  108.     AJMP RECOVER
  109.     AJMP LOCKED
  110.     AJMP OPEN
  111.     AJMP ENCRYPT
  112.     AJMP DESENCRYPT
  113.     AJMP FAIL
  114.        
  115. ;-------------------------------------------------------------------------------------------------
  116. ;       STATE RECOVERY + STATE LOCKED ----USAM O MESMO CODIGO
  117. ;-------------------------------------------------------------------------------------------------
  118. START:              ;aguarda que o utilizador carregue no kset para continuar o programa
  119.     JB KSET, START
  120.     JNB KSET, $
  121.     RET
  122.    
  123. RECOVER:
  124.     JMP DISPCHARS
  125. LOCKED:
  126.     MOV R1, #USER_KEY
  127.     MOV P2, #CHAR_L
  128.     CLR TB
  129.     ACALL START
  130.  
  131. ;-------------------------------------------------------------------------------------------------
  132. ;       8 BIT SEGMENT UPDATE_DISPLAY AND INCREMENT
  133. ;-------------------------------------------------------------------------------------------------
  134. DISPCHARS:
  135.     MOV DPTR, #DIGITS_TABLE
  136.     MOV R3, #0H
  137. UPDATE_DISPLAY:
  138.     MOV A, R3
  139.     MOVC A, @A+DPTR
  140.     MOV P2, A
  141.     JNB FECHADO, BUTTONS
  142.     CLR TB
  143. BUTTONS:
  144.     JNB KLOAD, LOAD_KEY
  145.     JB KSET, BUTTONS
  146. INCREMENT:
  147.     JNB KSET, $
  148.     INC R3
  149.     CJNE R3, #10, UPDATE_DISPLAY
  150.     JMP DISPCHARS
  151.    
  152. ;-------------------------------------------------------------------------------------------------
  153. ;       SALVAGUARDA O VALOR ESCOLHIDO
  154. ;-------------------------------------------------------------------------------------------------
  155. LOAD_KEY:
  156.     MOV A, R3
  157.     MOVX @R1, A
  158.     INC R1
  159.     MOV A, R1
  160.     ANL A, #MASQ_2
  161.     CJNE A, #KEYLEN, DISPCHARS
  162. AUX:   
  163.     JB RECOVERY, RELOAD_KEY
  164.     JNB FECHADO, AUX
  165.     MOV N_STATE, #S_DESENCRYPT
  166.     JMP STATE_MACHINE
  167.    
  168. RELOAD_KEY:
  169.     CLR RECOVERY
  170.     MOV N_STATE, #S_ENCRYPT
  171.     JMP STATE_MACHINE
  172.  
  173. ;-------------------------------------------------------------------------------------------------
  174. ;       STATE DESENCRYPT
  175. ;-------------------------------------------------------------------------------------------------
  176. DESENCRYPT:
  177.     MOV R0, #SEC_KEY
  178.     MOV R1, #USER_KEY
  179.     MOV R3, #0H
  180.     MOV N_STATE, #S_FAIL
  181.     CLR VALID
  182. DESENCRYPT_LOOP:
  183.     MOV A, @R0
  184.     XRL A, #MASQ
  185.     MOV B, A
  186.     MOVX A, @R1
  187.     CJNE A, B, STATE_MACHINE
  188.     INC R0
  189.     INC R1
  190.     INC R3
  191.     CJNE R3, #KEYLEN, DESENCRYPT_LOOP
  192.     SETB VALID
  193.     SETB TB
  194.     CLR FECHADO
  195.     MOV N_STATE, #S_OPEN
  196.     JMP STATE_MACHINE
  197.    
  198. ;-------------------------------------------------------------------------------------------------
  199. ;       STATE ENCRYPT
  200. ;-------------------------------------------------------------------------------------------------
  201. ENCRYPT:
  202.     MOV R0, #SEC_KEY
  203.     MOV R1, #USER_KEY
  204.     MOV R3, #0H
  205. ENCRYPT_LOOP:
  206.     MOVX A, @R1
  207.     XRL A, #MASQ
  208.     MOV @R0, A
  209.     INC R3
  210.     INC R1
  211.     INC R0
  212.     CJNE R3, #KEYLEN, ENCRYPT_LOOP
  213.     MOV N_STATE, #S_LOCKED
  214.     SETB FECHADO
  215.     JMP STATE_MACHINE
  216.  
  217. ;-------------------------------------------------------------------------------------------------
  218. ;       STATE FAIL
  219. ;-------------------------------------------------------------------------------------------------
  220. FAIL:
  221.     MOV P2, #CHAR_F
  222.     CLR TB      ;OU PODEMOS IGNORAR O TB NO CASO DE BLOQUEIO?
  223.     INC ERRO
  224.     ;engodo do timer
  225.     JMP FAIL
  226.    
  227.     MOV N_STATE, #S_LOCKED
  228.     JMP STATE_MACHINE
  229. ;-------------------------------------------------------------------------------------------------
  230. ;       STATE OPEN
  231. ;-------------------------------------------------------------------------------------------------
  232. OPEN:
  233.     MOV P2, #CHAR_0
  234.     JNB KLOAD, OPEN
  235.     JB KSET, OPEN
  236.     JNB KSET, $
  237.    
  238. NEW_PASSWORD:
  239.  
  240. CLOSE:
  241.     JNB KLOAD, $
  242.     MOV N_STATE, #S_LOCKED
  243.     JMP STATE_MACHINE
  244.    
  245. END
Advertisement
Add Comment
Please, Sign In to add comment