Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; -------------------------------------------------------------------------------
- ; Grupo 26 ? Dado1
- ; Integrantes:
- ; Cavalitto, Aurelio
- ; Galante, Rodrigo
- ; Programa:
- ; Dos dados con tres llaves, no se pueden accionar de manera individual al mismo tiempo.
- ; Se muestran los LED como un error
- ;
- ; Subrutina InterruptorRA2:
- ; Cuando se cierra la llave del interruptor vinculado a
- ; el bit 2 del puerto A, pone a "girar" a ambos dados (ambos display)
- ;
- ; Subrutina InterruptorRA0:
- ; Cuando se cierra la llave del interruptor vinculado a
- ; el bit 0 del puerto A, pone a "girar el dado" (el display vinculado al puerto C)
- ;
- ; Subrutina InterruptorRA1:
- ; Cuando se cierra la llave del interruptor vinculado a
- ; el bit 1 del puerto A, pone a "girar el dado" (display vinculado al puerto D)
- ; -------------------------------------------------------------------------------
- ;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)
- list p=18f4620, r=DEC
- #include <p18f4620.inc>
- ; 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
- ; config WDT=OFF, LVP=OFF, MCLRE=OFF, OSC=INTIO67, CCP2MX = PORTC
- config OSC = INTIO67, FCMEN = OFF, IESO = OFF ;// CONFIG1H
- config PWRT = OFF, BOREN = OFF, BORV = 0 ;// CONFIG2L
- config WDT = OFF, WDTPS = 32768 ;// CONFIG2H
- config MCLRE = ON, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = PORTC ;// CONFIG3H
- config STVREN = ON, LVP = OFF, XINST = OFF ;// CONFIG4L
- config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF ;// CONFIG5L
- config CPB = OFF, CPD = OFF ;// CONFIG5H
- config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF ; // CONFIG6L
- config WRTB = OFF, WRTC = OFF, WRTD = OFF ; // CONFIG6H
- config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF ;// CONFIG7L
- config EBTRB = OFF
- ;The org directive tells the compiler where to position the code in memory
- org 0x0000 ;The following code will be programmed in reset address location i.e. This is where the micro jumps to on reset
- goto Main ;Jump to Main immediately after a reset
- ;--------------------------------------------------------------------------
- ; Main Program
- ;--------------------------------------------------------------------------
- Main
- movlw h'0F' ; Configuramos todos los pines como digitales
- movwf ADCON1
- clrf TRISB ; Configura a los puertos B, C y D como salidas
- clrf TRISD ; PORTB son los leds
- clrf TRISC ; PORTC y PORTD son los displays
- movlw b'11111111' ; configura los bits RA7-RA0 del puerto A
- movwf TRISA ;
- movlw b'00001001' ; BIT 3 activa los Display, el BIT 0 el Display 0
- movwf LATA ;
- goto inicio
- InterruptorRA2
- movlw b'00000110' ; 1: Para cada numero, guarda su representacion de 7 segmentos binaria en W
- MOVWF PORTC ; Para cada MOVWF dentro del interruptor RA2 pone lo que tiene W en el puerto c y en el puerto d
- MOVWF PORTD ; Para cada btfss dentro del interruptor RA2 testea el bit 2 del puerto A, si está seteado
- btfss PORTA,RA2 ; saltea la siguiente instruccion
- movlw b'01011011' ; 2
- btfsc PORTA,RA2 ; Para cada btfsc dentro del interruptor RA2 testea el bit2 del puerto A, si está vacío
- return ; saltea la siguiente instrucción
- MOVWF PORTC ; El testeo de btfss es para saber si se abrio el interruptor, de modo de ser asi, saltea
- MOVWF PORTD ; y no guarda nada en W ni en los puertos, guardando solo el valor anterior
- btfss PORTA,RA2 ; El testeo de btfsc es para que se ignore la instrucción return si no se abre el interruptor
- movlw b'01001111' ; 3
- btfsc PORTA,RA2
- return
- MOVWF PORTC
- MOVWF PORTD
- btfss PORTA,RA2
- movlw b'01100110' ; 4
- btfsc PORTA,RA2
- return
- MOVWF PORTC
- MOVWF PORTD
- btfss PORTA,RA2
- movlw b'01101101' ; 5
- btfsc PORTA,RA2
- return
- MOVWF PORTC
- MOVWF PORTD
- btfss PORTA,RA2
- movlw b'01111101' ; 6
- btfsc PORTA,RA2
- return
- MOVWF PORTC
- MOVWF PORTD
- return
- InterruptorRA0
- movlw b'00000000' ; Se guarda el valor 0 en W y luego en el puerto B para limpiarlo en caso de
- MOVWF PORTB ; que previamente se hayan utilizado dos interruptores individuales
- movlw b'00000110' ; 1
- MOVWF PORTC
- btfss PORTA,RA0 ; La funcionalidad de los btfss, movwf y btfsc dentro de InterruptorRA0 es igual
- movlw b'01011011'; 2 ; a la de InterruptorRA2, excepto porque solo se usa el display de PORTC
- btfsc PORTA,RA0 ; y se testea con el bit 0 del puerto A
- return
- MOVWF PORTC
- btfss PORTA,RA0
- movlw b'01001111' ; 3
- btfsc PORTA,RA0
- return
- MOVWF PORTC
- btfss PORTA,RA0
- movlw b'01100110' ; 4
- btfsc PORTA,RA0
- return
- MOVWF PORTC
- btfss PORTA,RA0
- movlw b'01101101' ; 5
- btfsc PORTA,RA0
- return
- MOVWF PORTC
- btfss PORTA,RA0
- movlw b'01111101' ; 6
- btfsc PORTA,RA0
- return
- MOVWF PORTC
- return
- InterruptorRA1
- movlw b'00000000' ; Se guarda el valor 0 en el puerto B para limpiarlo
- MOVWF PORTB
- movlw b'00000110' ; 1
- MOVWF PORTD
- btfss PORTA,RA1 ; Las funcionalidades son las mismas, excepto que solo se usa el display de PORTD
- movlw b'01011011'; 2 ; y se testea con el bit 1 del puerto A
- btfsc PORTA,RA1
- return
- MOVWF PORTD
- btfss PORTA,RA1
- movlw b'01001111' ; 3
- btfsc PORTA,RA1
- return
- MOVWF PORTD
- btfss PORTA,RA1
- movlw b'01100110' ; 4
- btfsc PORTA,RA1
- return
- MOVWF PORTD
- btfss PORTA,RA1
- movlw b'01101101' ; 5
- btfsc PORTA,RA1
- return
- MOVWF PORTD
- btfss PORTA,RA1
- movlw b'01111101' ; 6
- btfsc PORTA,RA1
- return
- MOVWF PORTD
- return
- TestInterruptorRA0 ;Subrutina que analiza si el bit 0 del puerto A vale 1 o 0
- btfss PORTA,RA0 ;Si es 1 (el interruptor está abierto), saltea
- CALL InterruptorRA0 ;Si no, llama a la subrutina
- return
- TestInterruptorRA1
- btfss PORTA,RA1 ;Subrutina que analiza si el bit 1 del puerto A vale 1 o 0
- CALL InterruptorRA1 ;Si es 1, saltea y si no, llama a la subrutina
- return
- inicio
- btfss PORTA, RA2 ;Testea el bit 2 del puerto A, si el interruptor esta
- CALL InterruptorRA2 ;abierto, saltea
- btfsc PORTA, RA1 ;Si el interruptor RA1 esta cerrado, saltea (para ignorar la llamada a la subrutina)
- CALL TestInterruptorRA0
- btfsc PORTA, RA0 ;Lo mismo pero con el RA0
- CALL TestInterruptorRA1
- btfsc PORTA, RA0 ;Si el interruptor esta cerrado, saltea
- goto inicio
- btfsc PORTA, RA1 ;Si el interruptor esta cerrado, saltea
- goto inicio
- movlw b'01010101' ;Carga al puerto B con los valores impares de los LED
- MOVWF PORTB
- movlw b'00000000' ;Carga a los Display con el valor 0
- MOVWF PORTC
- MOVWF PORTD
- goto inicio
- goto inicio ; Vuelve al inicio
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement