You are on page 1of 4

Capı́tulo 1

Práctica: Dos ejemplos breves

Me lo contaron y lo olvidé; lo vi
y lo entendı́; lo hice y lo aprendı́.
∼ Confucio ∼

1.1. Decodificador a 7 segmentos


1
Consiste en la realización de un decodificador a 7 segmentos empleando el microcontrolador
PIC16F88.
La entrada en binario se realiza a través de los pines RA0..RA3 y la salida decodificada se
genera a través de RB0..RB6 para los segmentos A,B,C,D,E,F,G y RB7 para el punto decimal (DP).

A A

B
C F B

D
G
E
F E C
G
DP D

Cathode DP

1
Versión de 12 de marzo de 2008

1
2 Decodificador a 7 segmentos

0 PUNTO
R8
X1
10k 0 B0
U1
16
RA7/OSC1/CLKIN RA0/AN0
17 0 B1
15 18
4MHz
RA6/OSC2/CLKOUT RA1/AN1
RA2/AN2/CVREF/VREF-
1 0 B2
4 2
RA5/MCLR RA3/AN3/C1OUT/VREF+
RA4/AN4/T0CKI/C2OUT
3 0 B3
6
R1 330
RB0/INT/CCP1
7
RB1/SDI/SDA
8
RB2/SDO/RX/DT
C1 C2 RB3/CCP1
9
33pF 33pF 10
RB4/SCK/SCL
11
RB5/SS/TX/CK
12
RB6/AN5/T1OSO/T1CKI
13
RB7/AN6/T1OSI
Al punto decimal
PIC16F88

La codificación de tablas en los PIC se hace de una forma muy diferente a como se realiza en
otros micros. Ahı́ va un ejemplo en ensamblador:
1 ; El acceso a un elemento de la tabla va a consistir en
2 ; llamar a una subrutina (TABLA) metiendo en el registro de
3 ; trabajo (W) el indice de la misma.
4
5 TABLA ADDWF PCL,F ; PCL=PCL+W
6 RETLW 40 ; Valor devuelto 40 (W=0)
7 RETLW 41 ; Valor devuelto 41 (W=1)
8 RETLW 42 ; Valor devuelto 42 (W=2)
9 RETLW 43 ; Valor devuelto 43 (W=3)
10
11 ; Hay que tener mucho cuidado en que el valor de W este
12 ; dentro del rango definido.
13 ; La posicion de la tabla en la memoria de programa deber\’{a}
14 ; encontrarse dentro de una pagina de 256 bytes dado
15 ; que si hay un acarreo del byte inferior (PCL) al byte
16 ; superior del contador de programa, no se accedera’
17 ; correctamente a la tabla

Si lo tuviéramos que escribir desde lenguaje C seria:


1 // Es obligatorio poner const delante de la declaracion
2 // de la variable para que se situe en memoria de programa (FLASH)
3 // y no en la memoria de datos RAM
4 const unsigned char TABLA[]={40,41,42,43};
5
6 // El acceso sera’ como de costumbre en lenguaje C
7
8 i=TABLA[0]; // Asigna a i el primer elemento de la tabla
Capı́tulo 1. Práctica: Dos ejemplos breves 3

1.2. Contador
Se pide realizar un contador (parecido al 74190 de la serie TTL) UP/DOWN de 4 bits con carga
en paralelo usando el mismo microcontrolador.

Los pines RA0..RA3 serán la entrada en paralelo del contador;

RA4 indicará el fin de cuenta. Es una salida que vale uno solo cuando el valor del contador
pasa de 15 a 0 al incrementar o pasa de 0 a 15 al decrementar;

RB0 es la entrada de la señal de reloj (para incrementar o decrementar el contador con el


flanco de subida de esta señal);

RB1 es la patilla de carga en paralelo (activa en baja y ası́ncrona);

RB2 es el indicador del sentido del contaje (1, decrementar, 0, incrementar);

RB3 es la señal de borrado ası́ncrona o puesta a cero del contador (activa en baja) y,

RB4..RB7 es la salida del contador.

Un ejemplo de esquema a continuación:

R1
X1
10k 0 D0
U1
16
RA7/OSC1/CLKIN RA0/AN0
17 0 D1
15 18
4MHz
RA6/OSC2/CLKOUT RA1/AN1
RA2/AN2/CVREF/VREF-
1 0 D2
4 2
RA5/MCLR RA3/AN3/C1OUT/VREF+
RA4/AN4/T0CKI/C2OUT
3 0 D3
6
RB0/INT/CCP1
RB1/SDI/SDA
7 ? FINAL DE CUENTA (TC)
8
RB2/SDO/RX/DT
C1 C2 RB3/CCP1
9
0
33pF 33pF RB4/SCK/SCL
10 RELOJ (CLK)
11
RB5/SS/TX/CK
12
RB6/AN5/T1OSO/T1CKI
RB7/AN6/T1OSI
13 0 CARGA (PL)
PIC16F88
0 DEC/INC (D/U)

0 BORRADO (E)
U2 Q0
15 3 Q1
D0 Q0
1 2 Q2
D1 Q1
10 6 Q3
D2 Q2
9 7
D3 Q3
13
RCO
14
CLK
4
E
5
D/U
11
PL
12
TC
74190

Para sacar nota


Se recomienda el uso de la funcionalidad doble de la patilla RB0/INT que es capaz de respon-
der por interrupciones a un flanco (de subida o bajada).
Las interrupciones desde C se resuelven de la siguiente manera:
4 Contador

1 void interrupt RutinaDeInterrupciones()


2 {
3 // Las interrupciones se inhiben automaticamente al entrar
4 // Se guardan automaticamente W, STATUS y PCLATH en la memoria
5 // RAM. Tambien se guardaran las variables que se usen
6
7 // Deberemos detectar cual es la fuente de interrupciones y
8 // actuar en consecuencia. Si solo hemos activado una fuente de
9 // interrupcion entonces esto no es necesario
10
11
12 // Se recuperan automaticamente de la memoria RAM (posiciones
13 // fijas, no es una pila) los registros W, STATUS y PCLATH y
14 // las variables guardadas
15 // Las interrupciones se activan al salir
16 };

You might also like