Documente Academic
Documente Profesional
Documente Cultură
PRACTICAS DE ENSAMBLADOR
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.
'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.
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
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.
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
; MOVER W A PORTB ; LLAMAR RETARDO ; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; IR A INICIO
0X3F I
I,F CICLO2
0XFF J
; NO HACER NADA ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
; ; ; ; IR AL CICLO3
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.
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
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.
NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP GOTO END CICLO3
; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; IR AL CICLO3
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.
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
; 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
; 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
; MOVER EL BIT HACIA LA IZQUIERDA ; LLAMAR RETARDO ; BRINCA SI EL BIT 7 DE PORTB ESTA A UNO ; IR A CICLOQ ; IR A CICLO4
; 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
I,F CICLO2
0XFF J
; 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
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.
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
; 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
; MOVER LA LITERAL A W ; MOVER W A PORTB ; LLAMAR RETARDO ; LIMPIAR PORTB ; LLAMAR RETARDO ; IR A INICIO
PORTB 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
; 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
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
; MOVER EL BIT HACIA LA IZQUIERDA ; LLAMAR RETARDO ; BRINCA SI EL BIT 7 DE PORTB ESTA A 1 ; IR A CICLOQ
; 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
I,F CICLO2
0XFF J
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
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.