Sunteți pe pagina 1din 29

UNIVERSIDAD AUTONOMA DE SINALOA

FACULTAD DE INFORMATICA INGENIERIA EN SISTEMAS

TALLER DE AUTOMATIZACION Y ROBOTICA

PRACTICAS DE ENSAMBLADOR

ING. JOSE ALFONSO BRITO ROJAS

EDGAR JAVIER PADILLA RAMIREZ

Mazatln, Sinaloa, Octubre del 2011

INDICE
PRACTICAS DE ENSAMBLADOR
HELLO_WORLD..3

LED_BLINK......5

LED_BLINK2....8

IDA_VUELTA.11

CONTADOR...14

COLAGE.....17

COLAGE2...22

SUMA..27

PRACTICAS DE ENSAMBLADOR

HELLO_WORLD INTRODUCCION Esta es la primera prctica realizada en ensamblador como en cualquier otro tipo de programacin ya que es la ms bsica pero aun as es necesaria para comenzar a conocer los mnemnicos y sus funciones.

DESARROLLO Cdigos main


BSF MOVLW MOVWF CLRF BCF CLRF INICIO BTFSC GOTO GOTO LED_ON MOVLW MOVWF GOTO LED_OFF CLRF GOTO END PORTB INICIO ; directive ; LIMPIAR PORTB ; IR A INICIO 0XFF PORTB INICIO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; IR A INICIO PORTA,0 LED_OFF LED_ON ; BRINCA SI EL BIT 0 DE PORTA ESTA A CERO ; IR A LED_OFF ; IR A LED_ON STATUS,RP0 0X1F TRISA TRISB STATUS,RP0 PORTB ; ENCENDER EL BIT RP0 DE STATUS (BANCO1) ; MOVER LA LITERAL A W ; MOVER W A TRISA ; LIMPIAR TRISB ; APAGAR EL BIT RP0 DE STATUS (BANCO0) ; LIMPIAR PORTB

'end of program'

Circuito

CONCLUSION En esta prctica aprendimos como entrar al banco1 para configurar a un puerto de entrada y a otro de salida y volver al banco0 para poder utilizar los puertos, adems de que aprendimos como apagar y prender los LEDs utilizando un push bottom para que al presionarlo enciendan y al soltarlo se apaguen.

LED_BLINK INTRODUCCION En esta prctica aplicaremos lo que ya sabemos acerca de cmo configurar los puertos y como usarlos, pero adems vamos a aprender cmo hacer que los LEDs prendan y se apaguen, es decir que parpadeen.

DESARROLLO Cdigos main


BSF MOVLW MOVWF MOVLW MOVWF BCF CLRF INICIO MOVLW MOVWF CALL CLRF CALL GOTO RETARDO MOVLW MOVWF CICLO1 DECFSZ GOTO RETURN CICLO2 MOVLW MOVWF CICLO3 DECFSZ GOTO J,F NOPS ; DECREMENTA J Y SALTA SI ES 0 ; IR A NOPS 0XFF J ; MOVER LA LITERAL A W ; MOVER W A J I,F CICLO2 ; DECREMENTA I Y SALTA SI ES 0 ; IR AL CICLO2 ; DEVOLVER 0X3F I ; MOVER LA LITERAL A W ; MUEVE W A I 0XFF PORTB RETARDO PORTB RETARDO INICIO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; LIMPIAR PORTB ; LLAMAR RETARDO ; IR A INICIO STATUS,RP0 0X00 TRISB 0X1F TRISA STATUS,RP0 PORTB ; ENCENDER EL BIT RP0 DE STATUS (BANCO1) ; MOVER LA LITERAL A W ; MOVER W A TRISB ; MOVER LA LITERAL A W ; MOVER W A TRISA ; APAGAR EL BIT RP0 DE STATUS (BANCO0) ; LIMPIAR PORTB

GOTO NOPS NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP GOTO END

CICLO1

; IR AL CICLO1

; NO HACER NADA ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; CICLO3 ; IR AL CICLO3

; directive 'end of program'

Circuito

CONCLUSION En esta prctica hicimos que los LEDs parpadearan utilizando un retardo, sin la necesidad de usar un switch, en el cual usamos por primera vez los mnemnicos NOP y DECFSZ, que funcionan para una pausa o no realizar una accin y decrementar un puerto hasta que sea cero, en ese orden.

LED_BLINK2 INTRODUCCION Con esta prctica podremos hacer que enciendan los LEDs en forma de escalera, uno despus de otro utilizando lo ya aplicado en las prcticas anteriores como es el caso de la configuracin de los puertos y el uso del retardo.

DESARROLLO Cdigos main


BSF MOVLW MOVWF MOVLW MOVWF BCF CLRF INICIO MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW 0X01 PORTB RETARDO 0X02 PORTB RETARDO 0X04 PORTB RETARDO 0X08 PORTB RETARDO 0X10 PORTB RETARDO 0X20 PORTB RETARDO 0X40 ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W STATUS,RP0 0X00 TRISB 0X1F TRISA STATUS,RP0 PORTB ; ENCENDER EL BIT RP0 DE STATUS (BANCO1) ; MOVER LA LITERAL A W ; MOVER W A TRISB ; MOVER LA LITERAL A W ; MOVER W A TRISA ; APAGAR EL BIT RP0 DE STATUS (BANCO0) ; LIMPIAR PORTB

MOVWF CALL MOVLW MOVWF CALL GOTO RETARDO MOVLW MOVWF CICLO1 DECFSZ GOTO RETURN CICLO2 MOVLW MOVWF CICLO3 DECFSZ GOTO GOTO NOPS NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP

PORTB RETARDO 0X80 PORTB RETARDO INICIO

; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; IR A INICIO

0X3F I

; MOVER LA LITERAL A W ; MUEVE W A I

I,F CICLO2

; DECREMENTA I Y SALTA SI ES 0 ; IR AL CICLO2 ; DEVOLVER

0XFF J

; MOVER LA LITERAL A W ; MOVER W A J

J,F NOPS CICLO1

; DECREMENTA J Y SALTA SI ES 0 ; IR A NOPS ; IR AL CICLO1

; NO HACER NADA ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

NOP NOP NOP GOTO END CICLO3

; ; ; ; IR AL CICLO3

; directive 'end of program'

Circuito

CONCLUSION En base a esta actividad se llega a la conclusin de cmo hacer que los LEDs enciendan uno por uno hasta llegar al ltimo para volver a empezar desde el primero con un retardo en cada cambio de LEDs, es decir que acta en un solo sentido y una vez que llega al final comienza de nuevo el ciclo.

IDA_VUELTA INTRODUCCION En esta prctica se aplicara lo que se hizo en la prctica de LED_BLINK2, en la cual los LEDs encendan uno por uno en orden, pero la diferencia ser el mtodo aplicado y que en lugar de empezar desde el primero al llegar al ltimo, se regresara en sentido contrario.

DESARROLLO Cdigos main


BSF CLRF BCF CLRF INICIO MOVLW MOVWF CALL CICLO MOVF ADDWF CALL BTFSS GOTO GOTO CICLO4 RRF CALL BTFSS GOTO GOTO RETARDO MOVLW MOVWF CICLO1 DECFSZ I,F ; DECREMENTA I Y SALTA SI ES 0 0X3F I ; MOVER LA LITERAL A W ; MUEVE W A I PORTB,F RETARDO PORTB,0 CICLO4 CICLO ; MOVER EL BIT HACIA LA DERECHA ; LLAMAR RETARDO ; BRINCA SI EL BIT 0 DE PORTB ESTA A UNO ; IR A CICLO4 ; IR A CICLO PORTB,W PORTB,F RETARDO PORTB,7 CICLO CICLO4 ; MOVER PORTB A W ; AGREGAR(SUMAR) W CON PORTB ; LLAMAR RETARDO ; BRINCA SI EL BIT 7 DE PORTB ESTA A 1 ; IR A CICLO ; IR A CICLO4 0X01 PORTB RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO STATUS,RP0 TRISB STATUS,RP0 PORTB ; ENCENDER EL BIT RP0 DE STATUS (BANCO1) ; LIMPIAR TRISB ; APAGAR EL BIT DEL REGISTRO(BANCO0) ; LIMPIAR PORTB

GOTO RETURN CICLO2 MOVLW MOVWF CICLO3 DECFSZ GOTO GOTO NOPS NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP GOTO END

CICLO2

; IR AL CICLO2 ; DEVOLVER

0XFF J

; MOVER LA LITERAL A W ; MOVER W A J

J,F NOPS CICLO1

; DECREMENTA J Y SALTA SI ES 0 ; IR A NOPS ; IR AL CICLO1

; NO HACER NADA ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; CICLO3 ; IR AL CICLO3

; directive 'end of program'

Circuito

CONCLUSION Con esta prctica podemos llegar a la conclusin que al compararla con el mtodo utilizado en el LED_BLINK2 es ms largo que el utilizado en sta prctica ya que est ms simplificado gracias al uso del mnemnico ADD que nos sirvi para sumar dos datos, y adems usamos otro mnemnico que nos funciona para que en lugar de que al llegar al final y vuelva a empezar desde el primero, como en la actividad pasada, esta vez se devolviera del ltimo al primero, usando el mnemnico RRF que recorre los bits hacia la derecha, y una vez indicado todo hacer que se repita el ciclo.

CONTADOR INTRODUCCION Con la prctica de contador queremos hacer que los LEDs enciendan de acuerdo a un nmero en orden desde 1 hasta 255 que es el nmero ms grande al que se puede llegar con 8 bits.

DESARROLLO Cdigos main


BSF CLRF BCF CLRF INICIO INCF CALL GOTO RETARDO MOVLW MOVWF CICLO1 DECFSZ GOTO RETURN CICLO2 MOVLW MOVWF CICLO3 DECFSZ GOTO GOTO NOPS NOP NOP NOP NOP ; NO HACER NADA ; ; ; J,F NOPS CICLO1 ; DECREMENTA J Y SALTA SI ES 0 ; IR A NOPS ; IR AL CICLO1 0XFF J ; MOVER LA LITERAL A W ; MOVER W A J I,F CICLO2 ; DECREMENTA I Y SALTA SI ES 0 ; IR AL CICLO2 ; DEVOLVER 0X3F I ; MOVER LA LITERAL A W ; MUEVE W A I PORTB RETARDO INICIO ; INCREMENTAR PORTB ; LLAMAR RETARDO ; IR A INICIO STATUS,RP0 TRISB STATUS,RP0 PORTB ; ENCENDER EL BIT RP0 DE STATUS (BANCO1) ; LIMPIAR TRISB ; APAGAR EL BIT DEL REGISTRO(BANCO0) ; LIMPIAR PORTB

NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP GOTO END CICLO3

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; IR AL CICLO3

; directive 'end of program'

Circuito

CONCLUSION En conclusin podemos decir que para realizar el contador podemos utilizar el mnemnico INCF con el cual vamos incrementando de uno en uno el valor en un puerto de manera resumida sin necesidad de introducir las variables una por una para encenderlos. Este contador comienza desde el 1 y termina en 255 con un retardo de intermedio mostrandolo a travs de los LEDs.

COLAGE INTRODUCCION En esta prctica haremos que el puerto A funcione de entrada y al introducir los datos, haga algo a travs del puerto B utilizando un dipswitch para introducir los datos.

DESARROLLO Cdigos main


BSF CLRF MOVLW MOVWF BCF CLRF INICIO BTFSS GOTO BTFSS GOTO BTFSS GOTO BTFSS GOTO BTFSS GOTO GOTO PARPADEAR MOVLW MOVWF CALL CLRF CALL GOTO APAGAR CLRF PORTB ; LIMPIAR PORTB 0XFF PORTB RETARDO PORTB RETARDO INICIO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; LIMPIAR PORTB ; LLAMAR RETARDO ; IR A INICIO PORTA,0 PARPADEAR PORTA,1 CAMBIO PORTA,2 IDA PORTA,3 IDA_VUELTA PORTA,4 ??? APAGAR ; BRINCA SI EL BIT 0 DE PORTA ESTA A UNO ; IR A PARPADEAR ; BRINCA SI EL BIT 1 DE PORTA ESTA A UNO ; IR A CAMBIO ; BRINCA SI EL BIT 2 DE PORTA ESTA A UNO ; IR A IDA ; BRINCA SI EL BIT 3 DE PORTA ESTA A UNO ; IR A IDA_VUELTA ; BRINCA SI EL BIT 4 DE PORTA ESTA A UNO ;IR A ??? ; IR A APAGAR STATUS,RP0 TRISB 0X1F TRISA STATUS,RP0 PORTB ; ENCENDER EL BIT RP0 DE STATUS (BANCO1) ; LIMPIAR TRISB ; MOVER LA LITERAL A W ; MOVER W A TRISA ; APAGAR EL BIT DEL REGISTRO(BANCO0) ; LIMPIAR PORTB

GOTO CAMBIO MOVLW MOVWF CALL MOVLW MOVWF CALL GOTO IDA MOVLW MOVWF CALL CICLO MOVF ADDWF CALL BTFSS GOTO GOTO IDA_VUELTA MOVLW MOVWF CALL CICLOQ RLF CALL BTFSS GOTO GOTO CICLO4 RRF CALL BTFSS GOTO GOTO ??? MOVLW

INICIO

; IR A INICIO

0X0F PORTB RETARDO 0XF0 PORTB RETARDO NICIO

; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; IR A INICIO

0X01 PORTB RETARDO

; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO

PORTB,W PORTB,F RETARDO PORTB,7 CICLO INICIO

; MOVER PORTB A W ; AGREGAR(SUMAR) W CON PORTB ; LLAMAR RETARDO ; BRINCA SI EL BIT 7 DE PORTB ESTA A UNO ; IR A CICLO ; IR A INICIO

0X01 PORTB RETARDO

; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO

PORTB,F RETARDO PORTB,7 CICLOQ CICLO4

; MOVER EL BIT HACIA LA IZQUIERDA ; LLAMAR RETARDO ; BRINCA SI EL BIT 7 DE PORTB ESTA A UNO ; IR A CICLOQ ; IR A CICLO4

PORTB,F RETARDO PORTB,0 CICLO4 INICIO

; MOVER EL BIT HACIA LA DERECHA ; LLAMAR RETARDO ; BRINCA SI EL BIT 0 DE PORTB ESTA A UNO ; IR A CICLO4 ; IR A INICIO

0X18

; MOVER LA LITERAL A W

MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF BTFSS GOTO GOTO RETARDO MOVLW MOVWF CICLO1 DECFSZ GOTO RETURN CICLO2 MOVLW MOVWF CICLO3 DECFSZ GOTO GOTO NOPS NOP

PORTB RETARDO 0X24 PORTB RETARDO 0X42 PORTB RETARDO 0X81 PORTB RETARDO 0X42 PORTB RETARDO 0X24 PORTB RETARDO 0X18 PORTB PORTB,4 ??? INICIO

; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; BRINCA SI EL BIT 4 DE PORTB ESTA A 1 ; IR A ??? ; IR A INICIO

0X3F I

; MOVER LA LITERAL A W ; MUEVE W A I

I,F CICLO2

; DECREMENTA I Y SALTA SI ES 0 ; IR AL CICLO2 ; DEVOLVER

0XFF J

; MOVER LA LITERAL A W ; MOVER W A J

J,F NOPS CICLO1

; DECREMENTA J Y SALTA SI ES 0 ; IR A NOPS ; IR AL CICLO1

; NO HACER NADA

NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP GOTO END CICLO3

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; IR AL CICLO3

; directive 'end of program'

Circuito

CONCLUSION Con esta actividad aprendimos a utilizar el dipswitch para introducir datos a travs del puerto A encendiendo cada bit y dependiendo del bit que se encendiera se haca algo en el puerto B desde parpadear hasta hacer que vayan desde los bits de en medio hasta los de la orilla y de regreso, utilizando un retardo para que se alcance a distinguir como avanzan.

COLAGE2 INTRODUCCION En esta actividad se realizara lo mismo que se hizo en el programa pasado, pero la diferencia es que en el pasado metas los datos por el puerto A bit por bit, y en este programa se har restndole datos al puerto A con la ayuda de el dipswitch.

DESARROLLO Cdigos main


BSF CLRF MOVLW MOVWF BCF CLRF INICIO MOVLW SUBWF BTFSC GOTO MOVLW SUBWF BTFSC GOTO MOVLW SUBWF BTFSC GOTO MOVLW SUBWF BTFSC GOTO MOVLW SUBWF BTFSC GOTO 0X1F PORTA,W STATUS,Z APAGAR 0X1E PORTA,W STATUS,Z PARPADEAR 0X1D PORTA,W STATUS,Z CAMBIO 0X1C PORTA,W STATUS,Z IDA 0X1B PORTA,W STATUS,Z IDA_VUELTA ; AGREGAR LA LITERAL 0X1F(31) A W ; RESTARLE W(31) A PORTA ; BRINCA SI EL BIT Z DE STATUS ESTA A 0 ; IR A APAGAR ; MOVER LA LITERAL A W ; RESTARLE W A PORTA ; BRINCA SI EL BIT Z DE STATUS ESTA A 0 ; IR A PARPADEAR ; MOVER LA LITERAL A W ; RESTARLE W A PORTA ; BRINCA SI EL BIT Z DE STATUS ESTA A 0 ; IR A CAMBIO ; MOVER LA LITERAL A W ; RESTARLE W A PORTA ; BRINCA SI EL BIT Z DE STATUS ESTA A 0 ; IR A IDA ; MOVER LA LITERAL A W ; RESTARLE W A PORTA ; BRINCA SI EL BIT Z DE STATUS ESTA A 0 ; IR A IDA_VUELTA STATUS,RP0 TRISB 0X1F TRISA STATUS,RP0 PORTB ; ENCENDER EL BIT DEL REGISTRO(BANCO1) ; LIMPIAR TRISB ; MOVER LA LITERAL A W ; MOVER W A TRISA ; APAGAR EL BIT DEL REGISTRO(BANCO0) ; LIMPIAR PORTB

MOVLW SUBWF BTFSC GOTO CLRF GOTO PARPADEAR MOVLW MOVWF CALL CLRF CALL GOTO APAGAR CLRF GOTO CAMBIO MOVLW MOVWF CALL MOVLW MOVWF CALL GOTO IDA MOVLW MOVWF CALL CICLO MOVF ADDWF CALL BTFSS GOTO GOTO IDA_VUELTA MOVLW MOVWF

0X1A PORTA,W STATUS,Z ??? PORTB INICIO

; MOVER LA LITERAL A W ; RESTARLE W A PORTA ; BRINCA SI EL BIT Z DE STATUS ESTA A 0 ; IR A ??? ; LIMPIAR PORTB ; IR A INICIO

0XFF PORTB RETARDO PORTB RETARDO INICIO

; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; LIMPIAR PORTB ; LLAMAR RETARDO ; IR A INICIO

PORTB INICIO

; LIMPIAR PORTB ; IR A INICIO

0X0F PORTB RETARDO 0XF0 PORTB RETARDO INICIO

; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; IR A INICIO

0X01 PORTB RETARDO

; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO

PORTB,W PORTB,F RETARDO PORTB,7 CICLO INICIO

; MOVER PORTB A W ; AGRAGAR W CON PORTB ; LLAMAR RETARDO ; BRINCA SI EL BIT 7 DE PORTB ESTA A 1 ; IR A CICLO ; IR A INICIO

0X01 PORTB

; MOVER LA LITERAL A W ; MOVER W A PORTB

CALL BCF CICLOQ RLF CALL BTFSS GOTO CICLO4 RRF CALL BTFSS GOTO GOTO ??? MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF CALL MOVLW MOVWF BTFSS GOTO GOTO RETARDO

RETARDO STATUS,C

; LLAMAR RETARDO ; APAGAR EL BIT C DE STATUS

PORTB,F RETARDO PORTB,7 CICLOQ

; MOVER EL BIT HACIA LA IZQUIERDA ; LLAMAR RETARDO ; BRINCA SI EL BIT 7 DE PORTB ESTA A 1 ; IR A CICLOQ

PORTB,F RETARDO PORTB,0 CICLO4 INICIO

; MOVER EL BIT HACIA LA DERECHA ; LLAMAR A RETARDO ; BRINCA SI EL BIT 0 DE PORTB ESTA A 1 ; IR A CICLO4 ; IR A INICIO

0X18 PORTB RETARDO 0X24 PORTB RETARDO 0X42 PORTB RETARDO 0X81 PORTB RETARDO 0X42 PORTB RETARDO 0X24 PORTB RETARDO 0X18 PORTB PORTB,4 ??? INICIO

; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; BRINCA SI EL BIT 4 DE PORTB ESTA A 1 ; IR A ??? ; IR A INICIO

MOVLW MOVWF CICLO1 DECFSZ GOTO RETURN CICLO2 MOVLW MOVWF CICLO3 DECFSZ GOTO GOTO NOPS NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP GOTO END

0X3F I

; MOVER LA LITERAL A W ; MUEVE W A I

I,F CICLO2

; DECREMENTA I Y SALTA SI ES 0 ; IR AL CICLO2 ; DEVOLVER

0XFF J

; MOVER LA LITERAL A W ; MOVER W A J

J,F NOPS CICLO1

; DECREMENTA J Y SALTA SI ES 0 ; IR A NOPS ; IR AL CICLO1

; NO HACER NADA ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; CICLO3 ; IR AL CICLO3

; directive 'end of program'

Circuito

CONCLUSION Con esta actividad se aprendi a utilizar aun ms el dipswitch para restarle datos a un puerto, y que dependiendo del dato resultante se muestre algo en el puerto B, en este caso alguna accin realizada por los LEDs, estas actividades son las que usamos en la prctica pasada, pero a diferencia de esa prctica como ya lo mencione aqu depende del dato resultante de la resta que se hace; adems aprendimos a utilizar la banderilla Z de STATUS que se enciende cuando cualquier operacin lgica-aritmtica es igual a 0.

SUMA INTRODUCCION Con esta actividad se aprender a sumar dos nmeros de 4 bits utilizando el dipswitch y mostrando el resultado a travs de los LEDs, por lo que se necesitara modificar nuestro circuito para utilizar el puerto B de entrada y el puerto A de salida.

DESARROLLO Cdigos
Main BSF MOVLW MOVWF CLRF BCF CLRF INICIO MOVLW ANDWF MOVWF MOVLW ANDWF MOVWF MOVF SWAPF MOVF ADDWF MOVWF END 0X0F PORTB,W X 0XF0 PORTB,W Y Y,W Y,F Y,W X,W PORTA ; MOVER LA LITERAL 0X0F A W ; FILTRAR PORTB CON W ; MOVER W A X ; MOVER LA LITERAL A W ; FILTRAR PORTB CON W ; MOVER W A Y ; MOVER Y A W ; MOVER Y A LOS OTROS 4 BITS ; MOVER Y A W ; AGREGAR(SUMAR) W CON X ; MOVER W A PORTA STATUS,RP0 0XFF TRISB TRISA STATUS,RP0 PORTA ; ENCENDER EL BIT DEL REGISTRO(BANCO1) ; MOVER LA LITERAL A W ; MOVER W A TRISB ; LIMPIAR TRISA ; APAGAR EL BIT DEL REGISTRO(BANCO0) ; LIMPIAR PORTA

; directive 'end of program'

Circuito

CONCLUSION En esta prctica aprendimos a sumar dos nmeros de 4 bits utilizando un dipswitch por medio del puerto B, se utiliza este puerto porque son 2 nmeros de 4 bits por lo que se utilizan 8 bits y el puerto A solo tiene 5; como el puerto B se usa

de entrada, se usara al puerto A de salida. El nmero ms alto que se puede introducir en 4 bits es 15, por eso el nmero ms alto que se poda mostrar en el puerto A es 30. Para lograr configurar todo este programa aplicamos cosas ya aprendidas, pero lo nuevo que se aprendi en esta prctica es la utilizacin de los mnemnicos AND y SWAP. El AND que nos permiti cambiar a Y de lugar debido a que como se encontraba en los bits 4-7 y su valor era mayor a 15, as que con ayuda del SWAPF lo movimos al los bits 0-3 para que tuviera el valor que podamos meter, despus de eso utilizamos lo que ya aviamos aprendido para sumar y mostrar los datos.

S-ar putea să vă placă și