0% encontró este documento útil (0 votos)
51 vistas9 páginas

Lovera - Tarea-1 Al 4

El documento presenta tres ejercicios de programación en lenguaje ensamblador para el microcontrolador PIC16F84A. El primer ejercicio consiste en encender y apagar un LED conectado al pin RA0. El segundo ejercicio obtiene el complemento del dato que ingresa por el puerto A en el puerto B. El tercer ejercicio multiplica por tres el dato del puerto A y lo muestra en el puerto B.

Cargado por

emersonlovera03
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
51 vistas9 páginas

Lovera - Tarea-1 Al 4

El documento presenta tres ejercicios de programación en lenguaje ensamblador para el microcontrolador PIC16F84A. El primer ejercicio consiste en encender y apagar un LED conectado al pin RA0. El segundo ejercicio obtiene el complemento del dato que ingresa por el puerto A en el puerto B. El tercer ejercicio multiplica por tres el dato del puerto A y lo muestra en el puerto B.

Cargado por

emersonlovera03
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

Alumno: Emerson Ricardo Lovera Peña Ciclo:IX Salon:B

Ejercicios resueltos de Microcontroladores

Lenguaje de programación Nivel 0

Nota: Para todos los ejercicios, realizar su diagrama de flujo, simularlo en Proteus con el
PIC16F84A.

1. Hacer un programa en Assembler para encender y apagar un led conectado al pin RA0
del Microcontrolador 16F84A.
Solución:

LIST P=16F84A ; Selecciona el tipo de procesador, preparándolo para el proceso de ensamblaje


INCLUDE <P16F84A.INC> ; Incorpora todas la etiquetas y referencias
CONT1 EQU 0X20 ; Define la variable CONT1 con el valor indicado
CONT2 EQU 0X21 ; Define la variable CONT2 con el valor indicado
ORG 0x00 ; Selecciona el origen del programa
GOTO INICIO ;Manda al INICIO
ORG 0x05
INICIO bsf STATUS, RP0 ;Pone a 1 el bit RP0, accediendo al banco1
clrf TRISA ;Se pone a 0 todos los bits del registro A, se utilizan como salida
bcf STATUS,RP0 ;Se pone a 0 el bit RP0, regresando al banco 0
ENCLED bsf PORTA, 0 ;Se pone a 1 el bit 0 del registro PORTA
call RETARDO ;Se llama a la función RETARDO
bcf PORTA,0 ;Se pone a 0 el bit 0 del registro PORTA
call RETARDO ;Se llama a la función RETARDO
GOTO ENCLED ;Regresamos a la función ENCLED
RETARDO movlw 0xff
movwf CONT1
REP1 movlw 0xff
movwf CONT2
REP2 decfsz CONT2, 1
GOTO REP2
decfsz CONT1,1
GOTO REP1
RETURN
END

C1

1nF
X1 U1
16 17
C2 15
OSC1/CLKIN RA0
18
OSC2/CLKOUT RA1
1
RA2
4 2
MCLR RA3
1nF
RA4/T0CKI
3 R2
330
6
RB0/INT
R1 RB1
7
10k 8
RB2
9
RB3
RB4
10 D1
11
RB5
12
RB6
13
RB7
PIC16F84A
Diagrama de Flujo

INICIO

Configurar el puerto
TRISA como salida

Encender LED, bit 0


del registro PORTA

Tiempo de encendido
del LED

Apagar LED, bit 0 del


registro PORTA

Tiempo de apagado
del LED

FIN

Simulado en Proteus
2. Hacer un programa en Assembler de tal manera que por el puerto B se obtenga el dato
complementado del dato que ingresa por el puerto A del Microcontrolador PIC 16f84A.
Solución

LIST P=16f84A ; Selecciona el tipo de procesador, preparándolo para el proceso de ensamblaje


INCLUDE "P16F84A.INC" ; Incorpora todas la etiquetas y referencias
COMPLEMENTO EQU 0X0C ;Define la variable COMPLEMENTO con el valor indicado
ORG 0X00 ;Selecciona el origen del programa
GOTO INICIO ;Manda a INICIO
ORG 0X05
INICIO bsf STATUS,5 ;Pone a 1 el bit RP0, accede al banco 1
Movlw 0XFF ;Se carga el valor de FF en W
Movwf TRISA ;Se carga el valor de W en el registro TRISA, activa las entradas digitales
Clrf TRISB ;Se pone a 0 todos los bits del registro TRISB, se usan como salidas digitales
Bcf STATUS,5 ;Se pone a 0 el bit RP0, regresa al banco 0
BUCLE movf PORTA,0 ;El valor del registro PORTA se guarda en W
Movwf COMPLEMENTO ;La variable COMPLEMENTO toma el valor de W
Comf COMPLEMENTO,0 ; Complemento de la variable y se guarda en W
Movwf PORTB ;El registro PORTB toma el valor de W
GOTO BUCLE ;Regresamos a la función BUCLE
END

0
1
0
C1 1
0
1nF
X1 U1
16 17
C2 15
OSC1/CLKIN RA0
18
OSC2/CLKOUT RA1
1
RA2
4 2
MCLR RA3
1nF 3
RA4/T0CKI

RB0/INT
6 1
R1 RB1
7
8
0
10k RB2
RB3
9 1
10
RB4
RB5
11 0
12
RB6
RB7
13 1
PIC16F84A
Diagrama de Flujo

INICIO

Configurar los puertos, TRISA como


ENTRADA y TRISB como SALIDA

PORTA se guarda en W

COMPLEMENTO=W

Se realiza la operación
complemento y se guarda en W

PORTB=W

FIN

Simulado en Proteus
3. Hacer un código en Assembler para obtener por el puerto B el dato del puerto A
multiplicado por tres
Solución:

LIST P=16F84A ; Selecciona el tipo de procesador, preparándolo para el proceso de ensamblaje


INCLUDE "P16F84A.INC" ; Incorpora todas la etiquetas y referencias
SUMA1 EQU 0X0C ;Define la variable SUMA1 con el valor indicado
SUMA2 EQU 0X0D ;Define la variable SUMA2 con el valor indicado
ORG 0X00 ;Selecciona el origen del programa
GOTO INICIO ;Manda a INICIO
ORG 0X05
INICIO bsf STATUS,5 ;Se pone a 1 el bit RB0, accedes al banco 1
movlw 0XFF;Se carga el valor de FF en W
movwf TRISA ;Se carga el valor de W al registro TRISA, se usan como entradas digitales
clrf TRISB ;Se pone a 0 todos los bits del registro TRISB, se usa como salidas digitales
bcf STATUS,5 ;Se pone a 0 el bit RB0, regresas al banco 0
clrf PORTA ;Se pone a 0 todos los bits del registro PORTA
clrf PORTB ;Se pone a 0 todos los bits del registro PORTB
;…………………………………….
BUCLE movf PORTA,0 ;El valor de PORTA en cargado en W
addwf PORTA,0 ;Se suma el valor de PORTA con W y se guarda en W
movwf SUMA1 ;SUMA1 toma el valor de W

movf PORTA,0 ;El valor de PORTA es cargado en W


addwf SUMA1,0 ;Se suma el valor de SUMA1 con W y se guarda en W
movwf PORTB ;El registro PORTB toma el valor de W
GOTO BUCLE ;Regresa a la función BUCLE
END
0
0
0
1
1

U1
16 17
OSC1/CLKIN RA0
15 18
OSC2/CLKOUT RA1
1
RA2
4 2
MCLR RA3
3
RA4/T0CKI
6
RB0/INT
7
RB1
R1 RB2
8
10k 9
RB3
10
RB4
11
RB5
12
RB6
13
RB7
PIC16F84A
0
0
0
0
1
0
0
1
Diagrama de Flujo

INICIO

Configurar los puertos, TRISA como


ENTRADA y TRISB como SALIDA

PORTA se guarda en W

PORTA + W =W=SUMA 1

PORTA=W

SUMA1+W=W

PORTB=W

FIN

Simulado en Proteus
4. Hacer un código en Assembler para obtener por el puerto B el dato del puerto A
intercambiado los nibles alto y bajo.
Solución:

LIST P=16F84A ; Selecciona el tipo de procesador, preparándolo para el proceso de ensamblaje


INCLUDE <P16F84A.INC> ; Incorpora todas la etiquetas y referencias
;……………………………………...
INTERCAMB EQU 0X0C ;Define la variable INTERCAMB con el valor indicado
ORG 0X00 ;Selecciona el origen del programa
GOTO INICIO ;Manda a INICIO
ORG 0X05
;………………………………….....
INICIO bsf STATUS,5 ;Pone a 1 el bit RB0 del STATUS, accede al banco 1
movlw 0xff ;Carga el valor de FF en W
movwf TRISA ;El registro TRISA toma el valor de W, se usa como entradas
clrf TRISB ;Se pone a 0 todos los bits del registro TRISB, se usa como salidas
bcf STATUS,5 ;Se pone a 0 el bit RB0, regresando al banco 0
;………………………………………
BUCLE movf PORTA,0 ;El valor de PORTA se guarda en W
movwf INTERCAMB ;La variable INTERCAMB toma el valor de W
swapf INTERCAMB,0 ;Se realiza el intercambio de bits y se guarda en W
movwf PORTB ;El registro PORTB toma el valor de W
GOTO BUCLE ;Regresa a la función BUCLE
END

R2 R3 R4 R5 R6
10k 10k 10k 10k 10k

U1
16 17
OSC1/CLKIN RA0
15 18
OSC2/CLKOUT RA1
1
RA2
4 2
MCLR RA3
3
RA4/T0CKI
6
RB0/INT
7
RB1
R1 RB2
8
10k 9
RB3
10
RB4
11
RB5
12
RB6
13
RB7
PIC16F84A

R7 R8 R9 R10R11R12R13R14
330 330 330 330 330 330 330 330
Diagrama de Flujo
INICIO

Configurar los puertos, TRISA como


ENTRADA y TRISB como SALIDA

PORTA se guarda en W

INTERCAMB=W

Se realiza el intercambio de los bits de la


variable INTERCAMB y se guarda en W

PORTB=W

FIN

Simulado en Proteus

También podría gustarte