cabeca_de_pica

Untitled

Nov 25th, 2019
179
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. ;-------------------------------------------------------------
  19.  
  20. S_LOCKED EQU 0
  21.  
  22.  
  23. STATE DATA 30H
  24. N_STATE DATA 31H
  25. USER_KEY DATA 32H
  26. SEC_KEY IDATA 50H
  27.  
  28.  
  29. MASQ EQU 0A2H
  30. KEYLEN EQU 4
  31. KSET EQU P0.6
  32. KLOAD EQU P0.7
  33.    
  34. CSEG AT 500H
  35.     DEFAULT_KEY:
  36.     DB 0A3H, 0A0H, 0A1H, 0A6H, 0A7H, 0A4H, 0A5H
  37.    
  38. CSEG AT 600H        ;caracteres segmento 8bits
  39.     DIGITS_TABLE:
  40.         DB CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6, CHAR_7, CHAR_8, CHAR_9   ;0-9
  41.                
  42. CSEG AT 0H
  43.     JMP RESET
  44. ;-------------------------------------------------------------------------------------------------
  45. ;       INIT_DEVICE
  46. ;-------------------------------------------------------------------------------------------------
  47. PCA_Init:
  48.     MOV  PCA0MD,    #000h
  49.     RET
  50. Port_IO_Init:
  51.     MOV  XBR1,      #040h
  52.     RET
  53. Init_Device:
  54.     lcall PCA_Init
  55.     lcall Port_IO_Init
  56.     ret
  57. ;-------------------------------------------------------------------------------------------------
  58. ;       RESET
  59. ;-------------------------------------------------------------------------------------------------
  60. RESET:
  61.     ACALL Init_Device
  62.     SETB KSET               ;ATIVAR BOTOES
  63.     SETB KLOAD
  64.     MOV R0, #SEC_KEY
  65.     MOV R1, #USER_KEY
  66.     MOV R3, #0H
  67.     MOV A, #0H
  68.     MOV STATE, #S_LOCKED
  69.     MOV N_STATE, #S_LOCKED
  70.     ACALL RELOAD_DEFAULT_KEY
  71.     JMP STATE_MACHINE
  72. ;-------------------------------------------------------------------------------------------------
  73. ;       RELOAD DEFAULT KEY
  74. ;-------------------------------------------------------------------------------------------------
  75. RELOAD_DEFAULT_KEY:
  76.     MOV DPTR, #DEFAULT_KEY
  77.     MOV R0, #SEC_KEY
  78.     MOV R3, #0H
  79. DEFAULT_KEY_LOOP:
  80.     MOV A, R3
  81.     MOVC A, @A+DPTR
  82.     MOV @R0, A
  83.     INC R0
  84.     INC R3
  85.     CLR CY
  86.     MOV A, R3
  87.     SUBB A, #KEYLEN
  88.     JNZ DEFAULT_KEY_LOOP
  89.     RET
  90.    
  91. ;-------------------------------------------------------------------------------------------------
  92. ;       STATE MACHINE
  93. ;-------------------------------------------------------------------------------------------------
  94. STATE_MACHINE:
  95.     MOV STATE, N_STATE
  96.     MOV A, STATE
  97.     RL A
  98.     MOV DPTR, #JMP_TABLE
  99.     JMP @A+DPTR
  100. JMP_TABLE:
  101.     AJMP LOCKED
  102.     AJMP $
  103.     AJMP $
  104. ;-------------------------------------------------------------------------------------------------
  105. ;       STATE LOCKED
  106. ;-------------------------------------------------------------------------------------------------
  107. LOCKED:
  108.     MOV DPTR, #DIGITS_TABLE
  109.     MOV R3, #0H
  110.     MOV R1, #USER_KEY
  111.     MOV P2, #CHAR_L
  112.     ACALL START
  113.    
  114. DISPLAYBCD:
  115.     MOV A, R3
  116.     MOVC A, @A+DPTR
  117.     MOV P2, A
  118. BUTTONS:
  119.     JNB KLOAD, READ_VAL
  120.     JB KSET, BUTTONS
  121. INCREMENT:
  122.     JNB KSET, $
  123.     INC R3
  124.     CJNE R3, #10, DISPLAYBCD
  125.     MOV R3, #0H
  126.     JMP DISPLAYBCD
  127.  
  128. START:              ;aguarda que o utilizador carregue no kset para continuar o programa
  129.     JB KSET, START
  130.     JNB KSET, $
  131.     RET
  132.  
  133. READ_VAL:
  134.     JNB KLOAD, $
  135.     MOV A, R3
  136.     MOV @R1, A
  137.     INC R1 
  138.     MOV A, R1
  139.     MOV R3, #0H
  140.     CJNE A, #36H, DISPLAYBCD
  141.     MOV P2, #0FH
  142. END
Advertisement
Add Comment
Please, Sign In to add comment