Resolución en Ensamblador
Ejercicio 1; ----------------------------------------------------------- ; Descripción: ; Por el puerto B se obtiene el dato de las cinco líneas del ; puerto A al que está conectado un array de interrumptores. ; Por ejemplo, si por el puerto A se introduce "---11001",por ; el puerto B aparecerá "xxx11001" (el valor de las tres ; líneas superiores no importa. ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE <P16F84A.inc> __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c ; Vacío porque no se usan variables ENDC ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Vectores ORG 0x000 goto Inicio ; Vector de Reset ORG 0x004 retfie ; Vector de Interrupción ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'00011111 movwf TRISA ; PortA como entrada clrf TRISB ; PortB como salida bcf STATUS,RP0 Loop movf PORTA,W ; Valor de PORTA en W movwf PORTB ; Enciende LEDS correspondientes goto Loop ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 2
; ----------------------------------------------------------- ; Descripción: ; Por el puerto B se obtiene el dato de las cinco líneas del ; puerto A al que está conectado un array de interrutores, ; sumándole el valor de una constante. ; Es decir: (PORTB)=(PORTA)+Constante ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE <P16F84A.inc> __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c ; Inicio bloque de variables ; Vacío porque no se usan variables ENDC ; Fin bloque de variables ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Vectores ORG 0x000 goto Inicio ; Vector de Reset ORG 0x004 retfie ; Vector de Interrupción ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'00011111' movwf TRISA ; PortA como entrada clrf TRISB ; PortB como salida bcf STATUS,RP0 Loop movf PORTA,W ; Valor de PORTA en W addlw .10 ; Suma 10 al valor del PORTA (W) movwf PORTB ; Muestra la suma en PORTB goto Loop ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 3
; ----------------------------------------------------------- ; Descripción: ; Por el Puerto B se obtiene el dato del Puerto A multiplicado por 2. ; Es decir: (PORTB)=2*(PORTA)=(PORTA)+(PORTA) ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE <P16F84A.inc> __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c ; Vacio porque no se usan variables. ENDC ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Vectores ORG 0x000 goto Inicio ; Vector de Reset ORG 0x004 retfie ; Vector de Interrupción ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'00011111' movwf TRISA ; PortA como entrada clrf TRISB ; PortB como salida bcf STATUS,RP0 Loop ; ------------------------------------------------------- ; Hecho Por Suma ; ------------------------------------------------------- movf PORTA,W ; Valor de PORTA en W addwf PORTA,W ; Suma PORTA al valor del PORTA movwf PORTB ; Muestra la suma en PORTB goto Loop ; ------------------------------------------------------- ; Hecho Por Rotate ; ------------------------------------------------------- movf PORTA,W ; Copio el contenido de PORTA en W rlf W,W ; Roto a izquierda, ya que de ésta manera se ; multiplica por 2 movwf PORTB ; Muestra el resultado en PORTB goto Loop ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 4
; ----------------------------------------------------------- ; Descripción: ;Por el Puerto B obtiene el dato del Puerto A, pero en la salida los bits pares ;se fijan siempre a "1". El orden de los bits sera "b7 b6 b5 b4 b3 b2 b1 b0", ;siendo los pares b6, b4, b2 y b0. ;Por ejemplo, si por el Puerto A se introduce el dato b'---01100', por el ;Puerto B se visualizan b'01011101'. ;Observar que los bits pares están a "1" (efectivamente: ;Puerto B = b'x1x1x1x1')y los impares permanecen con el dato ;del puerto de entrada (efectivamente: Puerto A = b'---X1x0x y ;Puerto B = b'xxx1x0x').
; ----------------------------------------------------------- ; -----------------------------------------------------------; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE <P16F84A.inc> __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c var1 ; Contendrá el valor para la máscara ENDC ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Vectores ORG 0x000 goto Inicio ; Vector de Reset ORG 0x004 retfie ; Vector de Interrupción ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'00011111' movwf TRISA ; PortA como entrada clrf TRISB ; PortB como salida bcf STATUS,RP0 movlw b'01010101' ; Valor para la máscara movwf var1 ; Guardo valor de la máscara en var1 Loop movf PORTA,W ; Valor de PORTA en W iorwf var1,W ; Función OR (máscara) movwf PORTB ; Muestra el resultado en PORTB goto Loop
; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 5
; ----------------------------------------------------------- ; Descripción: ; Por el Puerto B obtiene el dato del Puerto A, pero en las ; salidas los bits impares se fijan siempre a "0". El orden ; de los bits será "b7 b6 b5 b4 b3 b2 b1 b0", siendo los ; impares el b7, b5, b3 y b1. ; Por ejemplo si por el Puerto A se introduce el dato ; b'---01100', por el Puerto B se visualiza b'00000100'. ; Observar que los bits impares están a "0" (efectivamente: ; Puerto B = b'0x0x0x0x') y los pares permanecen con el dato ; del puerto de entrada (efectivamente: ; Puerto A = b'---0x1x0' y Puerto B = b'---0x1x0'). ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE <P16F84A.inc> __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c var1 ; Contendrá el valor para la máscara ENDC ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Vectores ORG 0x000 goto Inicio ; Vector de Reset ORG 0x004 retfie ; Vector de Interrupción ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'00011111' movwf TRISA ; PortA como entrada clrf TRISB ; PortB como salida bcf STATUS,RP0 movlw b'01010101' ; Valor para la máscara movwf var1 ; Guardo valor de la máscara en var1 Loop movf PORTA,W ; Valor de PORTA en W andwf var1,W ; Función AND (máscara) movwf PORTB ; Muestra el resultado en PORTB goto Loop ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 6
; ----------------------------------------------------------- ; Descripción: ; Por el Puerto B se obtiene el dato del Puerto A invirtiendo ; los bits pares. Los impares se dejan como en la entrada. El ; orden de los bits será "b7 b6 b5 b4 b3 b2 b1 b0", siendo ; los pares el b6, b4, b2 y el b0. ; Por ejemplo, si por el Puerto A se introduce "---11001", por ; el Puerto B aparecerá "xxx01100". Observar que los bits ; pares están invertidos (efectivamente: Puerto A = "---1x0x1" ; y Puerto B = "xxxx0x1x0") y en los impares permanece el dato ; del puerto de entrada (efectivamente: Puerto A = "---x1x0x' ; y Puerto B = b'xxxx1x0x'). ; Ayuda: Utiliza la función XOR y la máscara b'01010101' ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Laboratorio 2
; E.T. N° 28 "República Francesa"
; Grupo: Leibovich, Núñez, Pedre
; 5to 4ta 2012 ; ----------------------------------------------------------- ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE <P16F84A.inc> __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c var1 ; Contendrá el valor para la máscara ENDC ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Vectores ORG 0x000 goto Inicio ; Vector de Reset ORG 0x004 retfie ; Vector de Interrupción ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'00011111' movwf TRISA ; PortA como entrada clrf TRISB ; PortB como salida bcf STATUS,RP0 movlw b'01010101' ; Valor para la máscara movwf var1 ; Guardo valor de la máscara en var1 Loop movf PORTA,W ; Valor de PORTA en W xorwf var1,W ; Función XOR (máscara) movwf PORTB ; Muestra el resultado en PORTB goto Loop ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 7
; ----------------------------------------------------------- ; Descripción: ; Por el Puerto B se obtiene el dato del Puerto A invertidos ; los unos y ceros. Por ejemplo, si por el Puerto A se ; introduce "---11001", por el Puerto B aparecerá "xxx00110" ; (no importa el estado de los tres bits superiores del ; Puerto B). ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE <P16F84A.inc> __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c ; No se usa variable ENDC ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Vectores ORG 0x000 goto Inicio ; Vector de Reset ORG 0x004 retfie ; Vector de Interrupción ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'00011111' movwf TRISA ; PortA como entrada clrf TRISB ; PortB como salida bcf STATUS,RP0 Loop movf PORTA,W ; Valor de PORTA en W comf W,W ; Función complemento movwf PORTB ; Muestra el resultado en PORTB goto Loop ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 8
; ----------------------------------------------------------- ; Descripción: ; Por el Puerto B obtiene el dato del Puerto A intercambiando ; los nibbles alto y bajo. Por ejemplo, si por el Puerto A ; se introduce "---11001" por el Puerto B aparecerá "1001xxx1". ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE <P16F84A.inc> __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c ; No se usa variable ENDC ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Vectores ORG 0x000 goto Inicio ; Vector de Reset ORG 0x004 retfie ; Vector de Interrupción ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'00011111' movwf TRISA ; PortA como entrada clrf TRISB ; PortB como salida bcf STATUS,RP0 Loop movf PORTA,W ; Valor de PORTA en W swapf W,W ; Cambia nibbles movwf PORTB ; Muestra el resultado en PORTB goto Loop ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 9
; ----------------------------------------------------------- ; Descripción: ; Por el Puerto B obtiene el dato del Puerto A desplazando ; un bit hacia la izquierda, por la derecha entrará un "1". ; Por ejemplo, si por el Puerto A se introduce "---11001", ; por el Puerto B aparecerá "xx110011" (no importa el ; estado de los dos bits superiores del Puerto B). ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE <P16F84A.inc> __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c ; No se usa variable ENDC ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Vectores ORG 0x000 goto Inicio ; Vector de Reset ORG 0x004 retfie ; Vector de Interrupción ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'00011111' movwf TRISA ; PortA como entrada clrf TRISB ; PortB como salida bcf STATUS,RP0 Loop bsf STATUS,C ; Carry en 1 movf PORTA,W ; Valor de PORTA en W rlf W,W ; Rota el valor de PORTA a izquierda movwf PORTB ; Muestra el resultado en PORTB goto Loop ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 10
; ----------------------------------------------------------- ; Descripción: ; Por el Puerto B se obtiene el dato del Puerto A desplazando ; un bit hacia la derecha, por la izquierda entrará un "0". ; Por ejemplo, si por el Puerto A se introduce "---11001", ; por el Puerto B aparecerá "0xxx1100". ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE <P16F84A.inc> __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c ; No se usa variable ENDC ; ----------------------------------------------------------- ; ----------------------------------------------------------- ; Vectores ORG 0x000 goto Inicio ; Vector de Reset ORG 0x004 retfie ; Vector de Interrupción ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'00011111' movwf TRISA ; PortA como entrada clrf TRISB ; PortB como salida bcf STATUS,RP0 Loop bcf STATUS,C ; Carry en 1 movf PORTA,W ; Valor de PORTA en W rrf W,W ; Rota el valor de PORTA a derecha movwf PORTB ; Muestra el resultado en PORTB goto Loop ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 11
; ----------------------------------------------------------- ; Descripción: ; Por el Puerto B se obtiene el dato de las cinco líneas del ; Puerto A al que está conectado un array de interruptores. ; Por ejemplo, si por el Puerto A se introduce "---110001" ; por el Puerto B aparecerá "xxx11001" (el valor de las tres ; líneas superiores no importa). ; Esta operación la realizará una única vez. Después el ; programa entrará en modo "Standby" o de bajo consumo del ; cual no podrá salir después. ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ;Variables CBLOCK 0x0c ; Vacío porque no se usan variables ENDC ; ----------------------------------------------------------- ;Vectores ORG 0x00 goto Inicio ; Vector de Reset ORG 0x04 retfie ; Vector de Interrupción ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio ; ------------------------------------------------------- bsf STATUS,RP0 ; Cambio de banco movlw b'11111' movwf TRISA ; Puerto A como entrada clrf TRISB ; Puerto B como salida bcf STATUS,RP0 ; Cambio de banco ; ------------------------------------------------------- movf PORTA,W ; Entrada a W movwf PORTB ; W a salida sleep ; Modo bajo consumo ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 12
; ----------------------------------------------------------- ; Descripción: ; Compara el dato del puerto de entrada PORTA con un "Numero" ; Tres posibilidades: ; - Si (PORTA)=Numero se encienden todos los LEDs de salida ; - Si (PORTA)>Numero se activan los LEDs pares de salida ; - Si (PORTA)<Numero se encienden los LEDs del nibble alto y ;se apagan los del bajo. ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302
; ----------------------------------------------------------- ; Variables: CBLOCK 0x0C numero ENDC ; ----------------------------------------------------------- ; Vectores: ORG 0x00 goto Inicio ORG 0x04 retfie ; ----------------------------------------------------------- ; Programa principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'11111' movwf TRISA clrf TRISB bcf STATUS,RP0 Loop movlw .2 movwf numero movf PORTA,W subwf numero,W ; ------------------------------------------------------- ; Comparaciones: ; ------------------------------------------------------- btfss STATUS,C ; Si carry está en cero quiere decir goto Menor ; que es menor. btfss STATUS,Z ; Si carry está en uno y Z en cero goto Mayor ; quiere decir que es mayor. goto Igual ; Sino, es igual. Mayor movlw b'01010101' movwf PORTB goto Loop Menor movlw b'11110000' movwf PORTB goto Loop Igual movlw b'11111111' movwf PORTB goto Loop ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 13
; ----------------------------------------------------------- ; Descripción: ; Un número binario de 8 bits es convertido a BCD. El resul- ; tado se guarda en tres posiciones de memoria llamadas ; Centenas, Decenas y Unidades. Además, al final las unidades ; estarán en el nibble bajo del registro W y las decenas en ; el nibble alto. En los diodos LEDs conectado al puerto de ; salida se visualizarán las decenas y las unidades. ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c Centenas Decenas Unidades ENDC ; ----------------------------------------------------------- ; Vectores ORG 0x00 goto Inicio ORG 0x04 retfie ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 clrf TRISB ; Puerto A como salida movlw b'11111111' movwf TRISA ; Puerto B como entrada bcf STATUS,RP0 Loop movf PORTB,W ; Entrada a W movwf Unidades ; Número listo para operar Resta movlw .10 ; 10 en W subwf Unidades,W ; Resto 10 a Unidades. Va a W btfss STATUS,C ; Salta si el Carry está en 1 goto Resultado ; Va a resultado, al finalizar la ; conversión SumaDecenas movwf Unidades ; El resultado de la resta a Unidades incf Decenas,F ; Sumo 1 a decenas movlw .10 ; 10 en W subwf Decenas,W ; Resto 10 a decenas. Va a W btfss STATUS,C ; Salta si el Carry está en 1 goto Resta SumaCentenas clrf Decenas ; Borro el contenido de decenas incf Centenas,F ; Sumo 1 a centenas goto Resta Resultado swapf Decenas,W ; Valor de decenas en nibble alto. A W addwf Unidades,W ; Le sumo las unidades movwf PORTA ; Lo muestro en la salida goto Loop ; Vuelve a empezar ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 14
; ----------------------------------------------------------- ; Descripción: ; Controla el nivel de un líquido. Utiliza: ; · Tres sondas detectoras: ; # SV, Sonda de Vacío (RA0) ; # SLL, Sonda de Llenado (RA1) ; # SR, Sonda de Rebose (RA2) ; · Dos bombas de agua: ; # B1 (RB5) ; # B2 (RB6) ; · Cinco indicadores: ; # Vacío (RB0) ; # Llenandose (RB1) ; # Lleno (RB2) ; # Rebose (RB3) ; # Alarma (RB4) ; Funcionamiento: ; · Cuando ninguna de las sondas está mojada se entiende ; que el depósito está vacío y se accionarán las dos bombas ; · Cuando el nivel del líquido toque la sona de vacío "SV" ; seguirá llenándose el depósito con las dos bombas. El ; indicador "Llenandose" se ilumina. ; Cuando el nivel del líquido toca la sonda de llenado"SSL", ; para la bomba B2, quedando B1 activada en modo ; mantenimiento. ; · Si el nivel del líquido moja la sonda de rebose "SR" ; se apaga también la bomba B1, quedando las dos bombas ; fuera de servicio. El indicador "Rebose" se enciende. ; · Cuando se produce un fallo o mal funcionamiento en las ; sondas de entrada (por ejemplo que se active la sonda de ; rebose y no active la de vacío) se paran las dos bombas. ; El indicador "Alarma" se ilumina. ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c ; Vacío porque no uso variables ENDC ; ----------------------------------------------------------- ;Equivalencias SV EQU 0 ; A SLL EQU 1 ; A SR EQU 2 ; A B1 EQU 5 ; B B2 EQU 6 ; B Vacio EQU 0 ; B Llenandose EQU 1 ; B Lleno EQU 2 ; B Rebose EQU 3 ; B Alarma EQU 4 ; B ; ----------------------------------------------------------- ;Vectores ORG 0x00 goto Inicio ORG 0x04 retfie ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'111' movwf TRISA ; Puerto A como entrada clrf TRISB ; Puerto B como salida bcf STATUS,RP0 Loop btfsc PORTA,SV goto FuncLlenandose btfsc PORTA,SLL goto SonarAlarma btfsc PORTA,SR goto Alarma goto FuncVacio FuncVacio bsf PORTB,Vacio bsf PORTB,B1 bsf PORTB,B2 goto Loop FuncLlenandose btfsc PORTA,SLL goto FuncLleno bsf PORTB,Llenandose btfsc PORTA,SR goto Loop FuncLleno btfsc PORTA,SR goto FuncRebose bcf PORTB,B2 bsf PORTB,Lleno goto Loop FuncRebose bcf PORTB,B1 bsf PORTB,Rebose goto Loop SonarAlarma bcf PORTB,B1 bcf PORTB,B2 bcf PORTB,Vacio bcf PORTB,Llenandose bcf PORTB,Lleno bcf PORTB,Rebose bsf PORTB,Alarma goto Loop ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 15
; ----------------------------------------------------------- ; Descripción: ; Por el display de 7 segmentos conectado al Puerto B se ; visualiza una de las 26 letras del alfabeto internacional: ; de la "A" a la "Z". La letra a visualizar lo determina el ; orden leído por el Puerto A. Así por ejemplo: ; Si por el Puerto A se lee "---0000" (cero) la letra ; visualizada será la "A" que es la que está en el orden cero. ; Si por el Puerto A se lee "---1101" (veinticinco) la letra ; visualizada será la "Z" que es la que está en el orden ; veinticinco. ; Por ahora no se contempla la posibilidad que el número de ; entrada sea mayor de 25. ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c ; Vacío porque no uso variables ENDC ; ----------------------------------------------------------- ;Vectores ORG 0x00 goto Inicio ORG 0x04 retfie ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'11111' movwf TRISA ; Puerto A como entrada clrf TRISB ; Puerto B como salida bcf STATUS,RP0 Loop btfss PORTA,4 goto MenorIgual15 btfss PORTA,3 goto Mayor15MenorIgual23 btfss PORTA,0 ;Código para escribir letra Y ;Código para escribir letra Z goto Loop Mayor15MenorIgual23 btfss PORTA,2 goto Mayor15MenorIgual20 btfss PORTA,1 goto Mayor20MenorIgual23 btfss PORTA,0 ;Código para escribir letra W ;Código para escribir letra X goto Loop Mayor20MenorIgual23 btfss PORTA,0 ;Código para escribir letra U ;Código para escribir letra V goto Loop Mayor15MenorIgual20 btfss PORTA,1 goto Mayor15MenorIgual19 btfss PORTA,0 ;Código para escribir letra S ;Código para escribir letra T goto Loop Mayor15MenorIgual19 btfss PORTA,0 ;Código para escribir letra Q ;Código para escribir letra R goto Loop MenorIgual15 btfss PORTA,3 goto MenorIgual7 btfss PORTA,2 goto Mayor7MenorIgual11 btfss PORTA,1 goto Mayor11MenorIgual15 btfss PORTA,0 ;Código para escribir letra O ;Código para escribir letra P goto Loop Mayor11MenorIgual15 btfss PORTA,0 ;Código para escribir letra M ;Código para escribir letra N Mayor7MenorIgual11 btfss PORTA,1 goto Mayor7MenorIgual12 btfss PORTA,0 ;Código para escribir letra K ;Código para escribir letra L goto Loop Mayor7MenorIgual12 btfss PORTA,0 ;Código para escribir letra I ;Código para escribir letra J goto Loop MenorIgual7 btfss PORTA,2 goto MenorIgual3 btfss PORTA,1 goto Mayor3MenorIgual7 btfss PORTA,0 ;Código para escribir letra G ;Código para escribir letra H goto Loop Mayor3MenorIgual7 btfss PORTA,0 ;Código para escribir letra E ;Código para escribir letra F goto Loop MenorIgual3 btfss PORTA,1 goto Mayor1MenorIgual3 btfss PORTA,0 ;Código para escribir letra C ;Código para escribir letra D goto Loop Mayor1MenorIgual3 btfss PORTA,0 ;Código para escribir letra A ;Código para escribir letra B ; ----------------------------------------------------------- END ; -----------------------------------------------------------
Ejercicio 16
; ----------------------------------------------------------- ; Descripción: ; Los diodos pares conectados al puerto de salida se encienden ; durante 0,5 segundos y los impares permanecen apagados. ; Después al contrario durante el mismo tiempo. ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c delay1 delay2 delay3 ENDC ; ----------------------------------------------------------- ;Equivalencias pares EQU b'01010101' impares EQU b'10101010' ; ----------------------------------------------------------- ;Vectores ORG 0x00 goto Inicio ORG 0x04 retfie ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'11111' movwf TRISA ; Puerto A como entrada clrf TRISB ; Puerto B como salida bcf STATUS,RP0 Loop movlw pares movwf PORTB call Delay_500ms movlw impares movwf PORTB call Delay_500ms goto Loop Delay_500ms movlw d'5' movwf delay3 Delay_500ms_2 movlw d'100' movwf delay2 Delay_500ms_1 movlw d'249' movwf delay1 Delay_500ms_0 nop decfsz delay1,F goto Delay_500ms_0 decfsz delay2,F goto Delay_500ms_1 decfsz delay3,F goto Delay_500ms_2 return ; --------------------------------------------------------- END ; ---------------------------------------------------------
Ejercicio 17
; ----------------------------------------------------------- ; Descripción: ; Por la barra de diodos leds conectada al puerto de salida, ; un led encendido rota a la izquierda 0,3 s en cada posición. ; Cuando llega al final se apagan todos los leds y repite de ; nuevo la operación. ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c d1 d2 var1 ENDC ; ----------------------------------------------------------- ;Equivalencias ; ----------------------------------------------------------- ;Vectores ORG 0x00 goto Inicio ORG 0x04 retfie ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'11111' movwf TRISA ; Puerto A como entrada clrf TRISB ; Puerto B como salida bcf STATUS,RP0 bsf STATUS,C movlw 0x00 movwf var1 Loop rlf var1,F movf var1,W movwf PORTB call Delay_300ms goto Loop Delay_300ms movlw 0x5E movwf d1 movlw 0xEB movwf d2 Delay_300ms_0 decfsz d1, f goto $+2 decfsz d2, f goto Delay_300ms_0 goto $+1 nop return ; --------------------------------------------------------- END ; ---------------------------------------------------------
Ejercicio 18
; ----------------------------------------------------------- ; Descripción: ; Por la barra de LEDs conectada al puerto de salida un LED ; encendido rota a la izquierda durante 0.5 s en cada posición ; empezando por la línea RB0. El número de posiciones a ; desplazar lo fija el valor de las tres primeras líneas del ; Puerto A entrada. ; Así por ejemplo, si (PORTA)=b'---00011' (3 decimal), la ; secuencia de salida sería: ; 00000000, 00000001, 00000010, 00000100, 00000000, 00000001, ; 00000010,... ( y repite) ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c delay1 delay2 delay3 veces ENDC ; ----------------------------------------------------------- ;Equivalencias ; ----------------------------------------------------------- ;Vectores ORG 0x00 goto Inicio ORG 0x04 retfie ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'111' movwf TRISA ; Puerto A como entrada clrf TRISB ; Puerto B como salida bcf STATUS,RP0 Loop movf PORTA,W movwf veces bsf STATUS,C movlw b'0' movwf PORTB btfsc PORTA,2 goto Rotacion btfsc PORTA,1 goto Rotacion btfsc PORTA,0 goto Rotacion goto Loop Rotacion rlf W,W movwf PORTB call Delay_500ms decfsz veces,F goto Rotacion goto Loop Delay_500ms movlw d'5' movwf delay3 Delay_500ms_2 movlw d'100' movwf delay2 Delay_500ms_1 movlw d'249' movwf delay1 Delay_500ms_0 nop decfsz delay1,F goto Delay_500ms_0 decfsz delay2,F goto Delay_500ms_1 decfsz delay3,F goto Delay_500ms_2 return ; --------------------------------------------------------- END ; ---------------------------------------------------------
Ejercicio 19
Ejercicio 20
; ----------------------------------------------------------- ; Descripción: ; Si la línea RA0 del Puerto A es "0", por el display se ; visualiza un contador descendente (9, 8, 7, 6, 5, 4, 3, 2, ; 1, 0, 9, ..) con una cadencia de 0,5 segundos. ; Si la línea RA0 del Puerto A es "1", por el display se ; visualizará un contador ascendente (0, 1, 2, 3, 5, 6, 7, 8, ; 9, 0, 1, 2, ..) con una cadencia de 0,5 s. ; ----------------------------------------------------------- ; Laboratorio 2 ; E.T. N° 28 "República Francesa" ; Grupo: Leibovich, Núñez, Pedre ; 5to 4ta 2012 ; ----------------------------------------------------------- LIST p=PIC16F84A INCLUDE__CONFIG _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF ERRORLEVEL -302 ; ----------------------------------------------------------- ; Variables CBLOCK 0x0c delay1 delay2 delay3 veces ENDC ; ----------------------------------------------------------- ;Equivalencias #DEFINE Mostrar0 movlw b'0111111' #DEFINE Mostrar1 movlw b'0000110' #DEFINE Mostrar2 movlw b'1011011' #DEFINE Mostrar3 movlw b'1001111' #DEFINE Mostrar4 movlw b'1100110' #DEFINE Mostrar5 movlw b'1101101' #DEFINE Mostrar6 movlw b'1111101' #DEFINE Mostrar7 movlw b'0000111' #DEFINE Mostrar8 movlw b'1111111' #DEFINE Mostrar9 movlw b'1101111' ; ----------------------------------------------------------- ;Vectores ORG 0x00 goto Inicio ORG 0x04 retfie ; ----------------------------------------------------------- ; Programa Principal ; ----------------------------------------------------------- Inicio bsf STATUS,RP0 movlw b'1' movwf TRISA ; Puerto A como entrada clrf TRISB ; Puerto B como salida bcf STATUS,RP0 Loop btfss PORTA,0 goto ContadorAscendente goto ContadorDescendente ContadorAscendente Mostrar0 movwf PORTB call Delay_500ms Mostrar1 movwf PORTB call Delay_500ms Mostrar2 movwf PORTB call Delay_500ms Mostrar3 movwf PORTB call Delay_500ms Mostrar4 movwf PORTB call Delay_500ms Mostrar5 movwf PORTB call Delay_500ms Mostrar6 movwf PORTB call Delay_500ms Mostrar7 movwf PORTB call Delay_500ms Mostrar8 movwf PORTB call Delay_500ms Mostrar9 movwf PORTB call Delay_500ms goto Loop ContadorDescendente Mostrar9 movwf PORTB call Delay_500ms Mostrar8 movwf PORTB call Delay_500ms Mostrar7 movwf PORTB call Delay_500ms Mostrar6 movwf PORTB call Delay_500ms Mostrar5 movwf PORTB call Delay_500ms Mostrar4 movwf PORTB call Delay_500ms Mostrar3 movwf PORTB call Delay_500ms Mostrar2 movwf PORTB call Delay_500ms Mostrar1 movwf PORTB call Delay_500ms Mostrar0 movwf PORTB call Delay_500ms goto Loop Delay_500ms movlw d'5' movwf delay3 Delay_500ms_2 movlw d'100' movwf delay2 Delay_500ms_1 movlw d'249' movwf delay1 Delay_500ms_0 nop decfsz delay1,F goto Delay_500ms_0 decfsz delay2,F goto Delay_500ms_1 decfsz delay3,F goto Delay_500ms_2 return ; --------------------------------------------------------- END ; ---------------------------------------------------------
Resolución en C
#include <ej1.h>Ejercicio 2void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); set_tris_b(0xff); // PuertoB como entrada set_tris_a(0x00); // PuertoA como salida while (TRUE) { output_b(input_a()); } } ej1.h: #include <16f84a .h=".h"> #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)
#include <ej2.h>Ejercicio 3void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); set_tris_b(0xff); // PuertoB como entrada set_tris_a(0x00); // PuertoA como salida while(TRUE) { output_b(input_a()+5); } } ej2.h: #include <16f84 .h=".h"> #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)
#include <ej3.h>Ejercicio 4void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); set_tris_a(0xFF) set_tris_b(0x00) while (TRUE) { output_b(input_a()+input_a()); } } ej3.h: #include <16f84 .h=".h"> #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)
#include <ej4.h>Ejercicio 5void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); set_tris_a(0xFF); set_tris_b(0x00); while(TRUE) { output_b(input_a()|0b01010101); } } ej4.h: #include <16f84 .h=".h"> #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)
#include <ej5.h>Ejercicio 6void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); set_tris_a(0xFF); set_tris_b(0x00); while(TRUE) { output_b(input_a()&0b01010101); } } ej5.h: #include <16f84a .h=".h"> #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)
#include <ej6.h>Ejercicio 7void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); set_tris_a(0xFF); set_tris_b(0x00); while(TRUE) { output_b(input_a()^0b01010101); } } ej6.h: #include <16f84a .h=".h"> #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)
#include <ej7.h> void main(){ setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); output_b(~input_a()); } ej7.h: #include <16f84a .h=".h"> #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)Ejercicio 8
#include <ej8.h>Ejercicio 9void main() { setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); output_b(swap(input_a())); } ej8.h: #include <16f84a .h=".h"> #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)
#include <ej9.h>Ejercicio 10void main(){ setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); int8 numero; set_tris_b(0x00); set_tris_a(0xFF); while(TRUE){ numero=input_a(); rotate_left(&numero,1); output_b(numero|0x01); } } ej9.h: #include <16f84a .h=".h"> #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)
#include <ej10.h>Ejercicio 11void main(){ setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); int8 numero; set_tris_b(0xFF); set_tris_a(0x00); while(TRUE){ numero=input_a(); rotate_right(&numero,1); output_b(numero); } } ej10.h: #include <16f84a .h=".h"> #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)
#include <ej11.h>Ejercicio 12void main(){ setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); set_tris_a(0xFF); set_tris_b(0x00); output_b(input_a()); sleep(); } ej11.h: #include <16f84a .h=".h"> #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)
#include <ej12.h>Ejercicio 13void main(){ setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); set_tris_a(0xFF); set_tris_b(0x00); int8 numeroEntrada; int8 numeroComparar=4; while(TRUE){ numeroEntrada=input_a(); if(numeroEntrada==numeroComparar){ output_b(0xFF); }else{ if(numeroEntrada #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)
#include <ej13.h>Ejercicio 14void main(){ setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); set_tris_a(0xFF); set_tris_b(0x00); int8 numero; int8 centenas; int8 decenas; int8 unidades; while(TRUE){ numero=input_a(); if(numero>=100){ do{ numero=numero-100; centenas=centenas+1; }while(numero>=100); } if(numero>=10){ do{ numero=numero-10; decenas=decenas+1; }while(numero>=10); } unidades=numero; rotate_left(&decenas,4); output_b(decenas|unidades); } } ej13.h: #include <16f84a .h=".h"> #FUSES NOWDT //No Watch Dog Timer #FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #use delay(clock=4000000)
Ejercicio 15
Ejercicio 16
Ejercicio 17
Ejercicio 18
Ejercicio 19
Ejercicio 20
No hay comentarios:
Publicar un comentario