Advertisement
neivada19

Untitled

Dec 16th, 2019
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <REG51F380.H>          ;INCLUDE
  2.  
  3. ;-------------------------------------------------------------------------------------------------------------------;
  4.  
  5. ;CONSTANT DEFINES FOR CHAR_NUM AND CHAR_STATE
  6.  
  7. ;-------------------------------------------------------------------------------------------------------------------;
  8. CHAR_0          EQU 0C0H                ;DEFINE NUMBERS
  9. CHAR_1          EQU 0F9H
  10. CHAR_2          EQU 0A4H
  11. CHAR_3          EQU 0B0H
  12. CHAR_4          EQU 099H
  13. CHAR_5          EQU 092H
  14. CHAR_6          EQU 082H
  15. CHAR_7          EQU 0F8H
  16. CHAR_8          EQU 080H
  17. CHAR_9          EQU 090H
  18. CHAR_a          EQU 088H
  19. CHAR_b          EQU 083H
  20. CHAR_c          EQU 0C6H
  21. CHAR_d          EQU 0A1H
  22. CHAR_e          EQU 086H
  23. CHAR_f          EQU 08EH
  24.    
  25. CHAR_LOCKED     EQU 0C7h        ;DEFINE CHARACTERS
  26. CHAR_FAIL       EQU 08Eh
  27. CHAR_OPEN       EQU 023h
  28. CHAR_BLOCKED    EQU 083h
  29.    
  30. ;-------------------------------------------------------------------------------------------------------------------;
  31.  
  32. ;OTHER DEFINES
  33.  
  34. ;-------------------------------------------------------------------------------------------------------------------;
  35. VTIME           EQU (-50000)    ;THIS TIMES 250(us) = 12.5 seconds (led blinking in blocked)
  36. INITIAL_ATTEMPT EQU 1           ;RESET_TENTATIVAS  
  37. KEY_LEN         EQU 4           ;DEFAULT KEY LENGHT
  38. MAX_TENT        EQU 5           ;MAXIMUM OF TRIES
  39. STACK_FRAME     EQU 0A0H        ;PLACE WHERE SP POINTS TO
  40. ;-------------------------------------------------------------------------------------------------------------------;
  41.  
  42. ;STATES
  43.  
  44. ;-------------------------------------------------------------------------------------------------------------------;
  45. S_LOCKED        EQU 0           ;ESTADOS-CORRESPONDEM A VALORES NUMERICOS
  46. S_DECRYPT       EQU 1
  47. S_FAIL          EQU 2
  48. S_BLOCKED       EQU 3
  49. S_OPEN          EQU 4
  50. S_ENCRYPT       EQU 5
  51. S_ERROR         EQU 6
  52.  
  53. ;-------------------------------------------------------------------------------------------------------------------;
  54.  
  55. ;FLAGS
  56.  
  57. ;-------------------------------------------------------------------------------------------------------------------;  
  58. F_SET           BIT 0H          ;DECLARE FLAGS
  59. WRONG           BIT 1H
  60. FT_DEC          BIT 2H
  61. FT_ENC          BIT 3H
  62. EXHAUST         BIT 4H         
  63. FTOOGLE_SLOW    BIT 5H 
  64. ;-------------------------------------------------------------------------------------------------------------------;
  65.  
  66. ;VARIABLES
  67.  
  68. ;-------------------------------------------------------------------------------------------------------------------;
  69. STATE           DATA   030H     ;DECLARE STATE AND NSTATE
  70. NSTATE          DATA   032H
  71.  
  72. COUNT_B0        DATA   033H
  73. COUNT_B1        DATA   034H
  74.    
  75. COUNT_O0        DATA   035H
  76. COUNT_O1        DATA   036H
  77. COUNT_O2        DATA   037H
  78.    
  79. BLINK7L         DATA   038H
  80. BLINK7H         DATA   039H
  81.  
  82. COUNT_F0        DATA   040H
  83. COUNT_F1        DATA   041H
  84. COUNT_F2        DATA   042H
  85.    
  86. INDEX           DATA   050H
  87. COUNT           DATA   051H
  88. LED_BAR         DATA   053H
  89. TENTATIVAS      DATA   054H
  90. INDEX_CODE      DATA   055H
  91.        
  92. BYTE0           DATA   056H
  93. BYTE1           DATA   057H
  94. BYTE2           DATA   058H
  95. BYTE3           DATA   059H
  96.  
  97. USER_KEY        DATA   060H     ;KEYS
  98. SEC_KEY         IDATA  080H    
  99.    
  100. ;-------------------------------------------------------------------------------------------------------------------;
  101.  
  102. ;HARDWARE ASSIGNMENTS
  103.  
  104. ;-------------------------------------------------------------------------------------------------------------------;
  105. OUTPORT         EQU     P3             
  106. TB              EQU     P3.4
  107. K_LOAD          EQU     P0.6           
  108. K_SET           EQU     P0.7
  109. LED_PIN         EQU     P2.7
  110. BUZZER_PIN      EQU     P3.5
  111. HW_FLAG         EQU     P1.0
  112.    
  113. ;-------------------------------------------------------------------------------------------------------------------;
  114.  
  115. ;EXTERN CODE
  116.  
  117. ;-------------------------------------------------------------------------------------------------------------------;
  118. EXTRN CODE (INIT_XBARE)
  119. EXTRN CODE (CONFIG_TIMERS)
  120. EXTRN CODE (OSCILLATOR_INIT)
  121.  
  122. ;-------------------------------------------------------------------------------------------------------------------;
  123.  
  124. ;BOXES: FORWARD_SUBSTITUTION_BOX
  125.  
  126. ;-------------------------------------------------------------------------------------------------------------------;
  127. CSEG AT 1500H
  128.  
  129. FS_BOX:
  130. DB 63h, 7ch, 77h, 7bh, 0f2h, 6bh, 6fh, 0c5h, 30h, 01h, 67h, 2bh, 0feh, 0d7h, 0abh, 76h
  131. DB 0cah, 82h, 0c9h, 7dh, 0fah, 59h, 47h, 0f0h, 0adh, 0d4h, 0a2h, 0afh, 9ch, 0a4h, 72h, 0c0h
  132. DB 0b7h, 0fdh, 93h, 26h, 36h, 3fh, 0f7h, 0cch, 34h, 0a5h, 0e5h, 0f1h, 71h, 0d8h, 31h, 15h
  133. DB 04h, 0c7h, 23h, 0c3h, 18h, 96h, 05h, 9ah, 07h, 12h, 80h, 0e2h, 0ebh, 27h, 0b2h, 75h
  134. DB 09h, 83h, 2ch, 1ah, 1bh, 6eh, 5ah, 0a0h, 52h, 3bh, 0d6h, 0b3h, 29h, 0e3h, 2fh, 84h
  135. DB 53h, 0d1h, 00h, 0edh, 20h, 0fch, 0b1h, 5bh, 6ah, 0cbh, 0beh, 39h, 4ah, 4ch, 58h, 0cfh
  136. DB 0d0h, 0efh, 0aah, 0fbh, 43h, 4dh, 33h, 85h, 45h, 0f9h, 02h, 7fh, 50h, 3ch, 9fh, 0a8h
  137. DB 51h, 0a3h, 40h, 8fh, 92h, 9dh, 38h, 0f5h, 0bch, 0b6h, 0dah, 21h, 10h, 0ffh, 0f3h, 0d2h
  138. DB 0cdh, 0ch, 13h, 0ech, 5fh, 97h, 44h, 17h, 0c4h, 0a7h, 7eh, 3dh, 64h, 5dh, 19h, 73h
  139. DB 60h, 81h, 4fh, 0dch, 22h, 2ah, 90h, 88h, 46h, 0eeh, 0b8h, 14h, 0deh, 5eh, 0bh, 0dbh
  140. DB 0e0h, 32h, 3ah, 0ah, 49h, 06h, 24h, 5ch, 0c2h, 0d3h, 0ach, 62h, 91h, 95h, 0e4h, 79h
  141. DB 0e7h, 0c8h, 37h, 6dh, 8dh, 0d5h, 4eh, 0a9h, 6ch, 56h, 0f4h, 0eah, 65h, 7ah, 0aeh, 08h
  142. DB 0bah, 78h, 25h, 2eh, 1ch, 0a6h, 0b4h, 0c6h, 0e8h, 0ddh, 74h, 1fh, 4bh, 0bdh, 8bh, 8ah
  143. DB 70h, 3eh, 0b5h, 66h, 48h, 03h, 0f6h, 0eh, 61h, 35h, 57h, 0b9h, 86h, 0c1h, 1dh, 9eh
  144. DB 0e1h, 0f8h, 98h, 11h, 69h, 0d9h, 8eh, 94h, 9bh, 1eh, 87h, 0e9h, 0ceh, 55h, 28h, 0dfh
  145. DB 8ch, 0a1h, 89h, 0dh, 0bfh, 0e6h, 42h, 68h, 41h, 99h, 2dh, 0fh, 0b0h, 54h, 0bbh, 16h
  146.  
  147.  
  148. CSEG AT 0H          //RESPOSTA AO RESET
  149. LJMP MAIN          
  150.  
  151. ;-------------------------------------------------------------------------------------------------------------------;
  152.  
  153. ;ISR
  154.  
  155. ;-------------------------------------------------------------------------------------------------------------------;
  156.  
  157. CSEG AT 0bh
  158.     LJMP ISR_T0
  159.  
  160. CSEG AT 100H
  161.  
  162. ISR_T0:
  163.     PUSH PSW            ;STORE PSW
  164.     PUSH ACC            ;STORE ACC
  165.    
  166. ENCODE_IFSM:                   
  167.     MOV DPTR, #ITABLE_FSM
  168.     MOV A, STATE
  169.     RL  A
  170.     JMP @A+DPTR
  171.    
  172. ITABLE_FSM:
  173.     AJMP INT_LOCKED
  174.     AJMP INT_DECRYPT
  175.     AJMP INT_FAIL
  176.     AJMP INT_BLOCKED
  177.     AJMP INT_OPEN
  178.     AJMP INT_ENCRYPT
  179.     AJMP INT_ERROR
  180.    
  181. INT_LOCKED:    
  182. RETI
  183.    
  184. INT_DECRYPT:   
  185. RETI
  186.    
  187. INT_FAIL:
  188.     CLR C
  189.     MOV A,COUNT_F0
  190.     ADD A,#1
  191.     MOV COUNT_F0,A
  192.     MOV A,COUNT_F1
  193.     ADDC A,#0
  194.     MOV COUNT_F1,A
  195.     MOV A,COUNT_F2
  196.     ADDC A,#0
  197.     MOV COUNT_F2,
  198.     JC TIME_OUT_T0_FAIL
  199.     POP ACC  
  200.     POP PSW  
  201. RETI       
  202.    
  203. INT_BLOCKED:
  204.     CPL BUZZER_PIN
  205.     SETB RS0            ;SWITCH TO BANK 1
  206.     CLR C
  207.     MOV A,COUNT_B0
  208.     ADD A,#1
  209.     MOV COUNT_B0,A
  210.     MOV A,COUNT_B1
  211.     ADDC A,#0
  212.     MOV COUNT_B1,A
  213.     JC  TIME_OUT_T0_BLOCKED
  214.     POP ACC  
  215.     POP PSW  
  216. RETI
  217.  
  218. INT_OPEN:
  219.     SETB RS0           
  220.     CLR C
  221.     MOV A,COUNT_O0
  222.     ADD A,#1
  223.     MOV COUNT_O0,A
  224.     MOV A,COUNT_O1
  225.     ADDC A,#0
  226.     MOV COUNT_O1,A
  227.     MOV A,COUNT_O2
  228.     ADDC A,#0
  229.     MOV COUNT_O2,A
  230.     JC  TIME_OUT_T0_OPEN
  231.     MOV A,BLINK7L
  232.     ADD A,#1
  233.     MOV BLINK7L,A
  234.     MOV A,BLINK7H
  235.     ADDC A,#0
  236.     MOV BLINK7H,A
  237.     JNC END_INT
  238.     ACALL RELOAD_OPEN_BLINK
  239.     CPL P2.7
  240. END_INT:
  241.     POP ACC  
  242.     POP PSW
  243. RETI
  244.        
  245. INT_ENCRYPT:    
  246. RETI
  247.    
  248. INT_ERROR:  
  249. RETI
  250.    
  251. TIME_OUT_T0_FAIL:      
  252.     ACALL RELOAD_FAIL
  253.     DJNZ R4, END1CYCLE
  254.     SETB EXHAUST
  255.     INC R0 ;R0 AT BANK 1
  256.     CLR EA
  257. END1CYCLE:
  258.     POP ACC  
  259.     POP PSW
  260. RETI   
  261.  
  262. TIME_OUT_T0_OPEN:      
  263.     ACALL RELOAD_OPEN_WAIT
  264.     SETB EXHAUST
  265.     INC R0 ;R0 AT BANK 1
  266.     CLR EA
  267.     POP ACC  
  268.     POP PSW
  269. RETI   
  270.        
  271. TIME_OUT_T0_BLOCKED:       
  272.     ACALL RELOAD_BLOCKED
  273.     SETB FTOOGLE_SLOW
  274.     INC R0 ;R0 AT BANK 1
  275.     POP ACC  
  276.     POP PSW
  277. RETI
  278.  
  279. ;-------------------------------------------------------------------------------------------------------------------;
  280.  
  281. ;RELOAD_TIMES
  282.  
  283. ;-------------------------------------------------------------------------------------------------------------------;  
  284. RELOAD_OPEN_WAIT:
  285.     MOV COUNT_O0,#040H
  286.     MOV COUNT_O1,#02BH
  287.     MOV COUNT_O2,#0FEH
  288. RET
  289.  
  290. RELOAD_OPEN_BLINK:
  291.     MOV BLINK7L, #030H
  292.     MOV BLINK7H, #0F8H
  293. RET
  294.  
  295. RELOAD_BLOCKED:
  296.     MOV COUNT_B0,#LOW(VTIME)
  297.     MOV COUNT_B1,#HIGH(VTIME)
  298. RET
  299.  
  300. RELOAD_FAIL:
  301.     MOV COUNT_F0,#040H
  302.     MOV COUNT_F1,#02BH
  303.     MOV COUNT_F2,#0FEH
  304. RET
  305.  
  306. ;-------------------------------------------------------------------------------------------------------------------;
  307.  
  308. ;INIT_VAR
  309.  
  310. ;-------------------------------------------------------------------------------------------------------------------;  
  311. INIT_VAR:  
  312.     MOV LED_BAR, #00H
  313.     MOV OUTPORT, #00H
  314.     MOV TENTATIVAS, #INITIAL_ATTEMPT   
  315. RET
  316.  
  317. ;-------------------------------------------------------------------------------------------------------------------;
  318.  
  319. ;INIT_FLAGS_BUTTONS
  320.  
  321. ;-------------------------------------------------------------------------------------------------------------------;
  322. INIT_FLAGS_BUTTONS:
  323.     SETB K_LOAD             //ATIVAR LOAD
  324.     SETB K_SET              //ATIVAR SET
  325.     CLR  F_SET              //limpar flag_set
  326.     SETB HW_FLAG            //ativar/limpar hwflag
  327.     CLR  EXHAUST            //exhaust block
  328.     RET
  329.  
  330. ;-------------------------------------------------------------------------------------------------------------------;
  331.  
  332. ;WAIT_INPUT
  333.  
  334. ;-------------------------------------------------------------------------------------------------------------------;
  335. WAIT_LOAD:
  336.     JB K_LOAD, $
  337.     JNB K_LOAD, $
  338. RET    
  339.  
  340. ;-------------------------------------------------------------------------------------------------------------------;
  341.  
  342. ;MAIN
  343.  
  344. ;-------------------------------------------------------------------------------------------------------------------;
  345. MAIN:
  346.     MOV SP, #0A0H
  347.     ACALL CONFIG_TIMERS
  348.     ACALL OSCILLATOR_INIT
  349.     ACALL INIT_XBARE
  350.     ACALL INIT_VAR
  351.     ACALL INIT_FLAGS_BUTTONS
  352.     ACALL RELOAD_OPEN_WAIT
  353.     ACALL RELOAD_OPEN_BLINK
  354.     ACALL RELOAD_BLOCKED
  355.     ACALL RELOAD_FAIL
  356.     JNB  HW_FLAG, RELOAD
  357.  
  358. ;-------------------------------------------------------------------------------------------------------------------;
  359.  
  360. ;COMP SIZE: WARMSTART-> SIZE = 4, COLDSTART-> SIZE !=4
  361.  
  362. ;-------------------------------------------------------------------------------------------------------------------;  
  363. COMP_SIZE:
  364.     MOV R1,#SEC_KEY
  365.     MOV A, @R1
  366.     CLR C
  367.     SUBB A, #KEY_LEN
  368.     JNZ COLDSTART
  369.    
  370. WARMSTART:
  371.     JMP MLOOP
  372.    
  373. COLDSTART:
  374.     MOV STATE, #S_ERROR
  375.     MOV NSTATE, #S_ERROR
  376.     MOV R1,#SEC_KEY
  377.     MOV @R1,#0
  378.     JMP MLOOP
  379.    
  380. ;-------------------------------------------------------------------------------------------------------------------;
  381.  
  382. ;RELOAD SEC_KEY, HW_FLAG = 1
  383.  
  384. ;-------------------------------------------------------------------------------------------------------------------;; 
  385. RELOAD:
  386.     MOV R1, #SEC_KEY       
  387.     MOV @R1, #00H
  388.     MOV INDEX_CODE, #CHAR_1
  389.     ACALL ENCRYPTION
  390.     ACALL INSERT_SEC_KEY
  391.     MOV INDEX_CODE, #CHAR_0
  392.     ACALL ENCRYPTION
  393.     ACALL INSERT_SEC_KEY
  394.     MOV INDEX_CODE, #CHAR_0
  395.     ACALL ENCRYPTION
  396.     ACALL INSERT_SEC_KEY
  397.     MOV INDEX_CODE, #CHAR_0
  398.     ACALL ENCRYPTION
  399.     ACALL INSERT_SEC_KEY
  400.    
  401.     MOV STATE, #S_LOCKED
  402.     MOV NSTATE, #S_LOCKED
  403.    
  404. MLOOP:
  405.     ACALL ENCODE_FSM
  406.     MOV STATE, NSTATE
  407.     JMP MLOOP
  408.    
  409. KEY_LOOP:  
  410.     JNB K_SET, FLX_SET
  411.     JB K_LOAD, KEY_LOOP
  412.     JNB K_LOAD, FLX_LOAD
  413.    
  414.        
  415. ;-------------------------------------------------------------------------------------------------------------------;
  416.  
  417. ;FLOW: LOAD, SET
  418.  
  419. ;-------------------------------------------------------------------------------------------------------------------;
  420. FLX_LOAD:
  421.     JNB K_LOAD, $
  422.     CLR F_SET
  423.     RET
  424.  
  425. FLX_SET:
  426.     JNB K_SET, $
  427.     SETB F_SET 
  428.     RET
  429.  
  430. ;-------------------------------------------------------------------------------------------------------------------;
  431.  
  432. ;JUMP_TABLE
  433.  
  434. ;-------------------------------------------------------------------------------------------------------------------;
  435. ENCODE_FSM:                
  436.     MOV DPTR, #TABLE_FSM
  437.     MOV A, STATE
  438.     RL  A
  439.     JMP @A+DPTR
  440.    
  441. TABLE_FSM:
  442.     AJMP CODE_LOCKED
  443.     AJMP CODE_DECRYPT
  444.     AJMP CODE_FAIL
  445.     AJMP CODE_BLOCKED
  446.     AJMP CODE_OPEN
  447.     AJMP CODE_ENCRYPT
  448.     AJMP CODE_ERROR
  449.  
  450. ;-------------------------------------------------------------------------------------------------------------------;
  451.  
  452. ;STATES
  453.  
  454. ;-------------------------------------------------------------------------------------------------------------------;
  455. CODE_LOCKED:
  456.     MOV P2, #CHAR_LOCKED
  457.     CLR TB
  458.     ACALL WAIT_LOAD
  459.     SETB FT_DEC
  460.     ;MOV INDEX, #00H
  461.     MOV NSTATE, #S_DECRYPT
  462.     CLR F_SET
  463. RET
  464.  
  465. ;-------------------------------------------------------------------------------------------------------------------;
  466. CODE_DECRYPT:
  467.     JB FT_DEC, FIRSTIME
  468.     ACALL KEY_LOOP
  469.     JB F_SET, INC_INDEX    
  470.     JNB F_SET, LOAD_PRESSED
  471.    
  472.     FIRSTIME:
  473.     CLR FT_DEC
  474.     MOV LED_BAR, #00H
  475.     ACALL RESET_INDEX
  476.     MOV P2, #CHAR_0
  477.     MOV R0, #USER_KEY
  478.     MOV @R0, #00H
  479.     JMP CODE_DECRYPT
  480.    
  481.     LOAD_PRESSED:
  482.     MOV P2, #CHAR_0
  483.     ACALL ENCRYPTION
  484.     ACALL RESET_INDEX
  485.     ACALL INSERT_USER_KEY
  486.     ACALL UPDATE_LEDS
  487.     ACALL CHECK_SIZE
  488.     JZ COMPARE
  489.     JMP CODE_DECRYPT
  490.    
  491.     INC_INDEX:
  492.         CLR F_SET
  493.         INC INDEX
  494.         ANL INDEX, #0FH
  495.         JMP PRINT
  496.    
  497.     CHECK_SIZE:
  498.         CLR C
  499.         MOV A, #KEY_LEN
  500.         SUBB A, @R0
  501.     RET
  502.    
  503.     COMPARE:
  504.         ACALL COMP_KEY
  505.         JMP ENCODE_FSM
  506.        
  507.     PRINT:
  508.         ACALL UPDATE_DISP
  509.         MOV NSTATE, #S_DECRYPT
  510.         RET
  511.  
  512. ;-------------------------------------------------------------------------------------------------------------------;
  513. CODE_FAIL:
  514.     USING 0
  515.     MOV P2, #CHAR_FAIL
  516.     CLR TB
  517.     MOV 4, TENTATIVAS
  518.     MOV A, TENTATIVAS
  519.     CLR C
  520.     SUBB A, #05H
  521.     CLR C
  522.     JZ ST_BLOCKED
  523.     SETB EA
  524.     SETB TR0
  525.     JNB EXHAUST, $
  526.     CLR TR0
  527.     ACALL LOCKED_FAIL
  528. RET
  529.  
  530. ST_BLOCKED:
  531.     MOV NSTATE, #S_BLOCKED
  532. RET
  533.  
  534. LOCKED_FAIL:
  535.     CLR EXHAUST
  536.     INC TENTATIVAS            
  537.     MOV NSTATE, #S_LOCKED  
  538. RET
  539.  
  540. ;-------------------------------------------------------------------------------------------------------------------;
  541. CODE_BLOCKED:
  542.     MOV P2, #CHAR_BLOCKED
  543.     MOV TENTATIVAS, #INITIAL_ATTEMPT
  544.     CLR TB
  545.     CLR EA
  546.     CLR FTOOGLE_SLOW
  547.     SETB EA
  548.     SETB TR0
  549.     B_LOOP:
  550.         JNB FTOOGLE_SLOW,$
  551.         CPL LED_PIN
  552.         CLR EA
  553.         CLR FTOOGLE_SLOW       
  554.         SETB EA
  555.         SJMP B_LOOP
  556.  
  557. ;-------------------------------------------------------------------------------------------------------------------;
  558. CODE_OPEN:
  559.     MOV P2, #CHAR_OPEN
  560.     SETB TB
  561.     SETB FT_ENC
  562.     MOV TENTATIVAS, #INITIAL_ATTEMPT
  563.     MOV NSTATE, #S_ENCRYPT
  564.     SETB EA
  565.     SETB TR0
  566.     ACALL KEY_LOOP
  567.     JNB F_SET, KLOAD_PR
  568.     CLR F_SET
  569.     SETB EXHAUST
  570.    
  571.     KLOAD_PR:  
  572.         CLR TR0
  573. RET
  574.    
  575. ;-------------------------------------------------------------------------------------------------------------------;
  576. CODE_ENCRYPT:
  577.     JB FT_ENC, FIRSTIME_ENC
  578.     ACALL KEY_LOOP
  579.     JB F_SET, INC_INDEX_ENC    
  580.     JNB F_SET, LOAD_PRESSED_ENC
  581.    
  582.     FIRSTIME_ENC:
  583.         JNB EXHAUST, LOCKING
  584.         CLR EXHAUST
  585.         CLR FT_ENC
  586.         MOV LED_BAR, #00H
  587.         ACALL RESET_INDEX
  588.         MOV P2, #CHAR_0
  589.         MOV R1, #SEC_KEY
  590.         MOV @R1, #00H
  591.         JMP CODE_ENCRYPT
  592.        
  593.     LOAD_PRESSED_ENC:
  594.         MOV P2, #CHAR_0
  595.         ACALL ENCRYPTION
  596.         ACALL RESET_INDEX
  597.         ACALL INSERT_SEC_KEY
  598.         ACALL UPDATE_LEDS
  599.         ACALL CHECK_SIZE_ENC
  600.         JZ    LOCKING
  601.         JMP   CODE_ENCRYPT
  602.    
  603.     INC_INDEX_ENC:
  604.         CLR F_SET
  605.         INC INDEX
  606.         ANL INDEX, #0FH
  607.         JMP PRINT_ENC
  608.    
  609.     CHECK_SIZE_ENC:
  610.         CLR C
  611.         MOV A, #KEY_LEN
  612.         SUBB A, @R1
  613.     RET
  614.    
  615.     LOCKING:
  616.         MOV NSTATE, #S_LOCKED
  617.     RET
  618.        
  619.     PRINT_ENC:
  620.         ACALL UPDATE_DISP
  621.         MOV NSTATE, #S_ENCRYPT
  622.     RET
  623.  
  624. ;-------------------------------------------------------------------------------------------------------------------;
  625. CODE_ERROR:
  626.     MOV P2, #CHAR_e
  627.     CLR TB
  628.     CLR F_SET
  629.     ACALL WAIT_LOAD
  630. RET
  631.  
  632. ;-------------------------------------------------------------------------------------------------------------------;
  633.  
  634. ;INSERT_SEC_KEY
  635.  
  636. ;-------------------------------------------------------------------------------------------------------------------;
  637. INSERT_SEC_KEY:
  638.     ;R1 APONTA PARA SEC KEY EM I:
  639.     ;R6 PASSAGEM DE PARAMETRO
  640.     USING 0
  641.     PUSH AR1   
  642.     INC @R1
  643.     MOV A, R1
  644.     ADD A, @R1
  645.     MOV R1, A
  646.     MOV @R1, 6
  647.     POP AR1
  648. RET
  649.  
  650. ;-------------------------------------------------------------------------------------------------------------------;
  651.  
  652. ;INSERT_USER_KEY
  653.  
  654. ;-------------------------------------------------------------------------------------------------------------------;
  655. INSERT_USER_KEY:
  656.     ;R0 APONTA PARA USER KEY EM D:
  657.     ;R7 PASSAGEM DE PARAMETROS
  658.     USING 0
  659.     PUSH AR0
  660.     INC @R0
  661.     MOV A, R0
  662.     ADD A, @R0
  663.     MOV R0, A
  664.     MOV @R0, 7
  665.     POP AR0
  666. RET
  667.  
  668. ;-------------------------------------------------------------------------------------------------------------------;
  669.  
  670. ;UPDATE_LEDS
  671.  
  672. ;-------------------------------------------------------------------------------------------------------------------;
  673. UPDATE_LEDS:
  674.     MOV A, LED_BAR
  675.     RL A
  676.     ORL A,#1
  677.     MOV LED_BAR, A
  678.     MOV OUTPORT, A
  679. RET
  680.  
  681. ;-------------------------------------------------------------------------------------------------------------------;
  682.  
  683. ;ENCRYPTION: WORKS WITH BOTH R6 AND R7
  684.  
  685. ;-------------------------------------------------------------------------------------------------------------------;
  686. ENCRYPTION:
  687.     MOV DPTR, #FS_BOX
  688.     MOV A, INDEX_CODE
  689.     MOVC A, @A+DPTR
  690.     MOV R6, A
  691.     MOV R7, A
  692. RET
  693.  
  694. ;-------------------------------------------------------------------------------------------------------------------;
  695.  
  696. ;RESET_INDEX: CLEAR INDEX AND INDEX_CODE
  697.  
  698. ;-------------------------------------------------------------------------------------------------------------------;
  699. RESET_INDEX:
  700.     MOV INDEX, #00H
  701.     MOV INDEX_CODE, #CHAR_0
  702. RET
  703.  
  704. ;-------------------------------------------------------------------------------------------------------------------;
  705.  
  706. ;COMPARE_KEY
  707.  
  708. ;-------------------------------------------------------------------------------------------------------------------;
  709. COMP_KEY:
  710.     ;R1 APONTA PARA SEC KEY EM I:
  711.     ;R0 APONTA PARA USER KEY EM C:
  712.     ;R4 E O INDICE
  713.     MOV R4, #KEY_LEN
  714.     MOV R0, #USER_KEY
  715.     MOV R1, #SEC_KEY
  716.     MOV COUNT, #00H
  717.     CLR WRONG
  718.     INC R0
  719.     INC R1
  720. CLOOP:
  721.     CLR C
  722.     MOV A, R4
  723.     JZ NEXTSTATE
  724.     MOV A, @R0
  725.     SUBB A, @R1
  726.     JZ COUNTING
  727.     SETB WRONG
  728.     JMP DEC_POINTERS
  729.     COUNTING:
  730.         INC COUNT
  731.     DEC_POINTERS:
  732.         INC R0
  733.         INC R1
  734.         DEC R4
  735.         JMP CLOOP
  736.     NEXTSTATE:
  737.         JB WRONG, STATE_FAIL
  738.         CLR C
  739.         MOV A, COUNT
  740.         SUBB A, #KEY_LEN
  741.         JNZ STATE_FAIL
  742.     STATE_OPEN:
  743.         MOV STATE, #S_OPEN
  744. RET
  745.     STATE_FAIL:
  746.         MOV STATE, #S_FAIL
  747. RET
  748.  
  749. ;-------------------------------------------------------------------------------------------------------------------;
  750.  
  751. ;UPDATE_DISPLAY
  752.  
  753. ;-------------------------------------------------------------------------------------------------------------------;
  754.  
  755. UPDATE_DISP:
  756.     MOV DPTR, #NUM_DISP
  757.     MOV A, INDEX
  758.     MOVC A, @A+DPTR
  759.     MOV INDEX_CODE, A
  760.     MOV P2, A
  761. RET
  762.  
  763. NUM_DISP: DB CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6, CHAR_7, CHAR_8, CHAR_9, CHAR_a, CHAR_b, CHAR_c, CHAR_d, CHAR_e, CHAR_f
  764.  
  765.    
  766. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement