Universidad Politécnica de Cartagena Grupo Alumnos: Pablo García Pita (pablogpita@gmail.

com) Manuel Jesús Bravo García (manueljesusbg@gmail.com)

Ingeniero Técnico en Telecomunicación Especialidad Telemática

Departamento de Electrónica, Tecnología de Computadoras y Proyectos. Sistemas Electrónicos Digitales.

XX Práctica Y. Curso 07/08

Memoria Práctica 2
1. Esquema eléctrico
0 5V
27 pF 4 MHz C 15 16 OSC1 5 10k 10k 10k 10k 10k 10k 10k 10k C1 27 pF U1 PIC16F84 OSC2 Vss

5V
1k 3 2 1 18 17

14

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

4

MCLR/Vpp

13 12 11 10 9 8 7 6

VDD

RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

RA4/TOCKI RA3 RA2 RA1 RA0

Pág. 1

Universidad Politécnica de Cartagena Grupo Alumnos: Pablo García Pita (pablogpita@gmail.com) Manuel Jesús Bravo García (manueljesusbg@gmail.com)

Ingeniero Técnico en Telecomunicación Especialidad Telemática

Departamento de Electrónica, Tecnología de Computadoras y Proyectos. Sistemas Electrónicos Digitales.

XX Práctica Y. Curso 07/08

2. Diagrama de Flujo
S ED07392

P ORTA: S ALIDA P ORTB:ENTRADA

Obte ne r OP 1, OP 2

0

op1?

1

S uma

Re s ta

Re s ult--->P ort A

Pág. 2

Universidad Politécnica de Cartagena Grupo Alumnos: Pablo García Pita (pablogpita@gmail.com) Manuel Jesús Bravo García (manueljesusbg@gmail.com)

Ingeniero Técnico en Telecomunicación Especialidad Telemática

Departamento de Electrónica, Tecnología de Computadoras y Proyectos. Sistemas Electrónicos Digitales.

XX Práctica Y. Curso 07/08

Obtener OP 1 Y OP 2

P ORTB-> OP 1 P ORTB->OP 2

OP 1 & Oxf-> OP 1

OP 2 & Ox70-> OP 2

RETURN

Pág. 3

Universidad Politécnica de Cartagena Grupo Alumnos: Pablo García Pita (pablogpita@gmail.com) Manuel Jesús Bravo García (manueljesusbg@gmail.com)

Ingeniero Técnico en Telecomunicación Especialidad Telemática

Departamento de Electrónica, Tecnología de Computadoras y Proyectos. Sistemas Electrónicos Digitales.

XX Práctica Y. Curso 07/08

S uma

OP 2-> W

OP 1+OP 2->w

W->RS

W+RS ->RS

RETURN

Pág. 4

Universidad Politécnica de Cartagena Grupo Alumnos: Pablo García Pita (pablogpita@gmail.com) Manuel Jesús Bravo García (manueljesusbg@gmail.com)

Ingeniero Técnico en Telecomunicación Especialidad Telemática

Departamento de Electrónica, Tecnología de Computadoras y Proyectos. Sistemas Electrónicos Digitales.

XX Práctica Y. Curso 07/08

RES TA

OP 2-> W

OP 1-OP 2->W

W->RS

W+RS ->RS

W+RS ->RS

RETURN

Pág. 5

Universidad Politécnica de Cartagena Grupo Alumnos: Pablo García Pita (pablogpita@gmail.com) Manuel Jesús Bravo García (manueljesusbg@gmail.com)
;************************************************************************************ ; Nombre: ; ; Descripción: ; ; Objetivo: ; ; ; ; ; Fechas: ; ; ; ; ; Autores: ; Pablo García Pita Manuel Jesús Bravo García Creación: 29/10/2007 Última modificación: 19/09/2007 Revisión: 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) Operaciones Básicas con el PIC16F84 SED073902.asm

Ingeniero Técnico en Telecomunicación Especialidad Telemática

Departamento de Electrónica, Tecnología de Computadoras y Proyectos. Sistemas Electrónicos Digitales.

XX Práctica Y. Curso 07/08

3. Implementación del programa autocomentado.

;************************************************************************************

; 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 Inicio OP1 OP2 RS EQU EQU EQU 0x0c 0x0d 0x0e

;La primera instrucción que se ejecutará será la 0.

; Constante cuyo valor es la dirección de memoria 0x0c. ; Constante cuyo valor es la dirección de memoria 0x0d. ; Constante cuyo valor es la dirección de memoria 0x0f. ; Acceso al Banco 1 (Ponemos un 1 en el bit RP0 del Registro de Estado. ; Cargamos 1111 1111 en el registro de trabajo ; para posteriormente llevarlo a TRISB y así configurar la puerta A como entrada. ; Cargamos d'0 para configurar la puerta A como entrada. ; A partir de ahora accederemos al banco 0.

bsf STATUS, RP0 movlw b'11111111' movwf TRISB clrf TRISA bcf STATUS,RP0

Principal movlw b'00001111' movwf OP1 movlw b'01110000' movwf OP2 movf PORTB,0 andwf OP1,1 andwf OP2,1 swapf OP2,1 btfsc PORTB,7 ; Cargamos máscara a aplicar a OP2 en W ; y la llevamos a su registro. ; Cargamos máscara a aplicar a OP2 en W ; y la llevamos a su registro. ; Cargamos el acumulador con el contenido de la Puerta B (Contiene Cód. Operación, Operandos 1 ; y 2) ; Aplicamos la máscara a OP1 y dejamos el resultado en OP1. Ya tenemos el valor de OP1. ; Aplicamos a OP2 su máscara y dejamos el resultado en OP2. Ya tenemos el valor de OP2. ; Intercambiamos de posición los nibbles de OP2 para aplicarle correctamente la máscara. ; 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

Universidad Politécnica de Cartagena Grupo Alumnos: Pablo García Pita (pablogpita@gmail.com) Manuel Jesús Bravo García (manueljesusbg@gmail.com)
Opcion0 ;3*(OP1-OP2)

Ingeniero Técnico en Telecomunicación Especialidad Telemática

Departamento de Electrónica, Tecnología de Computadoras y Proyectos. Sistemas Electrónicos Digitales.

XX Práctica Y. Curso 07/08

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

Opcion1 movf OP2,0 addwf OP1,0 movwf RS addwf RS,1 ;btfss STATUS,3 ;bcf RS,4 ;bsf RS,4

;2(OP1+OP2) ;Cargamos en W, el valor de op2 ;Hacemos OP1+OP2. (Sumamos a lo que hay en OP1 el contenido de W:OP2).El resultado de la ;operación queda en W. ;Llevamos el resultado de la suma a RES ;Sumamos a RES el contenido de W. (a+a=2a) ;Comprobamos si hubo acarreo en el bit 3. Si lo hubo habrá un uno en ese bit. ;No hubo acarreo. Por lo que ponemos un 0 en el bit 4 de RS ;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

Universidad Politécnica de Cartagena Grupo Alumnos: Pablo García Pita (pablogpita@gmail.com) Manuel Jesús Bravo García (manueljesusbg@gmail.com)

Ingeniero Técnico en Telecomunicación Especialidad Telemática

Departamento de Electrónica, Tecnología de Computadoras y Proyectos. Sistemas Electrónicos Digitales.

XX Práctica Y. Curso 07/08

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

Universidad Politécnica de Cartagena Grupo Alumnos: Pablo García Pita (pablogpita@gmail.com) Manuel Jesús Bravo García (manueljesusbg@gmail.com)

Ingeniero Técnico en Telecomunicación Especialidad Telemática

Departamento de Electrónica, Tecnología de Computadoras y Proyectos. Sistemas Electrónicos Digitales.

XX Práctica Y. Curso 07/08

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 subwf OP1,0 ; Cargamos en W, el valor de op2 ; 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

Universidad Politécnica de Cartagena Grupo Alumnos: Pablo García Pita (pablogpita@gmail.com) Manuel Jesús Bravo García (manueljesusbg@gmail.com)

Ingeniero Técnico en Telecomunicación Especialidad Telemática

Departamento de Electrónica, Tecnología de Computadoras y Proyectos. Sistemas Electrónicos Digitales.

XX Práctica Y. Curso 07/08

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: Línea 52: Línea 55: Líneas 61-67: Línea 72: Líneas 88-89: 4 instrucciones Tipo 1 1 instrucción Tipo 2 1 instrucción Tipo2 7 instrucciones Tipo 1 1 instrucción Tipo 2 2 instrucciones Tipo 1

Operacion0:

Resultado: .

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: Línea 52: Línea 54: Líneas 78-71: Líneas 88-89:

4 instrucciones Tipo 1 1 instrucción Tipo 1 1 instrucción Tipo2 4 instrucciones Tipo 1 2 instrucciones Tipo 1

Operacion1: Resultado:

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