Advertisement
aureliocavalitto

G26_Cavalitto_Galante

Nov 29th, 2021
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.92 KB | None | 0 0
  1. ; -------------------------------------------------------------------------------
  2. ; Grupo 26 ? Dado1
  3. ; Integrantes:
  4. ; Cavalitto, Aurelio
  5. ; Galante, Rodrigo
  6. ; Programa:
  7. ; Dos dados con tres llaves, no se pueden accionar de manera individual al mismo tiempo.
  8. ; Se muestran los LED como un error
  9. ;
  10. ; Subrutina InterruptorRA2:
  11. ; Cuando se cierra la llave del interruptor vinculado a
  12. ; el bit 2 del puerto A, pone a "girar" a ambos dados (ambos display)
  13. ;
  14. ; Subrutina InterruptorRA0:
  15. ; Cuando se cierra la llave del interruptor vinculado a
  16. ; el bit 0 del puerto A, pone a "girar el dado" (el display vinculado al puerto C)
  17. ;
  18. ; Subrutina InterruptorRA1:
  19. ; Cuando se cierra la llave del interruptor vinculado a
  20. ; el bit 1 del puerto A, pone a "girar el dado" (display vinculado al puerto D)
  21. ; -------------------------------------------------------------------------------
  22.  
  23.  
  24. ;configure the assembler directive 'list' so as to set processor to 18f4620 and set the radix used for data expressions to decimal (can be HEX|DEC|OCT)
  25. list p=18f4620, r=DEC
  26. #include <p18f4620.inc>
  27.  
  28.  
  29.  
  30.  
  31.  
  32. ; configure the micro so that the watchdog timer is off, low-voltage programming is off, master clear is off and the clock works off the internal oscillator
  33. ; config WDT=OFF, LVP=OFF, MCLRE=OFF, OSC=INTIO67, CCP2MX = PORTC
  34.  
  35. config OSC = INTIO67, FCMEN = OFF, IESO = OFF ;// CONFIG1H
  36. config PWRT = OFF, BOREN = OFF, BORV = 0 ;// CONFIG2L
  37. config WDT = OFF, WDTPS = 32768 ;// CONFIG2H
  38. config MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = PORTC ;// CONFIG3H
  39. config STVREN = ON, LVP = OFF, XINST = OFF ;// CONFIG4L
  40. config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF ;// CONFIG5L
  41. config CPB = OFF, CPD = OFF ;// CONFIG5H
  42. config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF ; // CONFIG6L
  43. config WRTB = OFF, WRTC = OFF, WRTD = OFF ; // CONFIG6H
  44. config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF ;// CONFIG7L
  45. config EBTRB = OFF
  46.  
  47. ;The org directive tells the compiler where to position the code in memory
  48. org 0x0000 ;The following code will be programmed in reset address location i.e. This is where the micro jumps to on reset
  49. goto Main ;Jump to Main immediately after a reset
  50.  
  51. ;--------------------------------------------------------------------------
  52. ; Main Program
  53. ;--------------------------------------------------------------------------
  54.  
  55. Main
  56. movlw h'0F' ; Configuramos todos los pines como digitales
  57. movwf ADCON1
  58.  
  59. clrf TRISB ; Configura a los puertos B, C y D como salidas
  60. clrf TRISD ; PORTB son los leds
  61. clrf TRISC ; PORTC y PORTD son los displays
  62.  
  63. movlw b'11111111' ; configura los bits RA7-RA0 del puerto A
  64. movwf TRISA ;
  65.  
  66. movlw b'00001001' ; BIT 3 activa los Display, el BIT 0 el Display 0
  67. movwf LATA ;
  68.  
  69. goto inicio
  70.  
  71.  
  72. InterruptorRA2
  73. movlw b'00000110' ; 1: Para cada numero, guarda su representacion de 7 segmentos binaria en W
  74. MOVWF PORTC ; Para cada MOVWF dentro del interruptor RA2 pone lo que tiene W en el puerto c y en el puerto d
  75. MOVWF PORTD ; Para cada btfss dentro del interruptor RA2 testea el bit 2 del puerto A, si está seteado
  76. btfss PORTA,RA2 ; saltea la siguiente instruccion
  77. movlw b'01011011' ; 2
  78. btfsc PORTA,RA2 ; Para cada btfsc dentro del interruptor RA2 testea el bit2 del puerto A, si está vacío
  79. return ; saltea la siguiente instrucción
  80. MOVWF PORTC ; El testeo de btfss es para saber si se abrio el interruptor, de modo de ser asi, saltea
  81. MOVWF PORTD ; y no guarda nada en W ni en los puertos, guardando solo el valor anterior
  82. btfss PORTA,RA2 ; El testeo de btfsc es para que se ignore la instrucción return si no se abre el interruptor
  83. movlw b'01001111' ; 3
  84. btfsc PORTA,RA2
  85. return
  86. MOVWF PORTC
  87. MOVWF PORTD
  88. btfss PORTA,RA2
  89. movlw b'01100110' ; 4
  90. btfsc PORTA,RA2
  91. return
  92. MOVWF PORTC
  93. MOVWF PORTD
  94. btfss PORTA,RA2
  95. movlw b'01101101' ; 5
  96. btfsc PORTA,RA2
  97. return
  98. MOVWF PORTC
  99. MOVWF PORTD
  100. btfss PORTA,RA2
  101. movlw b'01111101' ; 6
  102. btfsc PORTA,RA2
  103. return
  104. MOVWF PORTC
  105. MOVWF PORTD
  106. return
  107. InterruptorRA0
  108. movlw b'00000000' ; Se guarda el valor 0 en W y luego en el puerto B para limpiarlo en caso de
  109. MOVWF PORTB ; que previamente se hayan utilizado dos interruptores individuales
  110. movlw b'00000110' ; 1
  111. MOVWF PORTC
  112. btfss PORTA,RA0 ; La funcionalidad de los btfss, movwf y btfsc dentro de InterruptorRA0 es igual
  113. movlw b'01011011'; 2 ; a la de InterruptorRA2, excepto porque solo se usa el display de PORTC
  114. btfsc PORTA,RA0 ; y se testea con el bit 0 del puerto A
  115. return
  116. MOVWF PORTC
  117. btfss PORTA,RA0
  118. movlw b'01001111' ; 3
  119. btfsc PORTA,RA0
  120. return
  121. MOVWF PORTC
  122. btfss PORTA,RA0
  123. movlw b'01100110' ; 4
  124. btfsc PORTA,RA0
  125. return
  126. MOVWF PORTC
  127. btfss PORTA,RA0
  128. movlw b'01101101' ; 5
  129. btfsc PORTA,RA0
  130. return
  131. MOVWF PORTC
  132. btfss PORTA,RA0
  133. movlw b'01111101' ; 6
  134. btfsc PORTA,RA0
  135. return
  136. MOVWF PORTC
  137. return
  138. InterruptorRA1
  139. movlw b'00000000' ; Se guarda el valor 0 en el puerto B para limpiarlo
  140. MOVWF PORTB
  141. movlw b'00000110' ; 1
  142. MOVWF PORTD
  143. btfss PORTA,RA1 ; Las funcionalidades son las mismas, excepto que solo se usa el display de PORTD
  144. movlw b'01011011'; 2 ; y se testea con el bit 1 del puerto A
  145. btfsc PORTA,RA1
  146. return
  147. MOVWF PORTD
  148. btfss PORTA,RA1
  149. movlw b'01001111' ; 3
  150. btfsc PORTA,RA1
  151. return
  152. MOVWF PORTD
  153. btfss PORTA,RA1
  154. movlw b'01100110' ; 4
  155. btfsc PORTA,RA1
  156. return
  157. MOVWF PORTD
  158. btfss PORTA,RA1
  159. movlw b'01101101' ; 5
  160. btfsc PORTA,RA1
  161. return
  162. MOVWF PORTD
  163. btfss PORTA,RA1
  164. movlw b'01111101' ; 6
  165. btfsc PORTA,RA1
  166. return
  167. MOVWF PORTD
  168. return
  169.  
  170. TestInterruptorRA0 ;Subrutina que analiza si el bit 0 del puerto A vale 1 o 0
  171. btfss PORTA,RA0 ;Si es 1 (el interruptor está abierto), saltea
  172. CALL InterruptorRA0 ;Si no, llama a la subrutina
  173. return
  174. TestInterruptorRA1
  175. btfss PORTA,RA1 ;Subrutina que analiza si el bit 1 del puerto A vale 1 o 0
  176. CALL InterruptorRA1 ;Si es 1, saltea y si no, llama a la subrutina
  177. return
  178. inicio
  179.  
  180. btfss PORTA, RA2 ;Testea el bit 2 del puerto A, si el interruptor esta
  181. CALL InterruptorRA2 ;abierto, saltea
  182.  
  183. btfsc PORTA, RA1 ;Si el interruptor RA1 esta cerrado, saltea (para ignorar la llamada a la subrutina)
  184. CALL TestInterruptorRA0
  185.  
  186. btfsc PORTA, RA0 ;Lo mismo pero con el RA0
  187. CALL TestInterruptorRA1
  188.  
  189.  
  190.  
  191.  
  192. btfsc PORTA, RA0 ;Si el interruptor esta cerrado, saltea
  193. goto inicio
  194. btfsc PORTA, RA1 ;Si el interruptor esta cerrado, saltea
  195. goto inicio
  196. movlw b'01010101' ;Carga al puerto B con los valores impares de los LED
  197. MOVWF PORTB
  198. movlw b'00000000' ;Carga a los Display con el valor 0
  199. MOVWF PORTC
  200. MOVWF PORTD
  201. goto inicio
  202.  
  203.  
  204.  
  205.  
  206. goto inicio ; Vuelve al inicio
  207.  
  208.  
  209. END
  210.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement