lunes, 9 de julio de 2012

Trabajo Práctico Nº5

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


Ejercicio 1
#include <ej1.h>

void 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)
Ejercicio 2
#include <ej2.h>

void 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)
Ejercicio 3
#include <ej3.h>

void 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)
Ejercicio 4
#include <ej4.h>

void 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)
Ejercicio 5
#include <ej5.h>

void 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)
Ejercicio 6
#include <ej6.h>

void 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)
Ejercicio 7
#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>

void 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)
Ejercicio 9
#include <ej9.h>

void 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)
Ejercicio 10
#include <ej10.h>

void 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)
Ejercicio 11
#include <ej11.h>

void 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)
Ejercicio 12
#include <ej12.h>

void 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)
Ejercicio 13
#include <ej13.h>

void 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 14

Ejercicio 15

Ejercicio 16

Ejercicio 17

Ejercicio 18

Ejercicio 19

Ejercicio 20

No hay comentarios:

Publicar un comentario