Advertisement
Brunoroman

16f84a

Nov 24th, 2021
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.28 KB | None | 0 0
  1. list p=16f84a
  2. #include <p16f84a.inc>
  3.  
  4. leido equ 0x10
  5. entrada equ 0x15
  6. entrada1 equ 0x20
  7. entrada2 equ 0x30
  8. resultado equ 0x40
  9. mascara1 equ b'00011'
  10. mascara2 equ b'11100'
  11. mascaraResta equ b'00100'
  12.  
  13. ORG 0x00 ; comienzo del programa
  14.  
  15. bsf STATUS, RP0 ; cambia al banco 1 de registros
  16. movlw b'11111' ; configura los bits RA3-RA0 del puerto A
  17. movwf TRISA ; como entrada, el bit RA4 como salida
  18. clrf TRISB ; configura el puerto B como salida
  19. bcf STATUS, RP0 ; cambia al banco 0 de registros
  20.  
  21. goto inicio
  22.  
  23. ; Subrutina que lee los bits del PuertoA y separa los dos numeros provinientes
  24. ; de dicho puerto. Los 2 bits menos significativos los guarda en entrada1 y
  25. ; los 3 bits mas significativos en entrada2
  26. leerNumeros
  27. movwf entrada ; Movemos lo que esta en W a entrada
  28. movwf entrada1 ; Movemos lo que esta en W a entrada1
  29. movwf entrada2 ; Movemos lo que esta en W a entrada2
  30. andlw mascara1 ; mascara para quedarnos solo con 2 bits de la parte baja
  31. movwf entrada1 ; movemos el resultado a entrada1
  32.  
  33. ; Obtenemos el otro numero
  34. movfw entrada2 ; movemos el valor de entrada2 a W
  35. andlw mascara2 ; mascara para quedarnos solo con la parte alta
  36. movwf entrada2 ; movemos el valor de W a entrada2
  37. rrf entrada2 ; sacamos los 2 bits mas bajos
  38. rrf entrada2
  39. return
  40.  
  41. ; Subrutina que suma dos numeros que son pasados en entrada1 y entrada2. El
  42. ; resultado de la suma es devuelto en resultado
  43. sumarDosNumeros
  44. movfw entrada1 ; Movemos la entrada1 a W
  45. movwf resultado ; Movemos el valor de W a resultado (valor de entrada1)
  46. movfw entrada2 ; Movemos el valor de entrada2 a W
  47. addwf resultado ; sumamos lo que esta en W (tambien en entrada2) con resultado (entrada1)
  48. return
  49.  
  50. ; Subrutina que convierte un binario a su correspondiente en decimal para
  51. ; representar en un display de 7 segmentos. El 10 lo representa como 0 y el bit 8 encendido
  52. ; Recibe por parámetro en el registro W el binario a adaptar a binario de 7 segmentos
  53. conversorBin7seg
  54. btfsc STATUS, Z ; Z = 1 ? Consulta si es 0 (cero)
  55. retlw b'0111111' ; 0
  56. movwf leido ; Mueve el valor de W a leido y comienza a decrementarlo
  57. decf leido ; hasta que llegue a 0 el que de cero es el valor a representar
  58. btfsc STATUS, Z
  59. retlw b'0000110' ; 1
  60. decf leido
  61. btfsc STATUS, Z
  62. retlw b'1011011' ; 2
  63. decf leido
  64. btfsc STATUS, Z
  65. retlw b'1001111' ; 3
  66. decf leido
  67. btfsc STATUS, Z
  68. retlw b'1100110' ; 4
  69. decf leido
  70. btfsc STATUS, Z
  71. retlw b'1101101' ; 5
  72. decf leido
  73. btfsc STATUS, Z
  74. retlw b'1111101' ; 6
  75. decf leido
  76. btfsc STATUS, Z
  77. retlw b'0000111' ; 7
  78. decf leido
  79. btfsc STATUS, Z
  80. retlw b'1111111' ; 8
  81. decf leido
  82. btfsc STATUS, Z
  83. retlw b'1101111' ; 9
  84. retlw b'10111111' ; 10 = 0 + bit de diez
  85.  
  86. inicio
  87. movf PORTA, 0 ; PORTA -> W
  88. call leerNumeros ; Lee los dos numeros recibidos del PuertoA
  89. call sumarDosNumeros ; Suma los dos numeros
  90. movfw resultado ; Movemos el resultado de la suma a W
  91. call conversorBin7seg ; Convertimos a display de 7 segmentos
  92. movwf PORTB ; Muestra en el PuertoB el resultado
  93. goto inicio
  94.  
  95. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement