cabeca_de_pica

Untitled

Nov 11th, 2019
138
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. CHAR_A          EQU 088H
  17. CHAR_B          EQU 083H
  18. CHAR_C          EQU 0C6H
  19. CHAR_D          EQU 0A1H
  20. CHAR_E          EQU 086H
  21. CHAR_F          EQU 08EH
  22. ;-------------------------------------------------------------
  23. AND_OP EQU 88H
  24. OR_OP EQU 0C0H
  25. NOT_OP EQU 0ABH
  26. XOR_OP EQU 89H
  27. ADD_OP EQU 8CH
  28. SUB_OP EQU 0EAH
  29. ROTL_OP EQU 0C7H
  30. ROTR_OP EQU 0CEH
  31.  
  32. S_READY EQU 0
  33. S_SELECT EQU 1
  34. S_OP2 EQU 2
  35. S_PROCESS EQU 3
  36.  
  37. OP_1 DATA 30H
  38. OP_2 DATA 31H
  39. OPER DATA 32H
  40. STATE DATA 33H
  41. N_STATE DATA 34H
  42.  
  43. KSET EQU P0.6
  44. KLOAD EQU P0.7
  45.    
  46. CSEG AT 400H
  47.     OP_TABLE:       ;OPERADORES
  48.         DB AND_OP, OR_OP, NOT_OP, XOR_OP, ADD_OP, SUB_OP, ROTL_OP, ROTR_OP
  49. CSEG AT 500H        ;caracteres segmento 8bits
  50.     DIGITS_TABLE:
  51.         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   ;0-F
  52.                
  53. CSEG AT 0H
  54.     JMP RESET
  55. ;------------------------------------------------------------------------
  56. PCA_Init:
  57.     MOV  PCA0MD,    #000h
  58.     RET
  59. Port_IO_Init:
  60.     MOV  XBR1,      #040h
  61.     RET
  62. Init_Device:
  63.     lcall PCA_Init
  64.     lcall Port_IO_Init
  65.     ret
  66. ;------------------------------------------------------------------------
  67.    
  68. RESET:
  69.     ACALL Init_Device
  70.     SETB KSET               ;ATIVAR BOTOES
  71.     SETB KLOAD
  72.     MOV R3, #0H
  73.     MOV A, #0H
  74.     MOV OP_1, #0H
  75.     MOV OP_2, #0H
  76.     MOV OPER, #0H
  77.     MOV STATE, #S_READY
  78.     MOV N_STATE, #S_READY
  79.     JMP STATE_MACHINE
  80. ;-----------------------------------------------------STATE MACHINE
  81. DOISOPERADORES:
  82.     MOV N_STATE, #S_OP2
  83.     JMP STATE_MACHINE
  84. SINGLE:
  85.     MOV N_STATE, #S_PROCESS
  86. STATE_MACHINE:
  87.     MOV STATE, N_STATE
  88.     MOV A, STATE
  89.     RL A
  90.     MOV DPTR, #JMP_TABLE
  91.     JMP @A+DPTR
  92. JMP_TABLE:
  93.     AJMP READY
  94.     AJMP SELECT
  95.     AJMP OP2
  96.     AJMP PROCESS
  97. ;-----------------------------------------------------STATE READY
  98. READY:
  99.     MOV DPTR, #DIGITS_TABLE
  100.     MOV P2, #0AFH
  101.     ACALL START
  102. DISPLAYBCD:
  103.     MOV A, R3
  104.     MOVC A, @A+DPTR
  105.     MOV P2, A
  106. BUTTONS:
  107.     JNB KLOAD, OPER1
  108.     JB KSET, BUTTONS
  109. INCREMENT:
  110.     JNB KSET, $
  111.     INC R3
  112.     CJNE R3, #16, DISPLAYBCD
  113.     MOV R3, #0H
  114.     JMP DISPLAYBCD
  115. START:              ;aguarda que o utilizador carregue no kset para iniciar programa
  116.     JB KSET, START
  117.     JNB KSET, $
  118.     RET
  119. OPER1:
  120.     JNB KLOAD, $
  121.     MOV OP_1, R3
  122.     MOV P1, OP_1
  123.     MOV N_STATE, #S_SELECT
  124.     JMP STATE_MACHINE
  125. ;---------------------------------------------STATE SELECT
  126. SELECT:
  127.     MOV DPTR, #OP_TABLE
  128.     MOV R3, #0H
  129. SELECT_2:
  130.     MOV A, R3
  131.     MOVC A, @A+DPTR
  132.     MOV P2, A
  133. BUTT_OPER:
  134.     JNB KLOAD, OPERAND
  135.     JB KSET, BUTT_OPER
  136. INC_OPER:
  137.     JNB KSET, $
  138.     INC R3
  139.     CJNE R3, #8, SELECT_2
  140.     JMP SELECT
  141. OPERAND:
  142.     JNB KLOAD, $
  143.     MOV OPER, R3
  144.     MOV A, OPER
  145.     RL A
  146.     MOV DPTR, #OPERJMP_TABLE
  147.     JMP @A+DPTR
  148. OPERJMP_TABLE:
  149.     AJMP DOISOPERADORES
  150.     AJMP DOISOPERADORES
  151.     AJMP SINGLE
  152.     AJMP DOISOPERADORES
  153.     AJMP DOISOPERADORES
  154.     AJMP DOISOPERADORES
  155.     AJMP SINGLE
  156.     AJMP SINGLE
  157. ;---------------------------------------------STATE OP2
  158. OP2:
  159.     MOV DPTR, #DIGITS_TABLE
  160.     MOV R3, #0H
  161.     MOV P2, #0A4H
  162.     ACALL STARTOP2
  163. DISPLAYOP2:
  164.     MOV A, R3
  165.     MOVC A, @A+DPTR
  166.     MOV P2, A
  167. BUTTONSOP2:
  168.     JNB KLOAD, OPER2
  169.     JB KSET, BUTTONSOP2
  170. INCREMENTOP2:
  171.     JNB KSET, $
  172.     INC R3
  173.     CJNE R3, #16, DISPLAYOP2
  174.     MOV R3, #0H
  175.     JMP DISPLAYOP2
  176. STARTOP2:               ;aguarda que o utilizador carregue no kset para iniciar a selecao do op2
  177.     JB KSET, STARTOP2
  178.     JNB KSET, $
  179.     RET
  180. OPER2:
  181.     JNB KLOAD, $
  182.     MOV OP_2, R3
  183.     MOV P1, OP_2
  184.     MOV N_STATE, #S_PROCESS
  185.     JMP STATE_MACHINE
  186. ;---------------------------------------------STATE PROCESS
  187. PROCESS:
  188.     MOV A, OPER
  189.     RL A
  190.     MOV DPTR, #FUNC_JMP_TABLE
  191.     JMP @A+DPTR
  192. FUNC_JMP_TABLE:
  193.     AJMP AND_FUNC
  194.     AJMP OR_FUNC
  195.     AJMP NOT_FUNC
  196.     AJMP XOR_FUNC
  197.     AJMP ADD_FUNC
  198.     AJMP SUB_FUNC
  199.     AJMP RL_FUNC
  200.     AJMP RR_FUNC
  201.  
  202. AND_FUNC:
  203.     MOV A, OP_1
  204.     ANL A, OP_2             ;A AND OP_2
  205.     JMP IMPRIMIR
  206. OR_FUNC:
  207.     MOV A, OP_1
  208.     ORL A, OP_2
  209.     JMP IMPRIMIR
  210. NOT_FUNC:
  211.     MOV A, #0FFH                ;TB PODEMOS USAR O COMANDO CPL A
  212.     SUBB A, OP_1
  213.     JMP IMPRIMIR
  214. XOR_FUNC:
  215.     MOV A, OP_1
  216.     XRL A, OP_2
  217.     JMP IMPRIMIR
  218. ADD_FUNC:
  219.     MOV A, OP_1
  220.     ADD A, OP_2
  221.     JMP IMPRIMIR
  222. SUB_FUNC:
  223.     MOV A, OP_1
  224.     SUBB A, OP_2
  225.     INC A
  226.     JMP IMPRIMIR
  227. RL_FUNC:
  228.     MOV A, OP_1
  229.     RL A
  230.     JMP IMPRIMIR
  231. RR_FUNC:
  232.     MOV A, OP_1
  233.     RR A
  234.     JMP IMPRIMIR
  235.  
  236. IMPRIMIR:
  237.     MOV DPTR,#DIGITS_TABLE
  238.     MOVC A, @A+DPTR
  239.     MOV P2, A
  240.     MOV OP_1, A
  241.     ENGODO:
  242.     JNB KSET, ENGODO
  243.  
  244. END
Advertisement
Add Comment
Please, Sign In to add comment