Prácticas con Microcontrolador PIC16F84
Prácticas con Microcontrolador PIC16F84
Índice
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
2__ I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
3
Índice
Presentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
- Listado de Recept.asm . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
- Listado de Rs232.asm . . . . . . . . . . . . . . . . . . . . . . . . . . .. 35
- Listado de Lcd.asm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
4__ I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
- Organigramas de Hamming.asm . . . . . . . . . . . . . . . . . . . 69
- Listado de Ascensor.asm . . . . . . . . . . . . . . . . . . . . . . . . . 77
1. Encapsulado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
2. Arquitectura interna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4. Programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
5
Presupuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
6__ I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
7
Introducción
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
8__ I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
9
Introducción
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
10 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
11
Capítulo 1
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
12 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
13
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
14 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
Como la placa emisora realiza operaciones con el LCD y con el teclado que
pueden afectar a la transmisión, se van a introducir en ambos programas unas rutinas
con retardos. De esta forma, antes de recibir un dato, la placa receptora va a entrar en un
bucle de 0,1 segundos; si la línea de recepción se mantiene a 1 durante este periodo de
tiempo, se pasa a la recepción del dato, si la línea cambia antes de que hayan
transcurrido los 0,1 segundos, se vuelve a comenzar la cuenta desde cero. Cada vez que
la placa emisora va a transmitir, mantiene la línea de transmisión a 1 durante 0,2
segundos, para asegurarse así que la receptora pasa a recibir. Mediante este proceso de
retardos, se van a conseguir despreciar los ecos producidos en el teclado y las
operaciones realizadas en el LCD de la placa emisora, ya que esta utiliza la misma línea
para transmitir, para operar con el LCD y para obtener datos del teclado. Si no se realiza
esta operación de retardos, la placa receptora podría considerar las operaciones
realizadas por la placa emisora como datos enviados y recibir, por tanto, datos
incorrectos continuamente.
Las X del polinomio generador indican que en esa posición del CRC hay
colocada una puerta OR exclusiva. De esta forma, el esquema electrónico
correspondiente a este polinomio va a ser el representado en la figura 2.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
15
Como se puede apreciar en la figura 2, para cada X hay una puerta XOR pero de
forma inversa, es decir, para X a la doce, tenemos una XOR (E) en el bit 0 del CRC,
para X a la 11 la tenemos en el bit 1 (D), para X cubo en el bit 9 (C), para X cuadrado
en el 10 (B) y para X lo tendremos en el bit 11 (A).
Posición CRC IN
0 000000000000 1
1 111100000001 0
2 100010000001 0
3 101101000001 1
4 010110100000 0
5 001011010000 0
6 000101101000 0
7 000010110100 0
8 000001011010 0
9 000000101101 0
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
16 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
10 111100010111 0
11 100010001010 1
12 1011 0100 0100
Tabla 1. Obtención de código CRC a partir de un dato
Posición CRC IN
0 101101000100 0
1 010110100010 0
2 001011010001 1
3 000101101000 0
4 000010110100 0
5 000001011010 0
6 000000101101 1
7 000000010110 0
8 000000001011 1
9 000000000101 1
10 000000000010 0
11 000000000001 1
12 0000 0000 0000
Tabla 2. Comprobación de transmisión correcta.
Rs232.asm: El fichero no hay que programarlo, pero hay que tenerlo a la hora de
ensamblar cualquiera de los dos anteriores programas. En el se incluyen las
rutinas necesarias para llevar a cabo la transmisión y recepción serie.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
17
EMISOR.ASM
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
18 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
**********************************************************************
A continuación se definen los distintos mensajes que van a aparecer en
el LCD del micro’pic trainer.
Mensaje equ $
retlw 'D'
retlw 'a'
retlw 't'
retlw 'o'
retlw ':'
retlw ' '
retlw 0x00
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
19
Mensaje1 equ $
retlw 'C'
retlw 'R'
retlw 'C'
retlw ':'
retlw 0x00
Mensaje2 equ $
retlw 'E'
retlw 'm'
retlw 'i'
retlw 's'
retlw 'o'
retlw 'r'
retlw ' '
retlw 'd'
retlw 'e'
retlw ' '
retlw 'd'
retlw 'a'
retlw 't'
retlw 'o'
retlw 's'
retlw 0x00
Mensaje3 equ $
retlw 'e'
retlw 'n'
retlw ' '
retlw 's'
retlw 'e'
retlw 'r'
retlw 'i'
retlw 'e'
retlw ' '
retlw 'c'
retlw 'o'
retlw 'n'
retlw ' '
retlw 'C'
retlw 'R'
retlw 'C'
retlw 0x00
**********************************************************************
Comienzo del programa.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
20 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
movlw Mensaje2
movwf Temp_1 ;Carga la variable con el inicio del mensaje
movlw .15
movwf Temp_2 ;Nº de caracteres del mensaje
clrwdt
btfsc DAVID,0 ;Si es la primera vez que pasa salta
goto $+9 ;para visualizar otro mensaje.
movlw 0xc0
call LCD_REG ;Segunda línea del LCD
movlw Mensaje3
movwf Temp_1
movlw .16
movwf Temp_2
bsf DAVID,0 ;Lo pone a uno para que la próxima no
goto INICIO_2 ;sea otra vez la primera pasada.
bcf DAVID,0
call delay
call delay
call LCD_INI ;Repetimos el proceso para visualizar
movlw b'00001100' ;dos nuevos mensajes.
call LCD_REG
movlw b'00000001'
call LCD_REG
movlw Mensaje ;Visualización del mensaje "Dato:"
movwf Temp_1
movlw .6
movwf Temp_2
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
21
**********************************************************************
Bucle principal del programa.
LOOP: clrwdt
call Key_Scan ;Explora el teclado
movlw 0x80
subwf Tecla,W ;Si hay tecla pulsada sale del
bucle
btfsc STATUS,Z
goto LOOP
call Key_BCD
call UP_LCD
btfss DAVID,7 ;Si es la 1ª pasada va a primera
goto primera
btfss DAVID,6 ;Si es la 2ª pasada va a segunda
goto segunda
goto tercera ;Si no es ni 1ª ni 2ª, va a tercera
primera bsf DAVID,7 ;Lo activa para que sea 2ª pasada
movwf BIT2
movlw 0x86
goto sigue
segunda bsf DAVID,6 ;Lo activa para que sea 3ª pasada
movwf BIT1
rlf BIT1,1 ;Rota a la izquierda BIT1 cuatro veces
rlf BIT1,1 ;para dejar el dato en las cuatro
rlf BIT1,1 ;posiciones de más peso.
rlf BIT1,1
bcf BIT1,3 ;Las cuatro posiciones de menos peso las
;pone a cero.
bcf BIT1,2
bcf BIT1,1
bcf BIT1,0
movlw 0x87
goto sigue
tercera bsf DAVID,5 ;Para indicar que es la 3ª pasada
movf Key_1,W
iorwf BIT1,F ;Copia la tecla en los cuatro bits
bsf Key_1,7 ; de menos peso de BIT1
bsf Key_1,6 ;La variable Key_1 se utiliza como
bsf Key_1,5 ;auxiliar en el archivo teclado.asm
bsf Key_1,4
movf Key_1,W
andwf BIT1,F
movlw 0x88
sigue call LCD_REG ;Posiciona el cursor del LCD según pasada.
movf Tecla,W ;Mueve la tecla pulsada al acumulador
sublw .9
btfss STATUS,C ;¨ Es mayor que nueve ?
goto Mayor_que_9 ;Sí
movf Tecla,W ;No
addlw 0x30 ;Ajuste ASCII de datos del 0 al 9
call LCD_DATO ;Visualiza el dato
goto serie
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
22 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
movlw b'11101111'
movwf PORTB ;RB5 entrada y RB4 salida
bsf OPTION_REG,NOT_RBPU ;Desconecta cargas pull-up
bcf STATUS,RP0 ;Selecciona página 0
bsf Txd_pin ;Activa pin de transmisión
movf Tecla,W
movwf Txdreg ;Transmite carácter pulsado
call delay ;Retardo en la transmisión
call TxD
btfsc DAVID,5 ;Si es la 3ª pasada va a CRC
goto crc
goto LOOP
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
23
**********************************************************************
Esta rutina se encarga de darnos el código CRC de los datos
representados en BIT1 y BIT2. El resultado de 12 bits es devuelto en
CRC1 y en los cuatro bits de menos peso de CRC2.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
24 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
movlw d'1'
movwf DAV1
base2 movf BIT2,w
movwf REG1
rrf BIT2,1
decfsz Temp_2,1
goto base
return ;Si se han acabado los 4 bits de BIT2 sale de la
rutina.
**********************************************************************
La rutina se encarga de rotar una posición a la derecha el código CRC,
de forma que el bit de menos peso de CRC2 pasa a ser el de más peso de
CRC1.
end
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
25
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
26 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
27
RECEPT.ASM
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
28 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
**********************************************************************
A continuación se definen los distintos mensajes que van a aparecer
en el LCD del upic trainer.
Mensaje equ $
retlw 'D'
retlw 'a'
retlw 't'
retlw 'o'
retlw ':'
retlw ' '
retlw 0x00
Mensaje1 equ $
retlw 'R'
retlw 'e'
retlw 'c'
retlw 'e'
retlw 'p'
retlw 'c'
retlw 'i'
retlw 'o'
retlw 'n'
retlw ':'
retlw 0x00
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
29
Mensaje2 equ $
retlw ' '
retlw 'R'
retlw 'e'
retlw 'c'
retlw 'e'
retlw 'p'
retlw 't'
retlw 'o'
retlw 'r'
retlw ' '
retlw 's'
retlw 'e'
retlw 'r'
retlw 'i'
retlw 'e'
retlw 0x00
Mensaje3 equ $
retlw 'd'
retlw 'e'
retlw ' '
retlw 'd'
retlw 'a'
retlw 't'
retlw 'o'
retlw 's'
retlw ' '
retlw 'c'
retlw 'o'
retlw 'n'
retlw ' '
retlw 'C'
retlw 'R'
retlw 'C'
retlw 0x00
**********************************************************************
Comienzo del programa.
movlw Mensaje2
movwf Temp_1 ;Carga la variable con el inicio
;del mensaje
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
30 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
movlw .15
movwf Temp_2 ;Nº de caracteres del mensaje
clrwdt
btfsc DAVID,0 ;Si es la primera vez que pasa
;salta para ver otro mensaje
goto $+9
movlw 0xc0
call LCD_REG ;Segunda línea del LCD
movlw Mensaje3
movwf Temp_1
movlw .16
movwf Temp_2
bsf DAVID,0 ;Lo pone a uno para que la próxima no sea
goto INICIO_2 ;otra vez la primera pasada.
bcf DAVID,0
call delay
call delay
clrwdt
btfsc DAVID,0
goto LOOP ;Si es la 2ª pasada se va a LOOP
movlw 0xc0
call LCD_REG
movlw Mensaje1 ;Visualización del mensaje "Recepcion:"
movwf Temp_1
movlw .10
movwf Temp_2
bsf SER,0
goto INICIO_1
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
31
**********************************************************************
Bucle principal del programa.
LOOP: clrwdt
bsf STATUS,RP0 ;Selecciona página 1
movlw b'11101111'
movwf PORTB ;RB5 entrada y RB4 salida
bsf OPTION_REG,NOT_RBPU ;Desconecta cargas pull-up
bcf STATUS,RP0 ;Selecciona página 0
call UP_LCD
btfss DAVID,7 ;Si es la 1ª pasada va a primera
goto primera
btfss DAVID,6 ;Si es la 2ª pasada va a segunda
goto segunda
goto tercera ;Si no es ni 1ª ni 2ª, va a tercera
primera bsf DAVID,7 ;Para que la próxima sea 2ª pasada
movlw 0x86
call LCD_REG ;Posiciona el cursor
movf Rxdreg,W
movwf BIT2 ;Manda a BIT2 el carácter recibido
goto sigue
segunda bsf DAVID,6 ;Lo activa para que la próxima sea 3ª
;pasada
movlw 0x87
call LCD_REG
movf Rxdreg,W
movwf BIT1 ;Manda a los cuatro bits de mas peso de
rlf BIT1,1 ;BIT1 el caracter recibido.
rlf BIT1,1
rlf BIT1,1
rlf BIT1,1
bcf BIT1,3
bcf BIT1,2
bcf BIT1,1
bcf BIT1,0
goto sigue
tercera movlw 0x88
call LCD_REG
movf Rxdreg,W
movwf DAVID
iorwf BIT1,F ;Coloca el carácter recibido en los 4
bsf DAVID,7 ;bits de menos peso de la variable BIT1.
bsf DAVID,6
bsf DAVID,5
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
32 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
bsf DAVID,4
movf DAVID,W
andwf BIT1,F
clrf DAVID ;Para que vuelva a ser 1ª pasada
sigue movf Rxdreg,W ;Mueve la tecla recibida al acumulador
sublw .9
btfss STATUS,C ;¿ Es mayor que nueve ?
goto Mayor_que_9 ;Sí
movf Rxdreg,W ;No
addlw 0x30 ;Ajuste ASCII de datos del 0 al 9
call LCD_DATO ;Visualiza el dato
btfsc DAVID,7 ;Si es 3ª pasada va a crc
goto LOOP
goto crc
Mayor_que_9 movf Rxdreg,W
addlw 0x37 ;Ajuste ASCII de datos de la A a la F
call LCD_DATO
btfsc DAVID,7
goto LOOP
goto crc ;Si es 3ª pasada va a crc
**********************************************************************
Esta rutina se encarga de obtener el código CRC de los caracteres
recibidos. Al resultado le vuelve a realizar el código CRC con el
código CRC recibido del emisor. Si el resultado de esta operación es
cero, la transmisión habrá sido correcta.
crc movlw 0xc4
call LCD_REG
clrf CRC1 ;Borra CRC
clrf CRC2
call PROG ;Obtiene CRC de los datos BIT1 y BIT2
bsf STATUS,RP0 ;Selecciona página 1
movlw b'11101111'
movwf PORTB ;RB5 entrada y RB4 salida
bsf OPTION_REG,NOT_RBPU ;Desconecta cargas pull-up
bcf STATUS,RP0 ;Selecciona página 0
bsf Rxd_pin ;Línea de recepción a "1"
movf Rxdreg,W
movwf BIT1 ;Almacena carácter recibido en BIT1
call RxD
movf Rxdreg,W ;Espera recibir un carácter
movwf BIT2 ;Almacena carácter recibido en BIT2
call PROG ;Obtiene CRC de BIT1 y BIT2 a partir del
;CRC obtenido antes.
call UP_LCD
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
33
btfss STATUS,Z
goto error1 ;Si CRC1 no es cero, se va a error
clrw
bcf CRC2,7
bcf CRC2,6
bcf CRC2,5
bcf CRC2,4
iorwf CRC2,F
btfss STATUS,Z ;Si los 4 bits de menos peso de CRC2
goto error1 ;no son cero se va a error
goto bueno ;Si el CRC es nulo va a bueno
**********************************************************************
Rutina de temporización de unos 0,2 segundos.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
34 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
**********************************************************************
Esta rutina es la que realiza en realidad la conversión de los datos a
su código CRC.
btfsc SER1,0
goto base2
rrf BIT1,1
movf BIT1,w
movwf REG1
decfsz Temp_1,1
goto base
movlw d'1'
movwf SER1
base2 movf BIT2,w
movwf REG1
rrf BIT2,1
decfsz Temp_2,1
goto base
return ;Si se han acabado los 4 bits de BIT2 sale de
la rutina.
**********************************************************************
La rutina se encarga de rotar una posición a la derecha el código CRC,
de forma que el bit de menos peso de CRC2 pasa a ser el de más peso de
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
35
CRC1.
end
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
36 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
37
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
38 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
39
RS232.ASM
**********************************************************************
Rutina de transmisión. Tras el bit de inicio se transmite la palabra
de 8 bits contenida en el registro transmisor Txdreg seguido de dos
bits de stop.
TxD
movlw 8 ;Transmisión de palabras de 8 bits
movwf Cont
call Delay_bit
retlw 0
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
40 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
**********************************************************************
Rutina de recepción. Trás detectar el bit de inicio, espera recibirse
una palabra 8 bits. Se recibe primero el bit de menos peso.
retlw 0
**********************************************************************
Rutina de temporización para los intervalos entre bit y bit
Delay_bit clrwdt
movlw DELAY_H
movwf Dlycnt_h
Delay_bit_1 movlw DELAY_L
movwf Dlycnt_l
Delay_bit_2 decfsz Dlycnt_l,F
goto Delay_bit_2
decfsz Dlycnt_h,F
goto Delay_bit_1
retlw 0
*********************************************************************
Rutina de temporización para el bit de inicio en el modo de recepción.
Esta temporización es de 1.5 con respecto a la del resto de bits. Así
se consigue que el muestreo sea aproximadamente en el centro de cada
bit recibido.
Delay_ini clrwdt
movlw DELAY_START_H
movwf Dlycnt_h
Delay_ini_1 movlw DELAY_START_L
movwf Dlycnt_l
Delay_ini_2 decfsz Dlycnt_l,F
goto Delay_ini_2
decfsz Dlycnt_h,F
goto Delay_ini_1
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
41
retlw 0
TECLADO.ASM
TECLA CODIGO
----- --------------
|---|---|---|---| 0 01111101 = 0x7D
RB4 --> | 1 | 2 | 3 | F | 1 11101110 = 0xEE
|---|---|---|---| 2 11101101 = 0xED
RB5 --> | 4 | 5 | 6 | E | 3 11101011 = 0xEB
|---|---|---|---| 4 11011110 = 0xDE
RB6 --> | 7 | 8 | 9 | D | 5 11011101 = 0xDD
|---|---|---|---| 6 11011011 = 0xDB
RB7 --> | A | 0 | B | C | 7 10111110 = 0xBE
|---|---|---|---| 8 10111101 = 0xBD
9 10111011 = 0xBB
A 01111110 = 0x7E
B 01111011 = 0x7B
C 01110111 = 0x77
D 10110111 = 0xB7
E 11010111 = 0xD7
F 11100111 = 0xE7
**********************************************************************
Rutina de exploración del teclado. La variable "Tecla" retorna con el
código de la tecla pulsada o el código 0x80 si no se pulsa ninguna.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
42 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
**********************************************************************
Convierte el código de la tecla que haya en la variable "Tecla" a
Hexadecimal(0-F). El resultado se devuelve en la variable "Tecla".
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
43
return
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
44 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
45
LCD.ASM
**********************************************************************
Rutina de configuración del PIC para el LCD.
**********************************************************************
Rutina para lectura del Flag Busy y la dirección.
**********************************************************************
Esta rutina efectúa un pulso de Enable
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
46 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
**********************************************************************
Rutina para escritura de datos en DDRAM o CGRAM.El dato es tomado de W
**********************************************************************
Esta rutina efectúa la escritura de un comando en el LCD. El código
del comando es toma de W.
**********************************************************************
Rutina para la inicialización del LCD
**********************************************************************
Rutina de temporización de unos 5mS
LCD_DELAY: clrwdt
movlw .10
movwf Lcd_Temp_1
clrf Lcd_Temp_2
LCD_DELAY_1: decfsz Lcd_Temp_2,F
goto LCD_DELAY_1
decfsz Lcd_Temp_1,F
goto LCD_DELAY_1
return
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
47
P16F84.INC
LIST
NOLIST
LIST P=16f84
IFNDEF __16F84
ENDIF
;Definiciones generales
W EQU H'0000'
F EQU H'0001'
; Registros
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
48 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
__MAXRAM H'CF'
__BADRAM H'07', H'50'-H'7F', H'87'
LIST
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
49
Capítulo 2
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
50 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
51
Cuando se van a escribir datos en memoria, se realiza un cálculo con ellos para
obtener un código. En la memoria se almacenan tanto los datos como el código, así se
va a almacenar una palabra de datos de M bits de datos + K bits de código.
Cuando se va a leer una palabra almacenada, se utiliza el código almacenado
para detectar y corregir errores. Se genera un nuevo código a partir de los datos
almacenados y se compara con el leído. La comparación se realiza bit a bit mediante
puertas OR-exclusivas. Si los dos códigos son iguales, los datos no tendrán errores; si
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
52 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
los códigos son distintos, habrá error en alguno de los datos y habrá que corregirlo
como veremos a continuación.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
53
C1 = M1 M2 M4 M5 M7
C2 = M1 M3 M4 M6 M7
C4 = M2 M3 M4 M8
C8 = M5 M6 M7 M8
Recordar que una puerta OR-exclusiva nos da un cero a la salida cuando las
entradas son iguales (caso de dos entradas). En el caso de más de dos entradas, nos dan
un uno si el número de unos de entrada es impar y un cero si este es par.
Vamos a ver un ejemplo para verificar lo dicho hasta ahora. Supongamos que el
dato de entrada de 8 bits es 00100101 (25 por el teclado), con el bit M1 en la posición
de menos peso (bit 0). Los bits de comprobación van a ser:
C1 = 1 0 0 0 0 = 1
C2 = 1 1 0 1 0 = 1
C4 = 0 1 0 0 = 1
C8 = 0 1 0 0 = 1
Supongamos ahora que el bit 2 del dato (M3) se ve afectado por un error,
cambiando de 1 a 0. Cuando se recalculen los bits de comprobación (al leer), se tiene:
C1 = 1 0 0 0 0 = 1
C2 = 1 0 0 1 0 = 0
C4 = 0 0 0 0 = 0
C8 = 0 1 0 0 = 1
C8 C4 C2 C1
1 1 1 1
1 0 0 1
-----------------------------
0 1 1 0
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
54 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
El resultado 0110, indica que en el bit 6 del código Hamming (M3) hay error,
debiéndose cambiar el 0 por el 1 y corrigiéndose así el error. Si el resultado de esta
operación hubiese sido cero, el dato no tendría ningún error. De igual forma si el
resultado solo contiene un 1, el error estaría en un bit de comprobación, siendo por tanto
correcto el dato.
En primer lugar, el programa espera recibir una tecla y en función de esta realiza
una u otra función. Si la tecla pulsada no es A ni B ni C, el PIC nos muestra el mensaje
inicial con las teclas operativas.
- Si la tecla pulsada es la C, el PIC espera recibir dos nuevas teclas que insertará
en una variable a la que realizará el código Hamming. La primera de estas dos nuevas
teclas es insertada en las cuatro posiciones de más peso (bits 7-4) de la variable y la
segunda en las cuatro posiciones de menos peso (bits 3-0). El código Hamming
obtenido es visualizado en el LCD como puede apreciarse en la figura 5. Una vez
visualizado el mismo, el PIC volverá a esperar recibir una de las tres teclas anteriores.
La posición superior derecha del LCD se borra completamente tras pulsar la tecla C, ya
que no es necesario insertar ninguna posición de memoria en este caso.
- Si la tecla pulsada es la B, el PIC espera recibir dos nuevas teclas que insertará
en un registro al que realizará el código Hamming. La primera de estas dos nuevas
teclas es insertada en las cuatro posiciones de más peso (bits 7-4) del registro utilizado y
la segunda en las cuatro posiciones de menos peso (bits 3-0). El código Hamming
obtenido es visualizado en el LCD y almacenado en dos registros (porque los registros
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
55
son de 8 bits y el Hamming calculado es de 12). Una vez visualizado el mismo, el PIC
espera recibir dos nuevas teclas que le indiquen la posición de memoria EPROM donde
deberá guardar el código obtenido. En la posición superior derecha del LCD aparecen
las siglas WR (write) y a su lado las dos teclas pulsadas para indicar la dirección. Estas
dos teclas son insertadas en un registro de direcciones (la primera en los 4 bits de más
peso y la segunda en los de menos). Dado que en el PIC 16F84, la memoria EPROM va
de la dirección 00h a la 3F, los dos bits de más peso de este registro de direcciones, son
puestos a cero por el programa. De igual forma, el bit de menos peso de este registro es
colocado a 0 para que la dirección de memoria en la que se graba sea siempre par (dado
que el código Hamming ocupa dos direcciones). Una vez grabado el código en la
dirección indicada, el programa vuelve a esperar una A, B o C para continuar.
Estos últimos programas (LCD, teclado y p16f84) son los mismos que los
utilizados en la práctica 1, por tanto no se volverán a explicar.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
56 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
del dato introducido) y al decodificador Hamming (obtiene el dato a partir del código
Hamming).
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
57
HAMMING.ASM
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
58 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
;***************************************************************************
;A continuación se definen los distintos mensajes que van a aparecer en el
;LCD del upic trainer.
Mensaje equ $
retlw 'D'
retlw 'a'
retlw 't'
retlw 'o'
retlw ':'
retlw ' '
retlw 0x00
Mensaje1 equ $
retlw 'C'
retlw 'H'
retlw ':'
retlw ' '
retlw 0x00
Mensaje2 equ $
retlw ' '
retlw 'C'
retlw 'o'
retlw 'd'
retlw 'i'
retlw 'g'
retlw 'o'
retlw ' '
retlw 'H'
retlw 'a'
retlw 'm'
retlw 'm'
retlw 'i'
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
59
retlw 'n'
retlw 'g'
retlw ' '
retlw 0x00
Mensaje3 equ $
retlw ','
retlw 'A'
retlw '='
retlw 'R'
retlw 'D'
retlw ','
retlw 'B'
retlw '='
retlw 'W'
retlw 'R'
retlw ','
retlw 'C'
retlw '='
retlw 'C'
retlw 'H'
retlw ' '
retlw 0x00
;***************************************************************************
;Comienzo del programa.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
60 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
;***************************************************************************
;Bucle principal del programa.
LOOP: clrwdt
call Key_Scan ;Explora el teclado
movlw 0x80
subwf Tecla,W ;Si hay tecla pulsada sale del bucle
btfsc STATUS,Z
goto LOOP
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
61
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
62 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
;**************************************************************************
;Bucle principal si la tecla pulsada es la B o la C.
Loop1 clrwdt
call Key_Scan ;Explora el teclado
movlw 0x80
subwf Tecla,W ;Si hay tecla pulsada sale del bucle
btfsc STATUS,Z
goto Loop1
segunda bcf DAVID,7 ;Lo activa para que la próxima sea 1ª pasada
movf Tecla,W
iorwf DAV,1 ;Si es la segunda pasada copia la tecla en
bsf Key_1,7 ;los cuatro bits de menos peso de DAV
bsf Key_1,6 ;La variable Key_1 es utilizada como
bsf Key_1,5 ;auxiliar en el archivo teclado.asm
bsf Key_1,4
movf Key_1,W
andwf DAV,1
movlw 0x87
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
63
;***************************************************************************
;Rutina de temporización de unos 0,2 segundos.
;**************************************************************************
;Para visualizar el código Hamming en LCD
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
64 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
;**************************************************************************
;Rutina para escribir el código Hamming contenido en HAM2 y HAM1 en la EPROM
call Key_BCD
call UP_LCD
btfss DAVID,6 ;Si es 1ª pasada va a uno, si no
goto uno ;va a dos.
goto dos
uno movlw 0x8d ;Posiciona el LCD
call LCD_REG
movf Tecla,W
movwf Temp_1 ;Copia la tecla en las 4 posiciones
rlf Temp_1,1 ;de más peso de Temp_1
rlf Temp_1,1
rlf Temp_1,1
rlf Temp_1,1
bcf Temp_1,7 ;Coloca a cero los dos bits de más peso
bcf Temp_1,6 ;porque la EPROM solo llega hasta 3F.
bsf DAVID,6 ;Activa 2ª pasada
goto sigue1
dos movf Tecla,W
iorwf Temp_1,1 ;Si es la segunda pasada copia la tecla en
bsf Key_1,7 ;los cuatro bits de menos peso de Temp_1
bsf Key_1,6 ;La variable Key_1 es utilizada como
bsf Key_1,5 ;auxiliar en el archivo teclado.asm
bsf Key_1,4
movf Key_1,W
andwf Temp_1,1
bcf Temp_1,0
bcf DAVID,6 ;Lo pone a 0 para que siempre sea dirección par
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
65
goto Loop2
goto WRT_EPROM
;*************************************************************************
;Rutina para escribir en la EPROM
;**************************************************************************
;Nos da el dato codificado en una dirección de memoria EPROM.
call Key_BCD
call UP_LCD
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
66 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
;*************************************************************************
;La subrutina realiza la lectura de la dirección indicada en Temp_1.
movf Temp_1,W
movwf EEADR
incf EEADR,1 ;Lee la dirección siguiente.
bsf STATUS,RP0
bsf EECON1,RD
bcf STATUS,RP0
movf EEDATA,W ;Copia la lectura en HAM2
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
67
movwf HAM2
call DEC_HAMMING ;Decodifica HAM1 y HAM2
movlw 0x86
call LCD_REG ;Posiciona LCD.
movf DAV1,W
sublw .9
btfss STATUS,C ;¨ Es mayor que nueve ?
goto M_9 ;Sí
movf DAV1,W ;No
addlw 0x30 ;Ajuste ASCII de datos del 0 al 9
call LCD_DATO ;Visualiza 1er dato decodificado
goto $+4
M_9 movf DAV1,W
addlw 0x37 ;Ajuste ASCII de datos de la A la F.
call LCD_DATO ;Visualiza 1er dato decodificado
movf DAV,W
sublw .9
btfss STATUS,C ;Es mayor que nueve ?
goto MAY_9 ;Sí
movf DAV,W ;No
addlw 0x30 ;Ajuste ASCII de datos del 0 al 9
call LCD_DATO ;Visualiza 2º dato decodificado
goto $+4
MAY_9 movf DAV,W
addlw 0x37 ;Ajuste ASCII de datos de la A la F.
call LCD_DATO ;Visualiza 2º dato decodificado.
movlw 0xc4 ;Posiciona LCD en 2ª línea
call LCD_REG
bcf DAVID,0 ;Para indicar que la 1ª tecla era la A.
goto ver_cod ;Visualiza código Hamming en LCD.
;**************************************************************************
;La subrutina se encarga de decodificar el código Hamming contenido en HAM2
;y HAM1 y darnos los dos datos en DAV1 y DAV.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
68 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
rrf Temp_1,1
xorwf Temp_1,1
btfsc Temp_1,0
bsf DAV1,0
movf HAM1,W
movwf Temp_1
rrf Temp_1,1
movf Temp_1,W
rrf Temp_1,1
xorwf Temp_1,W
rrf Temp_1,1
rrf Temp_1,1
rrf Temp_1,1
xorwf Temp_1,W
rrf Temp_1,1
xorwf Temp_1,W
rrf Temp_2,1
xorwf Temp_2,1
btfsc Temp_2,0
bsf DAV1,2
movf HAM2,W
movwf Temp_2
movf HAM1,W
movwf Temp_1
rrf Temp_1,1
movf Temp_1,W
rrf Temp_1,1
rrf Temp_1,1
xorwf Temp_1,W
rrf Temp_1,1
rrf Temp_1,1
xorwf Temp_1,W
rrf Temp_1,1
rrf Temp_1,1
xorwf Temp_1,W
rrf Temp_2,1
xorwf Temp_2,1
btfsc Temp_2,0
bsf DAV1,3
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
69
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
70 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
goto $+2
bsf HAM1,7
goto vuelve
movlw b'00000110'
subwf DAV1,W
btfss STATUS,Z
goto $+7
btfss HAM1,6
goto $+3
bcf HAM1,6
goto $+2
bsf HAM1,6
goto vuelve
movlw b'00000111'
subwf DAV1,W
btfss STATUS,Z
goto $+7
btfss HAM1,5
goto $+3
bcf HAM1,5
goto $+2
bsf HAM1,5
goto vuelve
movlw b'00001001'
subwf DAV1,W
btfss STATUS,Z
goto $+7
btfss HAM1,3
goto $+3
bcf HAM1,3
goto $+2
bsf HAM1,3
goto vuelve
movlw b'00001010'
subwf DAV1,W
btfss STATUS,Z
goto $+7
btfss HAM1,2
goto $+3
bcf HAM1,2
goto $+2
bsf HAM1,2
goto vuelve
movlw b'00001011'
subwf DAV1,W
btfss STATUS,Z
goto $+7
btfss HAM1,1
goto $+3
bcf HAM1,1
goto $+2
bsf HAM1,1
goto vuelve
movlw b'00001100'
subwf DAV1,W
btfss STATUS,Z
goto vuelve
btfss HAM1,0
goto $+3
bcf HAM1,0
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
71
goto $+2
bsf HAM1,0
goto vuelve
vuelve btfss HAM2,1 ;Copia los valores de los datos contenidos
bcf DAV,0 ;en HAM2 y HAM1 en los registros de salida
btfsc HAM2,1 ;DAV1 y DAV. Estos dos registros van a
bsf DAV,0 ;contener los dos datos grabados en la EPROM.
btfss HAM1,7
bcf DAV,1
btfsc HAM1,7
bsf DAV,1
btfss HAM1,6
bcf DAV,2
btfsc HAM1,6
bsf DAV,2
btfss HAM1,5
bcf DAV,3
btfsc HAM1,5
bsf DAV,3
bcf DAV,4
bcf DAV,5
bcf DAV,6
bcf DAV,7
btfss HAM1,3
bcf DAV1,0
btfsc HAM1,3
bsf DAV1,0
btfss HAM1,2
bcf DAV1,1
btfsc HAM1,2
bsf DAV1,1
btfss HAM1,1
bcf DAV1,2
btfsc HAM1,1
bsf DAV1,2
btfss HAM1,0
bcf DAV1,3
btfsc HAM1,0
bsf DAV1,3
bcf DAV1,4
bcf DAV1,5
bcf DAV1,6
bcf DAV1,7
return
;**************************************************************************
;La subrutina se encarga de codificar las dos teclas contenidas en DAV. El
;resultado nos lo da en HAM2 y HAM1.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
72 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
73
rrf Temp_2,1
rrf Temp_2,1
rrf Temp_2,1
rrf Temp_2,1
rrf Temp_2,1
movf Temp_2,W
xorwf Temp_1,1
rrf Temp_2,1
movf Temp_2,W
xorwf Temp_1,1
rrf Temp_2,1
movf Temp_2,W
xorwf Temp_1,1
btfsc Temp_1,0 ;Copia C8 en bit 4 de HAM1.
bsf HAM1,4
btfss Temp_1,0
bcf HAM1,4
btfsc DAV,0 ;Copia bit 0 de DAV en el 1 de HAM2.
bsf HAM2,1
btfss DAV,0
bcf HAM2,1
btfsc DAV,1 ;Copia bit 1 de DAV en el 7 de HAM1
bsf HAM1,7
btfss DAV,1
bcf HAM1,7
btfsc DAV,2 ;Continua copiando los datos de DAV
bsf HAM1,6 ;en sus correspondientes bits de HAM1.
btfss DAV,2
bcf HAM1,6
btfsc DAV,3
bsf HAM1,5
btfss DAV,3
bcf HAM1,5
btfsc DAV,4
bsf HAM1,3
btfss DAV,4
bcf HAM1,3
btfsc DAV,5
bsf HAM1,2
btfss DAV,5
bcf HAM1,2
btfsc DAV,6
bsf HAM1,1
btfss DAV,6
bcf HAM1,1
btfsc DAV,7
bsf HAM1,0
btfss DAV,7
bcf HAM1,0
return
end
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
74 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
75
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
76 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
Capítulo 3
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
77
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
78 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
Así, por ejemplo, si el ascensor está en el primer piso y pulsamos la tecla ‘C’
(desde el segundo piso) este irá al segundo piso ya que lo estamos llamando desde el
mismo. De igual forma, si en lugar de la ‘C’ se pulsa el ‘2’, también acabará en el
segundo piso( se supone que estamos dentro del ascensor y pulsamos el botón ). Si
estamos dentro del ascensor, solo podemos pulsar las teclas 0, 1, 2 y 3; si estamos fuera,
solo podremos pulsar la tecla correspondiente al piso donde nos encontramos.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
79
Las siglas “UP” indican que el ascensor está subiendo de piso, en este caso el
ascensor estará en una posición intermedia entre el primero y el segundo piso; esta
posición intermedia viene representada por la barra de leds del upic trainer, por lo que
está deberá estar activada mediante su correspondiente jumper ( ver guía del upic
trainer ). Las siglas “DW” indicarán que el ascensor está bajando. Dos flechas hacia los
lados ( “” ó “ ” ) indican que las puertas del ascensor están abriéndose o
cerrándose ( en caso de movimiento en la barra de leds ) o que están ya abiertas o
cerradas (en caso de no haber movimiento).
Las puertas del ascensor se quedan abiertas cuando este está quieto en un piso ( e
esta forma se puede entrar en el desde el piso) en todos menos en el tercero ( por ser
“privado” ). En el tercero, el ascensor está siempre cerrado, abriéndose por un periodo
de tiempo para que la persona salga de él ( en caso de venir de otro piso ) o al pulsar ‘A’
( para que la persona entre ), volviéndose a cerrar inmediatamente.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
81
Estos últimos programas (LCD, teclado y p16f84) son los mismos que los
utilizados en la práctica 1, por tanto no se volverán ha explicar.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
82 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
ASCENSOR.ASM
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
83
;***************************************************************************
;Comienzo del programa.
INICIO: movlw d'0' ;Borra la variable PISO para situar
movwf PISO ;el ascensor en la planta baja.
bsf STATUS,RP0 ;Selecciona pagina 1 de datos
movlw b'00001111'
movwf OPTION_REG ;Preescaler de 128 para perro guardián
bcf INTCON,GIE ;Desconecta interrupciones
bcf STATUS,RP0 ;Selecciona pagina 0 de datos
clrwdt ;Refresca perro guardián
call UP_LCD ;Configura RB y RA para control del LCD
call LCD_INI ;Rutina de inicialización del LCD
movlw b'00001100'
call LCD_REG ;Conecta el LCD
movlw b'00000001' ;Borra el LCD y lo sitúa en la posición
call LCD_REG ;de inicio ( HOME ).
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
84 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
call delay
movlw ' '
call LCD_DATO
call delay
movlw 'P'
call LCD_DATO
call delay
movlw 'i'
call LCD_DATO
call delay
movlw 's'
call LCD_DATO
call delay
movlw 'o'
call LCD_DATO
call delay
movlw ':'
call LCD_DATO
call delay
movlw 'B'
call LCD_DATO
call delay
movlw 0xdf ;Código hexadecimal del 'º'
call LCD_DATO
call delay
movlw 0x8e
call LCD_REG
movlw 0x7f ;Código hexadecimal de flechas hacia
call LCD_DATO ;derecha e izquierda respectivamente.
movlw 0x7e
call LCD_DATO
clrwdt
;***************************************************************************
;Bucle principal del programa.
LOOP movlw 0x80 ;Mini-bucle para eliminar toda la
call LCD_REG ;1¦ fila salvo sus dos últimas posiciones
movlw d'14' ;(Nos muestran el estado de las puertas).
movwf DAV
movlw ' '
call LCD_DATO
decfsz DAV,1
goto $-3
Loop_1 clrwdt
call Key_Scan ;Explora el teclado
movlw 0x80
subwf Tecla,W ;Si hay tecla pulsada sale del bucle
btfsc STATUS,Z
goto Loop_1
call delay ;Retardo para evitar rebotes.
movlw b'01111110' ;Si la tecla pulsada es 'A', va a
subwf Tecla,W ;piso_B y desactiva bit0 de DAV.
btfsc STATUS,Z
bcf DAV,0
btfsc STATUS,Z
goto piso_B
movlw b'01111011' ;Si es una 'B' va a piso_1 y DAV,0=0
subwf Tecla,W
btfsc STATUS,Z
bcf DAV,0
btfsc STATUS,Z
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
85
goto piso_1
movlw b'01110111' ;Si es 'C' va a piso_2 y DAV,0=0
subwf Tecla,W
btfsc STATUS,Z
bcf DAV,0
btfsc STATUS,Z
goto piso_2
movlw b'10110111' ;Si es 'D' va a piso_3 y Temp_1,0=0
subwf Tecla,W
btfsc STATUS,Z
bcf Temp_1,0
btfsc STATUS,Z
goto piso_3
movlw b'01111101' ;Si es '0' va a piso_B y DAV,0=1
subwf Tecla,W
btfsc STATUS,Z
bsf DAV,0
btfsc STATUS,Z
goto piso_B
movlw b'11101110' ;Si es '1' va a piso_1 y DAV,0=1
subwf Tecla,W
btfsc STATUS,Z
bsf DAV,0
btfsc STATUS,Z
goto piso_1
movlw b'11101101' ;Si es '2' va a piso_2 y DAV,0=1
subwf Tecla,W
btfsc STATUS,Z
bsf DAV,0
btfsc STATUS,Z
goto piso_2
movlw b'11101011' ;Si es '3' va a piso_3 y Temp_1,0=1
subwf Tecla,W
btfsc STATUS,Z
bsf Temp_1,0
btfsc STATUS,Z
goto piso_3
goto Loop_1 ;Si no es ninguna vuelve a LOOP.
;**************************************************************************
; Rutina para llevar el ascensor a la planta baja.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
86 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
call delay
call delay
call delay
call delay
movlw d'3' ;Si el ascensor está en el tercer
subwf PISO,W ;piso, no cierra las puertas (ya
btfsc STATUS,Z ;están cerradas).
goto $+9
movlw 0x7e
call LCD_DATO
movlw 0x7f
call LCD_DATO ;Visualiza flechas cierra puertas.
call leds ;Visualización en leds del estado
clrf PORTB ;de las puertas y borrado de los mismas.
call delay
call delay
movlw 0x8e
call LCD_REG
movlw 'D'
call LCD_DATO
movlw 'W' ;Visualización 'DW' para comenzar a
call LCD_DATO ;bajar de piso.
movlw 0xce
call LCD_REG
movf PISO,W
addlw 0x30 ;Ajusta ASCII para visualización.
call LCD_DATO ;Visualiza piso actuar.
call leds
decfsz PISO,1 ;Cuando PISO=0 estamos en la planta baja
goto $-7 ; y salimos.
movlw 0xce
call LCD_REG
movlw 'B'
call LCD_DATO ;Visualiza posici¢n ascensor (B)
clrf PORTB
call delay
call delay
movlw 0x8e
call LCD_REG
movlw 0x7f
call LCD_DATO
movlw 0x7e
call LCD_DATO ;Visualización abre puertas con estado
call leds ;de las mismas en la barra de leds.
call delay
call delay ;Tras colocar ascensor en piso bajo y
goto LOOP ;cerrar las puertas, vuelve a LOOP.
;**************************************************************************
;Rutina para llevar el ascensor al primer piso.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
87
call LCD_DATO
movlw 0xdf
call LCD_DATO ;Visualiza '1º' (destino)
movlw ' '
call LCD_DATO
movlw ' '
call LCD_DATO
clrf PORTB
call delay
call delay
call delay
call delay
movlw d'3' ;Si el ascensor está en el tercer
subwf PISO,W ;piso, no cierra las puertas (ya
btfsc STATUS,Z ;están cerradas).
goto $+9
movlw 0x7e
call LCD_DATO
movlw 0x7f
call LCD_DATO
clrf PORTB
call delay
call leds
call delay
call delay
incf PISO,1 ;Si el ascensor está en la planta baja
decfsz PISO,1 ;sigue, si no (estará en 3ª o 2ª) va
goto esta_arriba ;a esta_arriba.
movlw 0x8e
call LCD_REG
movlw 'U'
call LCD_DATO
movlw 'P'
call LCD_DATO ;Visualización 'UP' y sube el ascensor
clrf PORTB ;un piso.
call delay
call leds
call delay
call delay
incf PISO,1
goto esta ;Como ya está en el primer piso va a esta.
esta_arriba movlw 0x8e
call LCD_REG
movlw 'D'
call LCD_DATO
movlw 'W' ;Visualiza 'DW' y baja el ascensor un piso.
call LCD_DATO
clrf PORTB
call delay
vuelve call leds
call delay
call delay
decf PISO,1
decfsz PISO,W
goto $+2 ;Si todavía no es el primero va a vuelve, si
goto esta ;ya estamos en el primero, va a esta.
movlw 0xce
call LCD_REG
movf PISO,W
addlw 0x30
call LCD_DATO ;Visualiza piso actuar.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
88 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
goto vuelve
esta movlw 0xce
call LCD_REG
movf PISO,W
addlw 0x30
call LCD_DATO ;Visualiza piso actuar (1º).
clrf PORTB
call delay
movlw 0x8e
call LCD_REG
movlw 0x7f
call LCD_DATO
movlw 0x7e
call LCD_DATO ;Para abrir las puertas.
clrf PORTB
call delay
call leds
call delay
call delay
goto LOOP
;**************************************************************************
;Rutina para llevar el ascensor al segundo piso.
movlw 0x7e
call LCD_DATO
movlw 0x7f
call LCD_DATO
clrf PORTB
call delay
call leds
call delay
call delay
movlw d'3' ;Si está en el tercero, baja un piso
subwf PISO,W ;si no (estará en Bº o 1º) va a esta_abajo.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
89
btfss STATUS,Z
goto esta_abajo
movlw 0x8e
call LCD_REG
movlw 'D'
call LCD_DATO
movlw 'W'
call LCD_DATO ;Visualiza 'DW' y baja un piso.
clrf PORTB
call delay
call leds
call delay
call delay
decf PISO,1
goto yaesta ;Como ya esta en el 2º va a yaesta.
esta_abajo movlw 0x8e
call LCD_REG
movlw 'U'
call LCD_DATO
movlw 'P'
call LCD_DATO ;Visualiza 'UP' y sube un piso.
clrf PORTB
call delay
call leds
call delay
call delay
incf PISO,1
movlw d'2'
subwf PISO,W
btfsc STATUS,Z ;Si ya está en el 2º va a yaesta, si no
goto yaesta ;sube otro piso.
movlw 0xce
call LCD_REG
movf PISO,W
addlw 0x30
call LCD_DATO
clrf PORTB
call delay
call leds
call delay
call delay
incf PISO,1
yaesta movlw 0xce
call LCD_REG
movf PISO,W
addlw 0x30
call LCD_DATO ;Visualiza piso actual (2º).
clrf PORTB
call delay
movlw 0x8e
call LCD_REG
movlw 0x7f
call LCD_DATO
movlw 0x7e
call LCD_DATO ;Abre puertas.
clrf PORTB
call delay
call leds
call delay
call delay
goto LOOP
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
90 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
;**************************************************************************
;Rutina para llevar el ascensor al segundo piso.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
91
btfsc STATUS,Z
goto $-5
call delay
movlw b'01111101'
subwf Tecla,W
btfss STATUS,Z
bsf Temp_1,1 ;Si la 3ª tecla NO es '0' activa el bit.
call no ;Va a comprobar la clave.
call UP_LCD
movlw 0x89
call LCD_REG
movlw '*'
call LCD_DATO
movlw 0x8b
call LCD_REG
movlw 'O'
call LCD_DATO
movlw 'K' ;Visualiza 'OK' ya que la clave es buena
call LCD_DATO ;y continua.
clrf PORTB
call delay
call delay
call delay
call delay
movlw d'3' ;Si está en el tercer piso (Se habrá pulsado
subwf PISO,W ;la 'A') abre las puertas y las cierra tras
btfsc STATUS,Z ;un tiempo.
goto abrecierra
btfsc Temp_1,0
call destino
btfss Temp_1,0 ;Visualiza mensaje llamada o destino según
call llamado ;si pulsamos 'A' o '3'.
movlw '3'
call LCD_DATO
movlw 0xdf
call LCD_DATO ;Visualiza destino (3º)
movlw ' '
call LCD_DATO
mov lw ' '
call LCD_DATO
clrf PORTB
call delay
call delay
call delay
call delay
movlw 0x7e
call LCD_DATO
movlw 0x7f
call LCD_DATO ;Cierra las puertas.
clrf PORTB
call delay
call leds
call delay
call delay
movlw 0x8e
call LCD_REG
movlw 'U'
call LCD_DATO
movlw 'P'
call LCD_DATO ;Visualiza 'UP'.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
92 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
clrf PORTB
call delay
aqu call leds ;Para subir un piso.
call delay
call delay
incf PISO,1
movlw d'3' ;Si ya estamos en el tercero va a aqui.
subwf PISO,W
btfsc STATUS,Z
goto aqui
movlw 0xce
call LCD_REG
movf PISO,W
addlw 0x30
call LCD_DATO ;Visualiza piso actual y vuelve a aqu.
goto aqu
aqui movlw 0xce
call LCD_REG
movf PISO,W
addlw 0x30
call LCD_DATO ;Visualiza piso actual (3º).
clrf PORTB
call delay
call delay
movlw 0x8e
call LCD_REG
movlw 0x7f
call LCD_DATO
movlw 0x7e
call LCD_DATO ;Para abrir las puertas.
call leds
call delay
call delay
call delay
call delay
;*************************************************************************
;Rutina para abrir las puertas y cerrarlas tras un tiempo (Solo al pulsar)
;la tecla 'A').
abrecierra movlw 0x80
call LCD_REG
movlw d'14'
movwf DAV
movlw ' ' ;Borra la primer línea salvo dos últimas
call LCD_DATO ;posiciones.
decfsz DAV,1
goto $-3
movlw 0x8e
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
93
call LCD_REG
movlw 0x7f
call LCD_DATO
movlw 0x7e
call LCD_DATO ;Abre las puertas.
call leds
call delay
call delay
call delay
call delay
call delay ;Periodo de espera.
call delay
movlw 0x8e
call LCD_REG
movlw 0x7e
call LCD_DATO
movlw 0x7f
call LCD_DATO ;Cierra las puertas.
call leds
call delay
call delay
goto LOOP ;Vuelve a LOOP.
;***************************************************************************
;Visualiza el mensaje 'NO' para indicar que la clave introducida no es buena.
no movlw '*'
call LCD_DATO
btfss Temp_1,1 ;Si algún digito es incorrecto se
return ;visualiza el mensaje 'NO', si todos son
movlw 0x8b ;buenos (Temp_1,1=0) vuelve.
call LCD_REG
movlw 'N'
call LCD_DATO
movlw 'O'
call LCD_DATO
clrf PORTB
call delay
call delay
call delay
call delay
bcf Temp_1,1
goto LOOP ;Vuelve a LOOP (por ser falsa la clave).
;***************************************************************************
;Rutina para visualizar el mensaje 'Llamado:'.
llamado call UP_LCD
movlw 0x80
call LCD_REG
movlw ' '
call LCD_DATO
movlw 'L'
call LCD_DATO
movlw 'l'
call LCD_DATO
movlw 'a'
call LCD_DATO
movlw 'm'
call LCD_DATO
movlw 'a'
call LCD_DATO
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
94 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
movlw 'd'
call LCD_DATO
movlw 'a'
call LCD_DATO
movlw ':'
call LCD_DATO
movlw ' '
call LCD_DATO
return
destino call UP_LCD
movlw 0x80
call LCD_REG
movlw ' '
call LCD_DATO
movlw 'D'
call LCD_DATO
movlw 'e'
call LCD_DATO
movlw 's'
call LCD_DATO
movlw 't'
call LCD_DATO
movlw 'i'
call LCD_DATO
movlw 'n'
call LCD_DATO
movlw 'o'
call LCD_DATO
movlw ':'
call LCD_DATO
movlw ' '
call LCD_DATO
return
;***************************************************************************
;Rutina para visualizar en la barra de leds, el estado del ascensor o las
puertas.
;Lo que hace es activar los leds de forma consecutiva (uno tras otro) y (una vez
;encendidos todos) apagarlos de igual manera pero en sentido inverso.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
95
movlw b'11111110'
movwf PORTB
call delay
movlw b'11111111'
movwf PORTB
call delay
movlw b'01111111' ;Una vez conectados todos, comienza a
movwf PORTB ;apagarlos desde el primero.
call delay
movlw b'00111111'
movwf PORTB
call delay
movlw b'00011111'
movwf PORTB
call delay
movlw b'00001111'
movwf PORTB
call delay
movlw b'00000111'
movwf PORTB
call delay
movlw b'00000011'
movwf PORTB
call delay
movlw b'00000001'
movwf PORTB
call delay
movlw b'00000000'
movwf PORTB
call delay
call delay
return
;***************************************************************************
;Rutina de temporización de unos 0,25 segundos.
delay movlw .250
movwf DAV1
delay1 movlw .250
movwf DAV ;La temporización se realiza mediante
delay2 nop ;las restas sucesivas de dos variables
decfsz DAV,F
goto delay2
decfsz DAV1,F
goto delay1
return
end
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
96 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
97
Capítulo 4
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
98 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
99
El pic que se va a utilizar para las prácticas realizadas va ha ser el 16f84. Este
pic es similar al 16c84, por tanto (aunque a veces se hable de éste) nos referimos al
16f84 a lo largo de toda la guía.
1. Encapsulado:
- MCLR: Esta patilla va a ser activada a nivel bajo para resetear el pic.
También se va a utilizar durante la grabación de la memoria de programa para introducir
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
100 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
por ella la tensión Vpp (12V – 14V DC). El micropic trainer tiene un botón de reset
conectado al pic como se ve en la figura 1.2 (R1 = 100 y R = 4K7).
Este circuito utiliza un cristal de cuarzo que actúa como un oscilador que
proporciona la frecuencia de 4MHz antes citada. Los condensadores C1 y C2 están
comprendidos entre 15 – 33 pF. El micro’pic trainer los utiliza de 27 pF.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
101
2. Arquitectura interna:
En la figura 2.1 aparece el diagrama de bloques del pic 16f84. Para analizar un
poco el funcionamiento del procesador, nos vamos a centrar en la ejecución de una
instrucción.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
102 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
La pila es una zona aislada de las memorias de instrucciones y datos (Ver fig.
2.3). Tiene una estructura LIFO (Last In First Out) en la que el último valor guardado es
el primero que sale. Tiene ocho niveles de profundidad cada uno con 13 bits. La
instrucción CALL (Ver apartado 5) y las interrupciones originan la carga del contenido
del PC en el nivel superior de la pila. El contenido del nivel superior se saca de la pila al
ejecutar las instrucciones RETURN, RETLW y RETFIE.
3. Registros internos:
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
103
- Registro PCL (02): Son los 8 bits de menos peso del contador del programa
o PC. Como el PC debe tiene un tamaño de 13 bits, sus bits de mayor peso se llevan al
registro PCLATH (posiciones 0A-8A). Como muestra la figura 3.2, si el PC es destino
de una instrucción, el contenido de PCLATH se tiene en cuenta automáticamente; para
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
104 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
las instrucciones CALL y GOTO tiene lugar la misma operación (teniendo en cuenta
que el PC está ahora codificado con 11 bits en la propia instrucción).
Figura 3.2. Determinación de los bits de mayor peso del PC a través del
PCLATH. A la derecha, para instrucciones CALL y GOTO.
TO PD Condición de reset
1 1 Reset por alimentación
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
105
Cada bit del registro INTCON (Figura 3.4) tiene un significado concreto que es
el que sigue:
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
106 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
107
RB7-RB0. A todas las líneas de esta puerta se le permite conectar una resistencia pull-
up de elevado valor con el positivo de la alimentación (se programa en el registro
OPTION). Las líneas RB7-RB4 pueden programarse para que generen una interrupción
si alguna de ellas cambia de valor (en ese caso se indicaría en el RBIF). Las líneas RB7
y RB6 también se utilizan para la grabación en serie de la memoria de programa (Ver
apartado 4).
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
108 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
datos (equivale a la dirección 1 del banco 1). En la figura 3.8 se puede ver la estructura
de este registro.
Figura 3.8. Distribución de los bits del registro OPTION
Los bits 0, 1 y 2 o PS0, PS1 y PS2 son los encargados de definir el valor con el
que actúa el divisor de frecuencia. En la tabla 3.2 se pueden ver los distintos valores que
puede tomar el divisor.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
109
Para leer la EEPROM basta con colocar la dirección a leer en EEADR y poner a
1 el bit RD. El dato leído estará disponible en el registro EEDATA.
4. Programación:
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
110 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
En la tabla 5.1, podemos ver las 35 instrucciones diferentes que se pueden usar
en la programación del pic 16F84. En la columna de sintaxis aparecen las siguientes
letras:
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
111
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
112 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
113
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
114 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
- SWAPF f, d: intercambia los cuatro bits de mayor peso con los cuatro de
menor peso de f y almacena el resultado en f o W (según d).
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
115
Capítulo 5
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
116 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
117
(1): dos zócalos para insertar cualquier microcontrolador de gama media tanto
de 18 (abajo) como de 28 patillas(arriba).
(2): Cristal de cuarzo junto con dos condensadores. Nos proporciona la
frecuencia de trabajo de 4 MHz.
(3): Pulsador que genera un reset en el PIC.
(4): 5 conmutadores correspondientes a 5 entradas digitales.
(5): 4 potenciómetros correspondientes a las 4 entradas analógicas.
(6): Jumpers (J8) para selección de entradas analógicas (jumpers arriba),
digitales (abajo) o para desactivar las entradas al puerto A.
(7): Conector de expansión PIC-BUS.
(8): Barra de leds conectada a la puerta B. Arriba está su pack de resistencias.
(9): Display 7 segmentos conectado a puerta B.
(10): Jumpers (J5, J6, J7) para la activación del display, los leds y el LCD.
(11): Módulo de visualización LCD.
(12): Potenciómetro de ajuste(P1) para el LCD.
(13): Conector DB25 para conexión con el canal paralelo de cualquier PC.
(14): Led (D5) que indica la presencia de la tensión de programación (Vpp).
(15): Condensadores (C1 y C2) y puente rectificador (D1) para transformar la
tensión alterna (12VAC) en continua (el transformador se conecta por arriba).
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
118 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
119
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
120 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
121
El PIC Trainer está montado sobre una placa de circuito impreso tamaño
Eurocard de 100x160 de doble cara. En la figura C se presenta la disposición y
orientación de los componentes sobre la placa de circuito impreso.
RESISTENCIAS CONDENSADORES
JUMPERS
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 INSTRUCCIÓN
0 0 0 0 0 0 0 0 0 1 Clear display
0 0 0 0 0 0 0 0 1 X Home
0 0 0 0 0 0 0 1 I/D S Entry mode set
0 0 0 0 0 0 1 D C B Display ON/OFF
0 0 0 0 0 1 S/C R/L X X Cur. or Dis. shift
0 0 0 0 1 DL N F X X Set
0 0 0 1 Dirección de la CG RAM Set address CG R
0 0 1 Dirección de la DD RAM Set address DD R
0 1 BF Dirección de la CG RAM o DD RAM Read busy flag
1 0 Código ASCII o byte del carácter gráfico Write data to Ram
1 1 Código ASCII o byte del carácter gráfico Read data de Ram
ABREVIATURAS EMPLEADAS
S Si es 1 desplaza la visualización al escribir un dato. Si es 0 modo normal
I/D Si es 1 el cursor se va incrementando, si es 0 decrementa
S/C Si es 1 desplaza el display, si es 0 mueve el cursor
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
124 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
- Set: establece el tamaño de interfase con el bus de datos, número de líneas del
display y tipo de carácter.
- Set the DD RAM address: los caracteres o gráficos que se van visualizando,
se van almacenando previamente en una memoria llamada DD RAM para de aquí pasar
a pantalla. Mediante esta instrucción se establece la dirección de memoria DD RAM a
partir de la cual irán almacenando los datos a visualizar. Las direcciones de la 80h a la
8Fh corresponden a los 16 caracteres de la primera línea del LCD y de la C0h a la CFh
al segundo.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
125
- Read busy flag&address: esta instrucción informa del estado del flag BUSY
además de proporcionar el valor del contador de direcciones de la CG o DD RAM
(según la última que se haya empleado). El flag BUSY indica si se está ejecutando una
instrucción (módulo ocupado) o no.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
126 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
- Entry mode set: incremento del cursor y modo normal del display.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
127
4. Software recomendado:
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
128 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
129
Capítulo 6
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
130 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
131
El pic trainer plus es un equipo que conectado al pic trainer permite ampliar y
experimentar prácticamente con los recursos más avanzados y más interesantes que
soportan los pic. En esta guía se explican únicamente las partes del pic trainer plus que
se utilizan en las prácticas realizadas. Las partes no utilizadas en dichas prácticas solo
nombran y describen muy brevemente. Para más información sobre estas partes
consultar el manual del pic trainer plus que proporciona la empresa Microsystems
Engineering.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
133
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
134 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
135
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
136 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
137
El PIC Trainer está montado sobre una placa de circuito impreso tamaño
Eurocard de 100x160 de doble cara. En la figura L se presenta la disposición y
orientación de los componentes sobre la placa de circuito impreso.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
138 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
La placa dispone tan solo de 4 jumpers (J1-J4) de 2 posiciones cada uno. Con
ellos se selecciona que señales se harán cargo del canal serie y del bus I²C. Todo ello
queda reflejado en la tabla H. Las casillas 2-1 y 2-3, indican que los jumpers están
abiertos o cerrados por esos pines.
3. El teclado hexadecimal:
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
139
Así, la línea RB0 está conectada a la columna 1 del teclado, la RB1 a la 2,...y lo
mismos con RB4 (a la fila 1), RB5 (a la fila 2),... Para comprobar si hay alguna tecla
pulsada, tendremos que activar las filas una a una y comprobar si hay alguna columna
activada (esta activación se verá si hay un 0 en alguna línea); por ejemplo, suponiendo
activada la C, la forma de detectarla es:
- Activo RB4 (fila 1): si una de las líneas RB0-RB3 esta a 0, esa línea tendrá una
tecla pulsada. En el caso de la “C”, no habría ninguna pulsada en la fila 1 y el puerto B
estaría 1110 1111 ya que RB0-RB3 es todo 1 (no pulsadas) y RB4 está activada por
nosotros.
- Activo RB5(fila 2) y ocurre lo mismo, en el puerto B tendríamos 1101 1111.
Con RB6 tendríamos 1011 1111.
- Al activar RB7(fila 4), nos aparecería activado RB3 (columna correspondiente
a la C) y en el puerto tendríamos 0111 0111, que sería el código binario correspondiente
a la “C” (en hexadecimal sería 77h).
Como podemos ver en la figura M, las líneas RB6 y RB7 también pueden actuar
como señales SDA y SCL para el interface I²C, aunque en las prácticas realizadas no se
ha utilizado este sistema.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
140 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
Para realizar un cable serie para dos terminales que puedan mandar y recibir
datos (ambos), se usa la configuración representada en la figura O. En nuestra práctica,
se van a enviar datos de una placa receptora (DTE) a una emisora (DCE). Para conectar
ambas placas, se va a utilizar el conector DB9 macho de ambas; se va a utilizar un cable
serie con conectores DB9 hembras a ambos lados y con solo tres conexiones internas: el
RxD de uno con el TxD del otro y al revés (el TxD del primero con el Rxd del segundo)
y el pin común (ver figura P).
Para realizar la comunicación, hay que programar las dos placas de la misma
forma, es decir, las características de la comunicación deben ser iguales para que los
datos enviados sean recibidos sin error. Estas características de la comunicación serie
son las que siguen:
- Para cada byte: Los dos terminales deben tener programados el mismo numero
de bits a recibir/transmitir. Los bits a transmitir pueden ser de 7 u 8, debiéndose
programar también cual se envía primero (el más o el menos significativo). Antes de
comenzar a enviar los 7 u 8 bits, se debe enviar un bit “1” de inicio, a partir del cual se
comienza transmisión en serie de los bits. Al terminar la emisión de los 7 u 8 bits, se
manda 1 o 2 bits de stop (deberán ser programado el mismo numero en ambos
terminales). De forma opcional se puede enviar un dato de paridad (si el numero de
unos del byte es impar, se envía un 1 y si es par un 0) para comprobar si hay errores.
- Velocidad de transmisión: los bits deben ser enviados y recibidos a la misma
velocidad. Si la velocidad fuera distinta, el receptor no habría tomado el bit en curso
cuando se mandara el siguiente (en caso de que su velocidad sea menor que el
transmisor). La velocidad se expresa en baudios por segundo (bps) y puede variar entre
110 y 19200. En nuestro caso esta velocidad va ha ser de 9600 bps.
- Eléctricamente, el transmisor pone un “1” cuando la tensión va de –5V (-3V
en el caso del receptor) a –15V y pone un “0” cuando va de +5V (+3V en el receptor) a
+15V.
Los niveles TTL proporcionados por el pic, son distintos a los usados en la
comunicación serie RS232, por ello necesitamos un circuito integrado (MAX232) que
adapte estos niveles. Como se ve en la figura Q, el MAX232 (para el caso del terminal
transmisor) convierte los niveles lógicos TTL presentes en la patilla 11 (dados por el
pic) de transmisión a niveles lógicos RS232 (se obtienen en la patilla 14) y se aplican al
conector DB9 para ser transmitidos. Para el caso del receptor, la señal llega a la patilla
13 del MAX232 desde el canal serie con niveles RS232 y son convertidos a TTL,
obteniéndose estos en la patilla 12 que llega al pic de la placa receptora.
Las líneas Rx y Tx son seleccionadas mediante los jumpers J3 y J4 para que sean
conectadas a RC6 y RC7 o a RB4 y RB5 (nuestro caso).
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
142 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
Para estudiar con mayor profundidad las rutinas, leer los comentarios incluidos
en los archivos.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
143
Presupuesto
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
144 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
145
Presupuesto
Neto I. V. A. ( 16 % ) Total
Total proyecto 573.680 ptas 91.789 ptas 665.469 ptas
El proyectista.
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
146 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
147
Apéndice A
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
148 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
149
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
150 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
151
Apéndice B
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
__
152 I. T. I. Especialidad Electrónica Industrial David Rodríguez González ___________
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84
_____________________________________________________________________________________
153
Bibliografía
3. “Microcontroladores PIC”
Christian Tavernier. ITP Paraninfo, 1995
http://www.microchip.com
Microchip: http://www.microchip.com
Parallax: http://www.parallaxinc.com
Electrónica: http://eya.swin.net
Programador: http://www.lokekieras.es/personales/mgsanz/programa.htm
Pic: http///members.es.tripod.de/~InfoE/infop.htm
____________________________________________________________________________________
Realización de un conjunto de prácticas basadas en el microcontrolador PIC16F84