You are on page 1of 10

Ingeniero Técnico en

Telecomunicación
Universidad Politécnica de Cartagena Especialidad Telemática
Departamento de Electrónica, Tecnología de Computadoras y Proyectos.
Sistemas Electrónicos Digitales.
Alumnos: Pablo García Pita (pablogpita@gmail.com) Grupo XX Práctica Y. Curso 07/08
Manuel Jesús Bravo García (manueljesusbg@gmail.com)

Memoria Práctica 2

1. Esquema eléctrico
0

5V

27 pF C 1
4 MH z
C 27 pF
U 1
10k 10k 10k 10k 10k 10k 10k 10k

15

16
5
P IC 1 6 F 8 4
5V

O SC 1
O SC 2
Vss
13
12 R B 7 1k
11 R B 6 3
10 R B 5 R A 4 /T O C K I 2
9 R B 4 R A3 1
8 R B 3 R A2 18
7 R B 2 R A1 17
M C L R /V p p

6 R B 1 R A0
R B 0
VD D
14

4

5V

E0 E1 E2 E3 E4 E5 E6 E7
330 330 330 330 330 330 330 330

470 470 470 470 470 470 470 470

0 0 0 0 0 0 0 0

Pág. 1
Ingeniero Técnico en
Telecomunicación
Universidad Politécnica de Cartagena Especialidad Telemática
Departamento de Electrónica, Tecnología de Computadoras y Proyectos.
Sistemas Electrónicos Digitales.
Alumnos: Pablo García Pita (pablogpita@gmail.com) Grupo XX Práctica Y. Curso 07/08
Manuel Jesús Bravo García (manueljesusbg@gmail.com)
2. Diagrama de Flujo
SED07392

PORTA: SALIDA
PORTB:ENTRADA

Obtener  OP1, OP2

0 op1? 1 Suma

Resta

Result­­­>Port A

Pág. 2
Ingeniero Técnico en
Telecomunicación
Universidad Politécnica de Cartagena Especialidad Telemática
Departamento de Electrónica, Tecnología de Computadoras y Proyectos.
Sistemas Electrónicos Digitales.
Alumnos: Pablo García Pita (pablogpita@gmail.com) Grupo XX Práctica Y. Curso 07/08
Manuel Jesús Bravo García (manueljesusbg@gmail.com)

Obtener OP1 Y OP2

PORTB­> OP1
PORTB­>OP2

OP1 & Oxf­> OP1

OP2 & Ox70­> OP2

RETURN

Pág. 3
Ingeniero Técnico en
Telecomunicación
Universidad Politécnica de Cartagena Especialidad Telemática
Departamento de Electrónica, Tecnología de Computadoras y Proyectos.
Sistemas Electrónicos Digitales.
Alumnos: Pablo García Pita (pablogpita@gmail.com) Grupo XX Práctica Y. Curso 07/08
Manuel Jesús Bravo García (manueljesusbg@gmail.com)

Suma

OP2­> W

OP1+OP2­>w

W­>RS

W+RS­>RS

RETURN

Pág. 4
Ingeniero Técnico en
Telecomunicación
Universidad Politécnica de Cartagena Especialidad Telemática
Departamento de Electrónica, Tecnología de Computadoras y Proyectos.
Sistemas Electrónicos Digitales.
Alumnos: Pablo García Pita (pablogpita@gmail.com) Grupo XX Práctica Y. Curso 07/08
Manuel Jesús Bravo García (manueljesusbg@gmail.com)

RESTA

OP2­> W

OP1­OP2­>W

W­>RS

W+RS­>RS

W+RS­>RS

RETURN

Pág. 5
Ingeniero Técnico en
Telecomunicación
Universidad Politécnica de Cartagena Especialidad Telemática
Departamento de Electrónica, Tecnología de Computadoras y Proyectos.
Sistemas Electrónicos Digitales.
Alumnos: Pablo García Pita (pablogpita@gmail.com) Grupo XX Práctica Y. Curso 07/08
Manuel Jesús Bravo García (manueljesusbg@gmail.com)
3. Implementación del programa autocomentado.
;************************************************************************************
; Nombre: SED073902.asm
;
; Descripción: Operaciones Básicas con el PIC16F84
;
; Objetivo: Leer un código de operación "OP" (RB7) y dos operandos: OP1 (RB 0:3)
; y OP2 (RB 4:6). Si el código de operación OP es 0, se efectuará la operación
; 3*(OP1 - OP2), si el código de operación OP es 1, se efectuará la operación
; 2*(OP1+OP2)
;
; Fechas:
; Creación: 29/10/2007
; Última modificación: 19/09/2007
; Revisión:
;
; Autores: Pablo García Pita
; Manuel Jesús Bravo García
;************************************************************************************

; ZONA DE DATOS *********************************************************************

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ; frec. = 4000 KHz. ; Configuración del grabador.
LIST P=16F84A ;Procesador utlizado.
INCLUDE <P16F84A.INC> ;Definición de las instrucciones.
; ZONA DE CÓDIGO ********************************************************************

ORG 0 ;La primera instrucción que se ejecutará será la 0.
Inicio
OP1 EQU 0x0c ; Constante cuyo valor es la dirección de memoria 0x0c.
OP2 EQU 0x0d ; Constante cuyo valor es la dirección de memoria 0x0d.
RS EQU 0x0e ; Constante cuyo valor es la dirección de memoria 0x0f.
bsf STATUS, RP0 ; Acceso al Banco 1 (Ponemos un 1 en el bit RP0 del Registro de Estado.
movlw b'11111111' ; Cargamos 1111 1111 en el registro de trabajo
movwf TRISB ; para posteriormente llevarlo a TRISB y así configurar la puerta A como entrada.
clrf TRISA ; Cargamos d'0 para configurar la puerta A como entrada.
bcf STATUS,RP0 ; A partir de ahora accederemos al banco 0.

Principal
movlw b'00001111' ; Cargamos máscara a aplicar a OP2 en W
movwf OP1 ; y la llevamos a su registro.
movlw b'01110000' ; Cargamos máscara a aplicar a OP2 en W
movwf OP2 ; y la llevamos a su registro.
movf PORTB,0 ; Cargamos el acumulador con el contenido de la Puerta B (Contiene Cód. Operación, Operandos 1
; y 2)
andwf OP1,1 ; Aplicamos la máscara a OP1 y dejamos el resultado en OP1. Ya tenemos el valor de OP1.
andwf OP2,1 ; Aplicamos a OP2 su máscara y dejamos el resultado en OP2. Ya tenemos el valor de OP2.
swapf OP2,1 ; Intercambiamos de posición los nibbles de OP2 para aplicarle correctamente la máscara.
btfsc PORTB,7 ; Verificamos el valor del código de operación que estará en el bit 7 del registro de trabajo.
; Si este bit tiene un 0 salta a Opcion0. Si tiene un 1 salta a Opcion1.
goto Opcion1
goto Opcion0

Pág. 6
Ingeniero Técnico en
Telecomunicación
Universidad Politécnica de Cartagena Especialidad Telemática
Departamento de Electrónica, Tecnología de Computadoras y Proyectos.
Sistemas Electrónicos Digitales.
Alumnos: Pablo García Pita (pablogpita@gmail.com) Grupo XX Práctica Y. Curso 07/08
Manuel Jesús Bravo García (manueljesusbg@gmail.com)

Opcion0 ;3*(OP1-OP2)
;Resta Op2 a Op1. Si el resultado es negativo se indica con un 1 en el bit 5 del resultado.
;Si el resultado es positivo se indica con un 0 en el bit 5 del resultado.

bcf STATUS,0
bcf STATUS,1
movf OP2,0 ;Cargamos en W, el valor de op2
subwf OP1,0 ;HACEMOS OP1-OP2. (Restando a lo que hay en OP1 el contenido de W:OP2).Resultado de esta
;operación queda en W
movwf RS ;Llevamos el resultado de la resta a RES.
addwf RS,1 ; Para sumarlo de nuevo con W y de nuevo dejar el resultado en RES.(a+a=2a)
addwf RS,1 ;Sumamos a RES:2a el contenido de W (a). (2a+a=3a)
btfsc STATUS,0 ;Si el bit de Acarreo del registro de estado está 0, el resultado era positivo. Si estaba a
;uno era negativo.
;bcf RS,4 ;El resultado fue positivo, por eso ponemos un 0 en el bit 4 de RES,
;bsf RS,4 ;El resultado fue negativo, lo cual se indicará con un 1 en el 4 bit.
goto Resultado

Opcion1 ;2(OP1+OP2)
movf OP2,0 ;Cargamos en W, el valor de op2
addwf OP1,0 ;Hacemos OP1+OP2. (Sumamos a lo que hay en OP1 el contenido de W:OP2).El resultado de la
;operación queda en W.
movwf RS ;Llevamos el resultado de la suma a RES
addwf RS,1 ;Sumamos a RES el contenido de W. (a+a=2a)
;btfss STATUS,3 ;Comprobamos si hubo acarreo en el bit 3. Si lo hubo habrá un uno en ese bit.
;bcf RS,4 ;No hubo acarreo. Por lo que ponemos un 0 en el bit 4 de RS
;bsf RS,4 ;Sí hubo acarreo. Por lo que ponemos un 1 en el bit de accareo.

Resultado
movf RS,0
movwf PORTA
goto Principal

END

Pág. 7
Ingeniero Técnico en
Telecomunicación
Universidad Politécnica de Cartagena Especialidad Telemática
Departamento de Electrónica, Tecnología de Computadoras y Proyectos.
Sistemas Electrónicos Digitales.
Alumnos: Pablo García Pita (pablogpita@gmail.com) Grupo XX Práctica Y. Curso 07/08
Manuel Jesús Bravo García (manueljesusbg@gmail.com)
4. Dificultades encontradas y soluciones Aportadas
No sabíamos como hacer la separación de los distintos operadores y del código de operación.
El profesor nos indicó que debíamos aplicar máscaras con la operación AND a la entrada de la puerta
B. Además debíamos usar la instrucción swap (que intercambian los nibbles de un registro ) para
poder obtener operador 2.

Ejemplo:

Para obtener el operando 1 aplicamos la operación AND a la entrada de la puerta B con la
máscara 00001111

Pág. 8
Ingeniero Técnico en
Telecomunicación
Universidad Politécnica de Cartagena Especialidad Telemática
Departamento de Electrónica, Tecnología de Computadoras y Proyectos.
Sistemas Electrónicos Digitales.
Alumnos: Pablo García Pita (pablogpita@gmail.com) Grupo XX Práctica Y. Curso 07/08
Manuel Jesús Bravo García (manueljesusbg@gmail.com)
5. Cuestiones:

a)¿Es posible modificar el bit de Zero y Carry desde el programa?. Justifíquelo
con un ejemplo.

Es posible la modificación del bit Zero del Registro de Estado. Pues puede haber una
operación cuyo resultado en el acumulador sea 0:

movf OP2,0 ; Cargamos en W, el valor de op2
subwf OP1,0 ; HACEMOS OP1-OP2. (Restando a lo que hay en OP1 el contenido de
;W:OP2).Resultado de esta operación queda en W

Si Op1-Op2=0, se activa el bit Z.

También es posible que se active el bit C de Acarreo, pues en la operación de resta, si el
resultado es positivo o cero se pone a 1, si el resultado es negativo, se pone a 0.
movf OP2,0
subwf OP1,0

Si Op1-Op2>=0, entonces el bit C del Registro de Estado estará a 1.

2.¿Cuándo se modifica el bit Carry? Indique la página del datasheet donde es
indicado (baje de internet el datasheet del PIC16F84A para ello).

El bit de Carry se produce cuando hay un desbordamiento en el registro de trabajo W. El
funcionamiento del bit C del RE viene detallado en la página 8 del datasheet.

3. ¿Cuándo se modifica el bit Zero? Indique la página del datasheet donde se
indica.

El bit Z se pone a uno cuando hay una operación en el registro de trabajo cuyo resultado es 0.
En la página 8 del datasheet podemos encontrar igualmente el funcionamiento de este bit.

Pág. 9
Ingeniero Técnico en
Telecomunicación
Universidad Politécnica de Cartagena Especialidad Telemática
Departamento de Electrónica, Tecnología de Computadoras y Proyectos.
Sistemas Electrónicos Digitales.
Alumnos: Pablo García Pita (pablogpita@gmail.com) Grupo XX Práctica Y. Curso 07/08
Manuel Jesús Bravo García (manueljesusbg@gmail.com)
4. Calcule el tiempo que tarda el PIC en realizar la operación Suma y la operación
Resta: calcule desde la carga del valor de la puerta B en el Acumulador hasta la
presentación del resultado en la puerta A.

Op0 (Resta):

Principal: Líneas 48-51: 4 instrucciones Tipo 1
Línea 52: 1 instrucción Tipo 2
Línea 55: 1 instrucción Tipo2

Operacion0: Líneas 61-67: 7 instrucciones Tipo 1
Línea 72: 1 instrucción Tipo 2

Resultado: Líneas 88-89: 2 instrucciones Tipo 1
.

Tipo 1: 13 instrucciones
Tipo 2: 3 instrucciones que equivalen a 6 instrucciones tipo1.

Tenemos en total: 19 instrucciones

Un ciclo de reloj son 250 ns y un ciclo de instrucción Tipo 1 son 1000ns = 1us.

Por lo tanto la duración de la operación Resta: 19 instrucciones* 1us=19us.

Op1(Suma)

Principal: Líneas 48-51: 4 instrucciones Tipo 1
Línea 52: 1 instrucción Tipo 1
Línea 54: 1 instrucción Tipo2

Operacion1: Líneas 78-71: 4 instrucciones Tipo 1

Resultado: Líneas 88-89: 2 instrucciones Tipo 1

Tipo 1: 11 instrucciones
Tipo 2: 1 instrucciones que equivale a 2 instrucciones tipo1.

Tenemos en total:13 instrucciones

Un ciclo de reloj son 250 ns y un ciclo de instrucción Tipo 1 son 1000ns = 1us.

Por lo tanto la duración de la operación Suma: 13 instrucciones* 1us=13us.

Pág. 10