Professional Documents
Culture Documents
PREFACIO.........................................................................................................................3
PRCTICA # 1.- INTRODUCCIN AL MPLAB..................................................................4
PRCTICA # 2.- USO DEL PROGRAMADOR DE MICROCONTROLADORES............11
PRCTICA # 3.- MANEJO DE PUERTOS DIGITALES...................................................16
PRCTICA # 4.- CONVERTIDOR ANALGICO DIGITAL..............................................21
PRCTICA # 5.- COMUNICACIN SERIE ASNCRONA...............................................25
PRCTICA # 6.- MANEJO DE TEMPORIZADORES......................................................32
PRCTICA # 7.- MANEJO DE MDULOS CAPTURE/COMPARE/PWM......................36
PRCTICA # 8.- MANEJO DE INTERRUPCIONES........................................................43
PRCTICA # 9.- PROGRAMACIN DE MEMORIA EEPROM.......................................48
PREFACIO
El presente manual de prcticas est diseado con el propsito de que el estudiante
aprenda a emplear las herramientas de Codificacin, Depuracin, Ensamble,
Simulacin y Programacin de Algoritmos en Lenguaje Ensamblador para
Microcontroladores de la compaa Microchip, de la familia PIC16F87x, con
actualizaciones para trabajar con circuitos de la familia PIC16F88x, el cual adems de
las caractersticas de la familia PIC16F87x cuenta con un oscilador interno. Aunque las
mismas prcticas pueden ser adaptadas para cualquier otro microcontrolador de la
misma familia que cuente con caractersticas de hardware similares.
El presente manual se divide en un total de 9 prcticas donde el alumno llevar a cabo
una comparacin entre los conocimientos adquiridos en el aula con la prctica.
Las primeras dos prcticas de laboratorio se centran en el manejo de herramientas de
software y hardware, que le permitirn al alumno codificar, depurar, ensamblar y simular
los algoritmos que disee (programa MPLAB IDE) adems de programar esos
algoritmos en un circuito Microcontrolador (Programadores Universales).
La tercera prctica es sobre manejo de los Sistemas Perifricos o Puertos del
microcontrolador, con los cuales el alumno llevar a cabo aplicaciones sencillas de
lectura de datos digitales o control de salidas digitales.
En la cuarta prctica, el alumno se familiarizar con el uso del sistema de Conversin
Analgica Digital, empleado en aplicaciones de lecturas de seales analgicas
continuas como es medicin de parmetros como temperatura, humedad, flujo, nivel,
etc.
En la quinta prctica, el alumno emplear el sistema USART (Sistema de comunicacin
serial RS-232), para establecer comunicacin con dispositivos perifricos externos que
empleen este mecanismo para comunicarse, por ejemplo una Computadora.
En las tres prcticas que siguen, en alumno se familiarizar con los Sistemas que
basan su funcionalidad en el uso del sistema de Reloj del Microcontrolador, que son
Temporizadores, Contadores, Entradas por Captura, Salidas por Comparacin, PWM,
as como el sistema de Interrupciones.
En la ltima prctica, el alumno aprender a leer y escribir datos en la memoria
EEPROM interna que se mantendrn almacenados permanentemente an cuando se
quite la alimentacin al circuito Microcontrolador.
M.I. Jess Alfonso Mrquez Borbn
Profesor Investigador de Carrera Asociado
Instituto Tecnolgico Superior de Cajeme
Agosto de 2010
INTRODUCCIN:
El MPLAB es un entorno de desarrollo integrado que le permite escribir y codificar los
microcontroladores PIC de Microchip para ejecutarlos. El MPLAB incluye un editor de
texto, funciones para el manejo de proyectos, un simulador interno y una variedad de
herramientas que lo ayudarn a mantener y ejecutar su aplicacin. Tambin provee una
interfase de usuario para todos los productos con lenguaje Microchip, programadores
de dispositivos, sistemas emuladores y herramientas de tercer orden.
El MPLAB est diseado para ser ejecutado bajo Windows 3.11, y puede operar con
Windows 95 y 98. Asume que el usuario ya conoce el entorno de Windows y sabe
manejarlo.
MATERIAL Y EQUIPO EMPLEADO
DESARROLLO
1. Para iniciar MPLAB IDE, dar doble clic al icono instalado en el Escritorio o
seleccionar Inicio>Programas>Microchip>MPLAB IDE vx.xx>MPLAB IDE.
a. Desplegndose la ventana de trabajo de MPLAB. (Figura 1).
2. Para seleccionar el dispositivo Microcontrolador con el que se trabajar, seleccione
el men Configure>Select Device. Esto abre un cuadro de dilogo donde deber
seleccionar el PIC16F877A o el PIC16F887 (o en su defecto el microcontrolador con
el que desees trabajar) si es que no se encuentra seleccionado. Se puede observar
un conjunto de indicadores de color que muestran el soporte que tiene la compaa
para el dispositivo seleccionado.
a. Indicador verde.- soporte completo
b. Indicador amarillo.- soporte preliminar.
c. Indicador rojo.- no existe soporte para este dispositivo.
P=16F877A
<P16F877A.INC>
__CONFIG
0x3F39
REG1
REG2
REG3
GRUESO
MEDIO
FINO
EQU
EQU
EQU
EQU
EQU
EQU
0x2C
0x2D
0x2E
0x40
0x40
0x50
RESET
ORG
GOTO
H'0000'
INICIO
INICIO
ORG
0x005
CLRW
MOVWF
PORTB
BSF
BCF
STATUS, RP0
STATUS, RP1
CLRF
TRISB
BCF
BCF
STATUS, RP0
STATUS, RP1
MOVLW
MOVWF
0x01
PORTB
CALL
RETARDO
MOVLW
MOVWF
0x00
PORTB
CALL
RETARDO
GOTO
PPAL
RETARDO
MOVLW
MOVWF
GRUESO
REG1
DEM3
MOVLW
MOVWF
MEDIO
REG2
DEM2
MOVWL
MOVWF
FINO
REG3
DEM1
DECFSZ REG3
GOTO
DEM1
PPAL
DECFSZ REG2
GOTO
DEM2
DECFSZ REG1
GOTO
DEM3
RETLW
END
P=16F887
<P16F887.INC>
_CONFIG1, 0x20D5
_CONFIG2, 0x3FFF
REG1
REG2
REG3
GRUESO
MEDIO
FINO
EQU
EQU
EQU
EQU
EQU
EQU
0x2C
0x2D
0x2E
0x40
0x40
0x50
RESET
ORG
GOTO
H'0000'
INICIO
INICIO
ORG
0x005
CLRW
MOVWF
PORTB
BSF
BCF
STATUS, RP0
STATUS, RP1
CLRF
TRISB
BCF
BCF
STATUS, RP0
STATUS, RP1
MOVLW
MOVWF
0x01
PORTB
CALL
RETARDO
MOVLW
MOVWF
0x00
PORTB
CALL
RETARDO
GOTO
PPAL
RETARDO
MOVLW
MOVWF
GRUESO
REG1
DEM3
MOVLW
MOVWF
MEDIO
REG2
DEM2
MOVWL
MOVWF
FINO
REG3
DEM1
DECFSZ REG3
GOTO
DEM1
PPAL
DECFSZ REG2
GOTO
DEM2
DECFSZ REG1
GOTO
DEM3
RETLW
END
y debe
4. Para ejecutar una instruccin del programa se selecciona Debugger>Step Into. Esto
ejecuta la lnea de cdigo actual y mueve la flecha a la siguiente lnea de cdigo a
ser ejecutada. Para seguir ejecutando el cdigo del programa se sigue
seleccionando la funcin Step Into.
5. Para regresar a una instruccin que ya ha sido ejecutada seleccionar
Debugger>Step Out. Cuando se manda llamar a una funcin y se desea observar
cmo se ejecuta instruccin por instruccin se selecciona Debugger>Step Into, pero
si lo que se desea es ejecutar la funcin como si fuera una instruccin seleccionar
Debugger>Step Over.
6. Existen una serie de opciones rpidas para las funciones de las herramientas de
depuracin:
Figura 3. Ventana Watch, para verificar los valores de los Registros y variables.
10. Ejecute el programa paso a paso, verificando los valores arrojados en cada variable
en la ventana de visualizacin al ejecutarse cada instruccin. Los registros y
variables que son modificadas con la ejecucin de cada instruccin, se ven de color
rojo).
INTRODUCCIN:
Un programador universal es un dispositivo electrnico que a travs del puerto paralelo
o USB de un equipo de cmputo, permite programar, leer, copiar o comprobar cualquier
dispositivo Dual In Line (Circuitos integrados con doble fila de terminales) de hasta 48
pins. Existe una lista de adaptadores para diferente tipo de encapsulados.
MATERIAL Y EQUIPO EMPLEADO
DESARROLLO
1. Para esta prctica es necesario contar con un programa funcional, que se encuentre
ya Ensamblado y Ligado, y de preferencia haber hecho una simulacin de la
funcionalidad del mismo.
2. Conectar el Programador Universal al puerto serie o paralelo, segn sea el caso.
3. Ejecutar el Software con el que opera el Programador Universal empleado:
PROGRAMADOR CHIPMAX
a) Ir al botn Inicio seleccionar Todos los Programas, seleccionar la opcin
EETools, y ejecutar el programa Max Loader. Debe aparecer una ventana como
la que se presenta en la figura 4.
j)
k)
l)
m)
n)
Actividad Complementaria:
Graba en un circuito el programa PRACT01A que se simulo en la prctica anterior,
disear un circuito para probar el funcionamiento de este programa.
VC C
U 1
M C LR
O SC 1
1
13
R A0
R A1
R A2
R A3
R A 4 /T 0 C L K
R A 5 /S S
R B 0 /IN T
R B1
R B2
R B3
R B4
R B5
R B6
R B7
R C 0 /T 1 O S I/T 1 C L K
R C 1 /T 1 O S O
R C 2 /C C P 1
R C 3 /S C K /S C L
R C 4 /S D I/S D A
R C 5 /S D O
R C 6
R C 7
R D 0 /P S P 0
R D 1 /P S P 1
R D 2 /P S P 2
R D 3 /P S P 3
R D 4 /P S P 4
R D 5 /P S P 5
R D 6 /P S P 6
R D 7 /P S P 7
R E 0 /R D
R E 1 /W R
R E 2 /C S
O S C 2 /C L K O U T
M C L R /V P P
O S C 1 /C L K
11
32
12
31
G N D
G N D
VD D
VD D
2
3
4
5
6
7
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
14
R 3
470
D 1
LED
O SC 2
P IC 1 6 F 8 7 7
VC C
C 1
O SC 1
22pF
C 2
R 2
47k
Y 1
8 MH z
SW 1
O SC 2
S W P U S H B U TTO N
22pF
M C LR
INTRODUCCIN:
Una unidad de entrada-salida, llamada tambin puerto, es un dispositivo empleado por
la computadora para recibir o enviar datos al mundo exterior. Algunos de estos
dispositivos son: teclado, ratn, interruptores, impresora, monitor, discos magnticos,
tarjetas de comunicacin, etc. Estos dispositivos al igual que las localidades de
memoria tienen direcciones nicas por medio de las cuales el procesador interacta con
ellos. Estas direcciones se expresan generalmente en hexadecimal.
El PIC16F877 contiene 5 puertos que pueden ser configurados como entrada o salida
digitales (A, B, C, D, E). El puerto A contiene 6 bits (RA0-5). El puerto B (RB0-7), el
puerto C (RC0-7) y el puerto D (RD0-7) tienen cada uno 8 lneas. El puerto E solo
cuenta con 3 lneas (RE0-2)
La operacin de configuracin de los puertos en general implica la siguiente secuencia:
Ingresar al banco 1
Configurar los puertos (registros TRISA, TRISB, TRISC, TRISD y TRISE)
Regresar al banco 0
Escribir o leer datos desde los puertos. (registros PORTA, PORTB, PORTC,
PORTD y PORTE )
MATERIAL Y EQUIPO EMPLEADO
DESARROLLO
1. Abrir el programa MPLAB y copiar la siguiente secuencia de cdigo la cual se
guardar con el nombre de PRAC03.ASM.
LIST P=16F877A
INCLUDE "P16F877A.INC"
__CONFIG
0x3F39
CONF_ADCON1
ORG
NOP
NOP
BSF
BCF
MOVLW
MOVWF
MOVLW
MOVWF
CLRF
BCF
BCF
BUCLE:
MOVF
MOVWF
GOTO
END
EQU b'00000110'
0x000
STATUS, RP0
STATUS, RP1
CONF_ADCON1
ADCON1
B'00111111'
TRISA
TRISB
STATUS, RP0
STATUS, RP1
PORTA, W
PORTB
BUCLE
;
;
;
;
;
;
;
;
;
;
;
;
;
LIST P=16F887
INCLUDE "P16F887.INC"
__CONFIG
_CONFIG1, 0x20D5
__CONFIG
_CONFIG2, 0x3FFF
CONF_ADCON1
ORG
NOP
NOP
BSF
BSF
CLRF
BCF
MOVLW
MOVWF
CLRF
BCF
BCF
BUCLE:
MOVF
MOVWF
GOTO
END
EQU b'00000110'
0x000
STATUS, RP0
STATUS, RP1
ANSEL
STATUS, RP1
B'00111111'
TRISA
TRISB
STATUS, RP0
STATUS, RP1
PORTA, W
PORTB
BUCLE
;
;
;
;
;
;
;
;
;
;
;
;
b.
c.
d.
e.
f.
g.
h.
i.
R 2
470
D 1
LED
R 3
470
D 2
LED
R 4
470
D 3
LED
R 5
470
D 4
LED
R 6
470
D 5
LED
R 7
470
D 6
LED
R 8
470
D 7
LED
R 9
470
D 8
LED
R B0
1
13
R B1
R A0
R A1
R A2
R A3
R A 4 /T 0 C L K
R A 5 /S S
R B 0 /IN T
R B1
R B2
R B3
R B4
R B5
R B6
R B7
R C 0 /T 1 O S I/T 1 C L K
R C 1 /T 1 O S O
R C 2 /C C P 1
R C 3 /S C K /S C L
R C 4 /S D I/S D A
R C 5 /S D O
R C 6
R C 7
R D 0 /P S P 0
R D 1 /P S P 1
R D 2 /P S P 2
R D 3 /P S P 3
R D 4 /P S P 4
R D 5 /P S P 5
R D 6 /P S P 6
R D 7 /P S P 7
R E 0 /R D
R E 1 /W R
R E 2 /C S
O S C 2 /C L K O U T
M C L R /V P P
O S C 1 /C L K
11
32
12
31
G N D
G N D
VD D
VD D
2
3
4
5
6
7
3
3
3
3
3
3
3
4
1
1
1
1
2
2
2
2
1
2
2
2
2
2
2
3
8
9
1
1
3
4
5
6
7
8
9
0
5
6
7
8
3
4
5
6
9
0
1
2
7
8
9
0
0
4
R
R
R
R
R
R
R
R
R
R
R
R
R
R
A
A
A
A
A
A
B
B
B
B
B
B
B
B
0
1
2
3
4
5
0
1
2
3
4
5
6
7
R B2
R B3
R B4
R B5
R B6
R B7
VC C
R 10
47k
O SC 2
R
R
R
R
R
R
P IC 1 6 F 8 7 7
R 12
47k
R 13
47k
R 14
47k
R 15
47k
5
4
3
2
1
0
1
1
1
1
1
1
1
9
6
5
4
3
2
1
0
VC C
A
A
A
A
A
A
R 11
47k
C 1
SW 2
O SC 1
C 2
Y 1
8 M H z
SW 1
O SC 2
S W D IP -8
1
2
3
4
5
6
7
8
22pF
R 1
47k
M C LR
SW P U SH B U TTO N
22pF
Actividad Complementaria:
VC C
VC C
U 1
M C LR
O SC 1
R 2
R A0
M C L R /V P P
R A1
O S C 1 /C L K
R A2
R A3
VD D
R A 4 /T 0 C L K
VD D
R A 5 /S S
R B 0 /IN T
R B1
R B2
R B3
R B4
R B5
R B6
R B7
R C 0 /T 1 O S I/T 1 C L K
R C 1 /T1 O S O
R C 2 /C C P 1
R C 3 /S C K /S C L
R C 4 /S D I/S D A
R C 5 /S D O
R C 6
R C 7
R D 0 /P S P 0
R D 1 /P S P 1
R D 2 /P S P 2
R D 3 /P S P 3
R D 4 /P S P 4
R D 5 /P S P 5
R D 6 /P S P 6
R D 7 /P S P 7
R E 0 /R D
R E 1 /W R
R E 2 /C S
O S C 2 /C L K O U T
1
13
12
31
G N D
G N D
11
32
2
3
4
5
6
7
3
3
3
3
3
3
3
4
1
1
1
1
2
2
2
2
1
2
2
2
2
2
2
3
8
9
1
1
3
4
5
6
7
8
9
0
5
6
7
8
3
4
5
6
9
0
1
2
7
8
9
0
0
4
R
R
R
R
R
R
R
R
R
R
R
R
R
R
A
A
A
A
A
A
B
B
B
B
B
B
B
B
0
1
2
3
4
5
0
1
2
3
4
5
6
7
R B0
R 3
R B1
R 4
R B2
470
470
470
R 5
470
R 6
470
R 7
470
R 8
470
R B3
R B4
a
b
c
d
e
R B5
R B6
f
g
VC C
R 10
47k
R 11
47k
R 12
47k
R 13
47k
O SC 2
P IC 1 6 F 8 7 7
R
R
R
R
3
2
1
0
1
1
1
1
1
1
1
9
6
5
4
3
2
1
0
VC C
A
A
A
A
C 1
SW 2
O SC 1
C 2
R 1
47k
Y 1
8 M H z
SW 1
O SC 2
S W D IP -8
1
2
3
4
5
6
7
8
22pF
M C LR
S W PU SH B U TTO N
22pF
Escriba un programa que configure el puerto B parte baja (RB0-RB3) como entrada
y la parte alta (RB4-RB7) como salida y el puerto C como salida, en el puerto B se
tendr conectado un teclado matricial de 4x4 y en el puerto C se tendrn conectado
en la parte baja (bits del 0 al 3) un circuito 74LS47 (Convertidor de binario a 7
segmentos) con 4 displays de 7 segmentos conectados en paralelo, y en la parte
alta del mismo puerto (bits 4 al 7) se tendrn conectados un transistor 2N2222 que
servir como interruptor para activar/desactivar cada uno de los displays (Como se
muestra en el diagrama). El programa checar la tecla presionada en el teclado
matricial conectado al puerto B y lo desplegara en el puerto C, haciendo un
corrimiento hacia la izquierda del valor anterior, ejemplo: si se tiene desplegado _ _
_ 1 y se presiona la tecla 3, se debe desplegar _ _ 1 3. Ensamblar, depurar,
simular el programa y probar el funcionamiento en un circuito Microcontrolador.
VC C
VC C
SW 2
U 1
M C LR
O SC 1
[0 ]
R A0
M C L R /V P P
R A1
O S C 1 /C L K
R A2
R A3
VD D
R A 4 /T0 C L K
VD D
R A 5 /S S
R B 0 /IN T
R B1
R B2
R B3
R B4
R B5
R B6
R B7
R C 0 /T 1 O S I/T 1 C L K
R C 1 /T 1 O S O
R C 2 /C C P 1
R C 3 /S C K /S C L
R C 4 /S D I/S D A
R C 5 /S D O
R C 6
R C 7
R D 0 /P S P 0
R D 1 /P S P 1
R D 2 /P S P 2
R D 3 /P S P 3
R D 4 /P S P 4
R D 5 /P S P 5
R D 6 /P S P 6
R D 7 /P S P 7
R E 0 /R D
R E 1 /W R
R E 2 /C S
O S C 2 /C L K O U T
1
13
G N D
G N D
11
32
12
31
VC C
2
3
4
5
6
7
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
14
R 10
47k
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
R
B
B
B
B
B
B
B
B
C
C
C
C
C
C
C
C
R 11
47k
R 12
47k
R 13
47k
SW 6
R
R
R
R
B
B
B
B
0
1
2
3
SW 10
[8 ]
SW 14
[C ]
R
R
R
R
B
B
B
B
SW 4
[1 ]
[2 ]
SW 5
[3 ]
SW 8
SW 7
[4 ]
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
SW 3
SW 9
[5 ]
[6 ]
[7 ]
SW 11
SW 12
SW 13
[9 ]
[A ]
[B ]
SW 15
SW 16
[D ]
[E ]
SW 17
[F ]
4
5
6
7
VC C
R
R
R
R
C
C
C
C
4
5
6
7
VC C
3
Q 1
12 N 2 2 2 2
VC C
3
Q 1
12 N 2 2 2 2
VC C
3
Q 1
12 N 2 2 2 2
O SC 2
P IC 1 6 F 8 7 7
R 1
47k
SW 1
M C LR
VC C
S W P U S H B U TTO N
C 1
O SC 1
22pF
C 2
22pF
Y 1
8 MH z
O SC 2
R
R
R
R
C
C
C
C
0
1
2
3
7
1
2
6
4
5
3
U 2
1
2
4
8
B I/R B O
R BI
LT
74LS48
A
B
C
D
E
F
G
1
1
1
1
9
1
1
3
2
1
0
5
4
R 2
470
R 3
470
R 4
470
R 5
470
R 6
470
R 7
470
R 8
470
A
B
C
D
E
F
G
3
Q 1
12 N 2 2 2 2
INTRODUCCIN:
Un convertidor analgico a digital tiene como entrada un nivel de voltaje (valor
analgico) y produce en su salida un nmero binario de n bits proporcionales al nivel de
la entrada (valor digital). Los convertidores de seal anloga a digital se abrevian como
ADC o A/D.
Uno de los parmetros que definen al A/D es la resolucin definida como la mnima
variacin de voltaje en la entrada que produce cambio del valor digital en la salida. Por
ejemplo: un convertidor de 10 bits tiene un total de 2 10 valores (1024 valores de 0 a
1023).
Si tenemos 10V a la entrada la resolucin seria de 9,765mV; en este caso el voltaje es
de 10V a 0V pero pueden variar. Por ejemplo si tenemos de 10v a 5v la resolucin ser:
Resolucin= (10v 5v)/1024=4.88 mV
Una frmula para el clculo ser:
Resolucin= (Vref2-Vref1)/1024
donde las tensiones de referencia son 10V y 5V, respectivamente.
MATERIAL Y EQUIPO EMPLEADO
DESARROLLO
1. Abrir el programa MPLAB y copiar la siguiente secuencia de cdigo la cual se
guardar con el nombre de PRAC04.ASM.
LIST P=16F877A
INCLUDE "P16F877A.INC"
__CONFIG
0x3F39
ORG 0x000
NOP
NOP
_INICIO
BCF STATUS, RP0
BCF STATUS, RP1
MOVLW B'01000001'
MOVWF ADCON0
BSF STATUS, RP0
BCF STATUS, RP1
CLRF TRISA
CLRF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE
MOVLW b'00000111'
MOVWF OPTION_REG
MOVLW B'00001110'
MOVWF ADCON1
BCF TRISA, 0
BCF STATUS, RP0
BCF STATUS, RP1
CLRF PORTC
_BUCLES
BTFSS INTCON, T0IF
GOTO _BUCLE
BCF INTCON, T0IF
BSF ADCON0, GO
_ESPERA
BTFSC ADCON0, GO
GOTO _ESPERA
MOVF ADRESH, W
MOVWF PORTC
GOTO _BUCLE
END
LIST P=16F887
INCLUDE "P16F887.INC"
__CONFIG
_CONFIG1, 0x20D5
__CONFIG
_CONFIG2, 0x3FFF
ORG 0x000
NOP
NOP
_INICIO
BCF STATUS, RP0
BCF STATUS, RP1
MOVLW B'01000001'
MOVWF ADCON0
BSF STATUS, RP0
BSF STATUS, RP1
BSF ANSEL, 0
BSF STATUS, RP0
BCF STATUS, RP1
CLRF TRISA
CLRF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE
MOVLW b'00000111'
MOVWF OPTION_REG
CLRF ADCON1
BCF TRISA, 0
BCF STATUS, RP0
BCF STATUS, RP1
CLRF PORTC
_BUCLES
BTFSS INTCON, T0IF
GOTO _BUCLE
BCF INTCON, T0IF
BSF ADCON0, GO
_ESPERA
BTFSC ADCON0, GO
GOTO _ESPERA
MOVF ADRESH, W
MOVWF PORTC
GOTO _BUCLE
END
c.
d.
VALORES TEORICOS
Vin
Valor Bin
Valor Dec
(Volts)
Calculado
Calculado
ERROR
% Error
VC C
U 1
1
13
R A0
R A1
R A2
R A3
R A 4 /T 0 C L K
R A 5 /S S
R B 0 /IN T
R B1
R B2
R B3
R B4
R B5
R B6
R B7
R C 0 /T 1 O S I/T 1 C L K
R C 1 /T 1 O S O
R C 2 /C C P 1
R C 3 /S C K /S C L
R C 4 /S D I/S D A
R C 5/S D O
R C 6
R C 7
R D 0 /P S P 0
R D 1 /P S P 1
R D 2 /P S P 2
R D 3 /P S P 3
R D 4 /P S P 4
R D 5 /P S P 5
R D 6 /P S P 6
R D 7 /P S P 7
R E 0 /R D
R E 1 /W R
R E 2 /C S
O S C 2 /C L K O U T
M C L R /V P P
O S C 1/C L K
11
32
12
31
G N D
G N D
VD D
VD D
R A0
470
D 1
LED
R 3
470
D 2
LED
R 4
470
D 3
LED
R 5
470
D 4
LED
R 6
470
D 5
LED
R 7
470
D 6
LED
R 8
470
D 7
LED
R 9
470
D 8
LED
R C 1
R C 2
3
4
5
6
7
8
9
0
5
6
7
8
3
4
5
6
9
0
1
2
7
8
9
0
R C 3
R C 4
R
R
R
R
R
R
R
R
C
C
C
C
C
C
C
C
0
1
2
3
4
5
6
7
R C 5
R C 6
R C 7
VC C
0
4
O SC 2
3
M C LR
O SC 1
2
3
4
5
6
7
3
3
3
3
3
3
3
4
1
1
1
1
2
2
2
2
1
2
2
2
2
2
2
3
8
9
1
1
R 2
R C 0
R 17
R 16
P IC 1 6 F 8 7 7
R A0
10K
470
VC C
C 1
O SC 1
22pF
C 2
22pF
R 1
47k
Y 1
8 M H z
O SC 2
SW 1
M C LR
SW P U SH B U TTO N
INTRODUCCIN:
Entre las herramientas que disponen los PIC16F87x se encuentra el USART, llamado
SCI (Serial Comunications Interface), puede funcionar como un sistema de
comunicacin bidireccional, adaptndose a multitud de perifricos y dispositivos que
transfieren informacin de forma serial, tales como una computadora. Tambin puede
trabajar en modo unidireccional para soportar perifricos como memorias,
convertidores, etc.
El USART (Transmisor/Receptor Sncrono/Asncrono Serie) puede trabajar de dos
formas:
o Asncrono (Bidireccional)
o Sncrono (Unidireccional)
En el modo asncrono, la comunicacin serie del USART en los PIC16F87x esta
soportada por las lneas RC6/TX/CK y RC7/RX/DT por las que se mueven los bits a la
frecuencia interna de reloj. En el modo sncrono, los bits de informacin circulan en
ambos sentidos por la lnea DT a la frecuencia de los impulsos que genere el maestro
por la lnea CK.
En el presente mdulo vamos a enfocar el estudio del modo asncrono.
En esta forma de comunicacin serie, se usa la norma RS-232-C, donde cada palabra
de informacin o dato se enva independientemente de los dems. Cada dato esta
formado de 8 9 bits y van precedidos por un bit de START (inicio) y detrs de ellos se
coloca un bit de STOP (parada), de acuerdo con las normas del formato estndar NRZ
(Non Return-to-Zero), los bits se transfieren a una frecuencia fija y normalizada. La
USART transmite y recibe primero el bit menos significativo.
La USART en modo asncrono contiene los siguientes elementos:
o Generador de Baudios
o Circuito de Muestreo
o Transmisor Asncrono
o Receptor Asncrono
DESARROLLO
1. Abrir el programa MPLAB y copiar la siguiente secuencia de cdigo la cual se
guardar con el nombre de PRAC05.ASM. (considerar un Xtal=4MHz).
LIST P=16F877A
INCLUDE "P16F877A.INC"
__CONFIG
0x3F39
ORG 0x00
NOP
NOP
BSF STATUS, RP0
BCF STATUS, RP1
CLRF TRISA
CLRF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE
BCF TRISC, 6
BSF TRISC, 7
MOVLW D'25'
MOVWF SPBRG
BCF TXSTA, BRGH
BCF TXSTA, SYNC
BCF STATUS, RP0
BCF STATUS, RP1
BCF RCSTA, SPEN
BCF STATUS, RP0
BCF
BCF
BCF
BSF
STATUS, RP0
STATUS, RP1
RCSTA, RX9
RCSTA, CREN
_ESPERARX
BTFSS PIR1, RCIF
GOTO _ESPERARX
MOVF RCREG, W
MOVWF PORTB
MOVWF TXREG
_ESPERATX
BTFSS PIR1, TXIF
GOTO _ESPERATX
GOTO _ESPERARX
END
BCF TRISC, 6
BSF TRISC, 7
MOVLW D'25'
MOVWF SPBRG
BCF TXSTA, BRGH
BCF TXSTA, SYNC
BCF STATUS, RP0
BCF STATUS, RP1
BCF RCSTA, SPEN
BCF STATUS, RP0
b.
STATUS, RP0
STATUS, RP1
RCSTA, RX9
RCSTA, CREN
c.
d.
_ESPERATX
BTFSS PIR1, TXIF
GOTO _ESPERATX
VC C
U 1
R 3
470
D 2
LED
12
31
G N D
G N D
VD D
VD D
2
3
4
5
6
7
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
14
R 4
470
D 3
LED
R 5
470
D 4
LED
R 6
470
D 5
LED
R 7
470
D 6
LED
R 8
470
D 7
LED
R 9
470
D 8
LED
R B2
R B3
R
R
R
R
R
R
R
R
B
B
B
B
B
B
B
B
0
1
2
3
4
5
6
7
R B4
R B5
R B6
R B7
TXD
R XD
VC C
U 3
16
R A0
R A1
R A2
R A3
R A 4 /T0 C L K
R A 5 /S S
R B 0 /IN T
R B1
R B2
R B3
R B4
R B5
R B6
R B7
R C 0 /T 1 O S I/T 1 C L K
R C 1 /T 1 O S O
R C 2 /C C P 1
R C 3 /S C K /S C L
R C 4 /S D I/S D A
R C 5 /S D O
R C 6
R C 7
R D 0 /P S P 0
R D 1 /P S P 1
R D 2 /P S P 2
R D 3 /P S P 3
R D 4 /P S P 4
R D 5 /P S P 5
R D 6 /P S P 6
R D 7 /P S P 7
R E 0 /R D
R E 1 /W R
R E 2 /C S
O S C 2 /C L K O U T
M C L R /V P P
O S C 1 /C L K
O SC 2
R XD
R 18
330
TXD B 9
R 19
330
12
9
14
7
R 1O U T
R 2O U T
T1O U T
T2O U T
VC C
P IC 1 6 F 8 7 7
R 1
R 2
T1
T2
IN
IN
IN
IN
C +
2
1uF
V+
C 1C 2+
V-
C 2-
M A X232
13
8
11
10
R 20
330 R XD B 9
R 21
330 TXD
1
3
4
5
C 3
C 4
1uF
1uF
C 6
15
VC C
C 1
1uF
O SC 1
22pF
LED
R B1
C 5
C 2
D 1
VC C
1
13
11
32
22pF
470
G N D
M C LR
O SC 1
R 2
R B0
R 1
47k
Y 1
8 MH z
O SC 2
SW 1
S W P U S H B U TTO N
M C LR
TXD B 9
R XD B 9
5
9
4
8
3
7
2
6
1
P1
C O N N E C TO R D B 9
Una vez que se abra el hyper terminal observar una ventana como la que se muestra.
Elija el cono para crear una conexin. A continuacin le aparecer una ventana de
mensajes:
Necesita instalar un modem antes de poder hacer una conexin Desea hacerlo
ahora? Elija el botn No
A continuacin aparece una ventana para seleccionar el puerto con el que operar la
conexin. Como el ICD est conectado al COM1 elegiremos en esta ventana el
COM2
Presione el botn Aceptar
Si todo ha terminado sin novedad aparecer una ventana como la que se muestra en
este momento podr usted conectarse con algn dispositivo que tenga conectado al
COM2 y que transmita bajo parmetros establecidos (2400:8:0:1:Ninguna)
INTRODUCCIN:
Un sistema temporizador est definido como Un sistema de control de tiempo que se
utiliza para abrir o cerrar un circuito en uno o ms momentos determinados, y que
conectado a un dispositivo lo pone en accin.
El Microcontrolador PIC16F877 cuenta con tres sistemas de temporizacin TMR0,
TMR1 y TMR2, los cuales consisten bsicamente en un registro contador el cual se
incrementa con una seal de reloj pre-escalada de la seal del oscilador externo,
cuando estos registros se desbordan en cierto tiempo se puede tomar una accin.
Algo muy importante de este sistema, es que depende directamente de la frecuencia
del oscilador externo. Por ejemplo, si se tiene un cristal de Xtal= 4 MHz, la frecuencia
de Oscilacin del Microcontrolador ser de una cuarta parte Fosc= 1MHz (Fosc
=Xtal/4), con lo que obtenemos el tiempo de incremento del Registro de Temporizacin
TMR0 (sin pre-escalacin) de T= 1/Fosc = 1 S, y si este registro tiene un tamao de 16
bits, tardar aproximadamente 65,535 S en desbordarse.
DESARROLLO
1. Abrir el programa MPLAB y copiar la siguiente secuencia de cdigo la cual se
guardar con el nombre de PRAC06.ASM. (Xtal= 4MHz).
LIST P=16F877A
INCLUDE "P16F877A.INC"
__CONFIG
0x3F39
CONTA EQU 0x20
ORG 0x00
NOP
NOP
_INICIO
BSF STATUS, RP0
BCF STATUS, RP1
CLRF TRISA
CLRF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE
MOVLW B'11000110'
MOVWF OPTION_REG
BCF STATUS, RP0
BCF STATUS, RP1
CLRF PORTC
_BUCLE
CALL _RETARDO
INCF PORTC, F
GOTO _BUCLE
_RETARDO
MOVLW D'64'
MOVWF CONTA
_ESPERA1
CLRF INTCON
MOVLW D'134'
MOVWF TMR0
_ESPERA
BTFSS INTCON, T0IF
GOTO _ESPERA
DECFSZ CONTA, F
GOTO _ESPERA1
RETURN
END
Nota:
hacer
las
modificaciones
necesarias para trabajar con el
PIC16F887.
b.
c.
d.
e.
f.
_ESPERA
BTFSS INTCON, T0IF
GOTO _ESPERA
VC C
U 1
M C LR
O SC 1
1
13
VD D
VD D
12
31
G N D
G N D
11
32
R A0
R A1
R A2
R A3
R A 4 /T 0 C L K
R A 5 /S S
R B 0 /IN T
R B1
R B2
R B3
R B4
R B5
R B6
R B7
R C 0 /T 1 O S I/T 1 C L K
R C 1 /T 1 O S O
R C 2 /C C P 1
R C 3 /S C K /S C L
R C 4 /S D I/S D A
R C 5 /S D O
R C 6
R C 7
R D 0 /P S P 0
R D 1 /P S P 1
R D 2 /P S P 2
R D 3 /P S P 3
R D 4 /P S P 4
R D 5 /P S P 5
R D 6 /P S P 6
R D 7 /P S P 7
R E 0 /R D
R E 1 /W R
R E 2 /C S
O S C 2 /C L K O U T
M C L R /V P P
O S C 1 /C L K
R 2
470
D 1
LED
R 3
470
D 2
LED
R 4
470
D 3
LED
R 5
470
D 4
LED
R 6
470
D 5
LED
R 7
470
D 6
LED
R 8
470
D 7
LED
R 9
470
D 8
LED
R C 0
2
3
4
5
6
7
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
14
R C 1
R A4
R B0
R C 2
R C 3
R C 4
R
R
R
R
R
R
R
R
C
C
C
C
C
C
C
C
0
1
2
3
4
5
6
7
R C 5
R C 6
R C 7
VC C
R 1
47k
O SC 2
SW 1
R B0
P IC 1 6 F 8 7 7
S W PU S H B U TTO N
VC C
VC C
C 1
O SC 1
22pF
C 2
22pF
R 1
47k
Y 1
8 M H z
O SC 2
SW 1
M C LR
SW PU SH BU TTO N
R 1
47k
SW 1
SW PU SH BU TTO N
R A4
INTRODUCCIN:
Algunos circuitos Microcontroladores cuentan con sistemas especiales que dependen
directamente de una seal externa o del sistema de temporizacin que les sirve como
evento de disparo. Los sistemas ms comunes asociados son: Entradas por Captura,
Salidas por Comparacin y generadores de seales PWM.
En el modo Capture, los registros CCPR1H:CCPR1L capturan el valor de 16-bits del
registro TMR1 cuando ocurre un evento en la terminal RC2/CCP1. Un evento se define
como:
Cada filo descendente
Cada filo ascendente
Cada 4 filos ascendentes
Cada 16 filos ascendentes
Figura 20. Diagrama a bloques del funcionamiento del sistema de Entradas por Captura
Figura 21. Diagrama a bloques del funcionamiento del sistema de Salidas por
Comparacin
La salida PWM tiene una base de tiempo (periodo) y un tiempo en el que la salida se
mantiene en alto (ciclo de operacin). La frecuencia de PWM es el inverso del periodo
(1/periodo).
DESARROLLO
1. Abrir el programa MPLAB y copiar la siguiente secuencia de cdigo la cual se
guardar con el nombre de PRAC07.ASM. (Xtal= 8MHz).
LIST
INCLUDE
__CONFIG
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
P=16F877A
"P16F877A.INC"
0x3F39
0X00
0X01
0X02
0X03
0X04
0X05
0X06
0X07
RC0
RC1
RC2
RC3
RC4
RC5
RC6
RC7
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
0X00
0X01
0X02
0X03
0X04
0X05
0X06
0X07
; *************************************************************************
ORG
0x00
REINICIO:
GOTO INICIO
; *************************************************************************
ORG
0x06
INICIO
CALL CONFIGURA_PUERTOS
CALL PWM1_15MS
CICLO:
BTFSS PORTB, RB0
GOTO GRADOS_90
; SI EL PUERTOB<0>
; SI EL PUERTOB<1>
; SI EL PUERTOB<2>
GRADOS_00:
CALL
GOTO
PWM1_05MS_B
CICLO
GRADOS_90:
CALL
GOTO
PWM1_15MS_B
CICLO
GRADOS_180:
CALL PWM1_25MS_B
GOTO CICLO
; *************************************************************************
CONFIGURA_PUERTOS:
CALL BANCO_0
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
CALL
MOVLW
MOVWF
MOVLW
BANCO_1
B'10000000'
TRISC
B'00001111'
MOVWF TRISB
CALL BANCO_0
RETURN
; *************************************************************************
PWM1_15MS:
;PASO1:
CALL
MOVLW
MOVWF
CALL
BANCO_1
0xF9
PR2
BANCO_0
;PASO2:
MOVLW 0X5D
MOVWF CCPR1L
BSF
BSF
;PASO3:
CALL
BCF
CALL
CCP1CON, 5
CCP1CON, 4
;CCPR1L:CCP1CON=375=0X177=[0X5D:<11>]
;CCPR1L:CCP1CON=187.5=0XBB=[0X2E:<11>]
BANCO_1
TRISC, 2
BANCO_0
;PASO4:
MOVLW B'00000110'
MOVWF T2CON
CLRF TMR2
;PASO5:
BSF
BSF
CCP1CON, 2
CCP1CON,3
RETURN
; *************************************************************************
PWM1_05MS_B:
;PASO2:
MOVLW 0X1F
MOVWF CCPR1L
BSF
BCF
CCP1CON, 5
CCP1CON, 4
;CCPR1L:CCP1CON=62.5=0X3E=[0X0F:<10>]
;CCPR1L:CCP1CON=62.5=0X3E=[0X0F:<10>]
RETURN
; *************************************************************************
PWM1_15MS_B:
;PASO2:
MOVLW 0X5D
MOVWF CCPR1L
BSF
CCP1CON, 5
;CCPR1L:CCP1CON=187.5=0XBB=[0X2E:<11>]
;CCPR1L:CCP1CON=187.5=0XBB=[0X2E:<11>]
BSF
CCP1CON, 4
RETURN
; *************************************************************************
PWM1_25MS_B:
;PASO2:
MOVLW 0X9C
MOVWF CCPR1L
BCF
BCF
CCP1CON, 5
CCP1CON, 4
;CCPR1L:CCP1CON=312.5=0X138=[0X4E:<00>]
;CCPR1L:CCP1CON=312.5=0X138=[0X4E:<00>]
RETURN
; *************************************************************************
BANCO_0:
BCF
STATUS, RP0
BCF
STATUS, RP1
RETURN
BANCO_1:
BSF
BCF
RETURN
STATUS, RP0
STATUS, RP1
BANCO_2:
BCF
BSF
RETURN
STATUS, RP0
STATUS, RP1
BANCO_3:
BSF
BSF
RETURN
STATUS, RP0
STATUS, RP1
; *************************************************************************
; FIN DEL PROGRAMA
; *************************************************************************
END
Nota: hacer las modificaciones necesarias para trabajar con el PIC16F887.
VC C
C 1
O SC 1
U 1
VD D
VD D
12
31
G N D
G N D
11
32
R A0
R A1
R A2
R A3
R A 4 /T 0 C L K
R A 5 /S S
R B 0 /IN T
R B1
R B2
R B3
R B4
R B5
R B6
R B7
R C 0 /T 1 O S I/T 1 C L K
R C 1 /T 1 O S O
R C 2/C C P 1
R C 3 /S C K /S C L
R C 4 /S D I/S D A
R C 5 /S D O
R C 6
R C 7
R D 0 /P S P 0
R D 1 /P S P 1
R D 2 /P S P 2
R D 3 /P S P 3
R D 4 /P S P 4
R D 5 /P S P 5
R D 6 /P S P 6
R D 7 /P S P 7
R E 0 /R D
R E 1 /W R
R E 2 /C S
O S C 2 /C L K O U T
M C L R /V P P
O S C 1/C L K
2
3
4
5
6
7
3
3
3
3
3
3
3
4
1
1
1
1
2
2
2
2
1
2
2
2
2
2
2
3
8
9
1
1
R 2
C C P1
U 4
470
3
4
5
6
7
8
9
0
5
6
7
8
3
4
5
6
9
0
1
2
7
8
9
0
R
R
R
R
B
B
B
B
0
1
2
3
470
6
5
22pF
D S1
8 M H z
Y 1
C 2
O SC 2
22pF
LAM P
4N 25A
VC C
VC C
C C P1
R 1
47k
R 4
47k
R 5
47k
R 6
47k
R 7
47k
SW 1
M C LR
R ESET
R
R
R
R
B
B
B
B
0
1
2
3
8
7
6
5
1
13
0
4
SW 18
S W D IP -4
O SC 2
P IC 1 6 F 8 7 7
1
2
3
4
M C LR
O SC 1
R 3
c.
d.
INTRODUCCIN:
La familia Pic16F87x tiene 13 fuentes de interrupciones los de 28 pines y 14 los de 40
pines. Al aceptarse una interrupcin se salva el valor del PC (contador de programa) en
la pila y se carga aquel con el valor 0004h, que es el Vector de Interrupcin. La mayora
de los recursos o perifricos de que disponen los Pic16F87x son capaces de ocasionar
una interrupcin, si se programan adecuadamente los bits de los registros que pasamos
a describir a continuacin.
1. Desbordamiento del TMR0
2. Activacin de la patita de interrupcin RB0/INT
3. Cambio de estado de una de las cuatro patitas de ms peso del puerto B
4. Finalizacin de la escritura de un byte en la EEPROM
Hasta aqu se tienen las mismas causas de interrupcin del Pic16F84
5. Desbordamiento del Timer1
6. Desbordamiento del Timer2
7. Captura o comparacin en el mdulo CCP1
8. Captura o comparacin en el mdulo CCP2
9. Transferencia en la puerta serie Sncrona
10. Colisin de bus en la puerta serie Sncrona
11. Fin de la transmisin en el USART
12. Fin de la recepcin en el USART
13. Fin de la conversin en el convertidor A/D
14. Transferencia en la puerta paralela esclava (Esta causa de interrupcin no est
disponible en los Pic16F87x de 28 patitas)
MATERIAL Y EQUIPO EMPLEADO
DESARROLLO
1. Abrir el programa MPLAB y escribir la siguiente secuencia de cdigo la cual se
guardar con el nombre de PRAC08.ASM. (Xtal= 4MHz).
LIST P=16F877A
INCLUDE "P16F877A.INC"
__CONFIG
0x3F39
_INT_SAVE_W
_INT_SAVE_STATUS
_INT_SAVE_FSR
_INT_SAVE_PCLATH
_INT_SAVE_OPTION_REG
ORG 0x00
NOP
GOTO _INICIO
ORG
MOVWF
SWAPF
MOVWF
SWAPF
MOVWF
SWAPF
MOVWF
SWAPF
MOVWF
0x20
0x21
0x22
0x23
0x24
_INICIO
BCF STATUS, RP0
BCF STATUS, RP1
MOVLW b'01000001'
MOVWF ADCON0
BSF STATUS, RP0
BCF STATUS, RP1
TRISA
TRISB
TRISC
TRISD
TRISE
;Var
;Var
;Var
;Var
;Var
para
para
para
para
para
guardar
guardar
guardar
guardar
guardar
W
STATUS
FSR
PCLATH
OPTION_REG
0x04
_INT_SAVE_W
STATUS, W
_INT_SAVE_STATUS
FSR, W
_INT_SAVE_FSR
PCLATH, W
_INT_SAVE_PCLATH
OPTION_REG, W
_INT_SAVE_OPTION_REG
GOTO _INTERRUPCION
CLRF
CLRF
CLRF
CLRF
CLRF
EQU
EQU
EQU
EQU
EQU
;
;
;
;
;
;
;Ir rutina de interrupcion
;Ir banco 0
;A/D conversion Fosc/8
;Ir banco 1
;PORTA
;PORTB
;PORTC
;PORTD
;PORTE
salida
salida
salida
salida
salida
BCF TRISC, 6
BSF TRISC, 7
MOVLW D'25'
MOVWF SPBRG
BCF TXSTA, BRGH
BCF TXSTA, SYNC
MOVLW B'00001110'
MOVWF ADCON1
BSF TRISA, 0
CLRF INTCON
CLRF PIE1
CLRF PIE2
BSF PIE1, RCIE
BSF INTCON, PEIE
BSF INTCON, GIE
BCF
BCF
BSF
BSF
BCF
;Ir banco 0
STATUS, RP0
STATUS, RP1
RCSTA, SPEN
STATUS, RP0
STATUS, RP1
_BUCLE
BSF ADCON0, GO
_ESPERA
BTFSC ADCON0, GO
GOTO _espera
MOVF ADRESH, W
MOVWF PORTC
GOTO _BUCLE
_INTERRUPCION
BCF INTCON, PEIE
MOVF ADRESH, W
MOVWF TXREG
_ESPERATX
BTFSS PIR1, TXIF
GOTO _ESPERATX
MOVF RCREG, W
BSF INTCON, PEIE
SWAPF _INT_SAVE_OPTION_REG, W
MOVWF OPTION_REG
SWAPF _INT_SAVE_PCLATH, W
MOVWF PCLATH
SWAPF _INT_SAVE_FSR, W
MOVWF FSR
SWAPF _INT_SAVE_STATUS, W
MOVWF STATUS
SWAPF _INT_SAVE_W, W
RETFIE
;Rutina de interrupcion
;Deshabilita INTR perifericos
;W= ADC
;Transmitir dato, TXREG = W
;Espera hasta que transmisin culmin
;No, ir _esperatx
;Limpia el flag de interrupcion RCIF =0
;Habilita INTR perifericos
;Restaurar valor de OPTIO_REG
;Restaurar valor de PCLATH
;Restaurar valor de FSR
;Restaurar valor de STATUS
END
;
;
;
;
;
;
c.
d.
c.
d.
VC C
U 1
R 3
470
D 2
LED
R A0
R 4
470
D 3
LED
R 5
470
D 4
LED
R 6
470
D 5
LED
R 7
470
D 6
LED
R 8
470
D 7
LED
R 9
470
D 8
LED
R B2
R B3
R
R
R
R
R
R
R
R
B
B
B
B
B
B
B
B
0
1
2
3
4
5
6
7
R B4
R B5
R B6
R B7
TXD
R XD
VC C
U 3
O SC 2
R XD
R 18
330
TXD B 9
R 19
330
P IC 1 6 F 8 7 7
1uF
V+
V-
C 1C 2+
C 2-
M A X232
13
8
11
10
R 20
330 R XD B 9
R 21
330 TXD
1
3
4
C 3
C 4
1uF
1uF
C 6
15
1uF
R 1
47k
SW 1
S W P U S H B U TTO N
M C LR
TXD B 9
R XD B 9
VC C
5
9
4
8
3
7
2
6
1
P1
3
Y 1
R 1 IN
R 2 IN
T 1 IN
T 2 IN
C +
VC C
O SC 2
R 1O U T
R 2O U T
T1O U T
T2O U T
VC C
O SC 1
8 M H z
12
9
14
7
R 17
R 16
R A0
10K
2
470
1
12
31
G N D
G N D
VD D
VD D
2
3
4
5
6
7
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
14
16
R A0
R A1
R A2
R A3
R A 4 /T 0 C L K
R A 5 /S S
R B 0 /IN T
R B1
R B2
R B3
R B4
R B5
R B6
R B7
R C 0 /T 1 O S I/T 1 C L K
R C 1 /T1 O S O
R C 2 /C C P 1
R C 3 /S C K /S C L
R C 4 /S D I/S D A
R C 5 /S D O
R C 6
R C 7
R D 0 /P S P 0
R D 1 /P S P 1
R D 2 /P S P 2
R D 3 /P S P 3
R D 4 /P S P 4
R D 5 /P S P 5
R D 6 /P S P 6
R D 7 /P S P 7
R E 0 /R D
R E 1 /W R
R E 2 /C S
O S C 2 /C L K O U T
M C L R /V P P
O S C 1 /C L K
C 1
22pF
LED
R B1
C 5
C 2
D 1
VC C
1
13
11
32
22pF
470
G N D
M C LR
O SC 1
R 2
R B0
C O N N EC TO R D B9
INTRODUCCIN:
La memoria EEPROM (llamada de datos) y la memoria FLASH (memoria de programa)
pueden ser ledas y escritas durante la ejecucin de un programa. Trabajan con el
voltaje de alimentacin del microcontrolador (VDD).
La memoria de datos (EEPROM) tiene una palabra de 8 bits. Cuando accedemos a
este bloque de memoria el registro EEDATA contiene los 8 bits de datos y el registro
EEADR contiene la direccin que deseamos trabajar. El PIC16F877 tiene 256
posiciones de memoria de datos (EEPROM) numeradas de 0x00 a 0xFF (de 0 a 255).
La memoria de datos (EEPROM) es una memoria no voltil que se graba
elctricamente, es til porque nos permite almacenar valores o parmetros que sean
persistentes en la ejecucin de la aplicacin. Esto es, que no se borren frente a la
prdida de energa o reset.
En la memoria FLASH (programa) podemos leer o escribir palabras. El acceso a la
memoria de programa se hace para el clculo del checksum y la calibracin de tablas
de almacenamiento. La escritura de un byte o de una palabra borra automticamente la
localizacin seleccionada y coloca en ella el dato elegido. La escritura de la memoria de
programa cesa todas las operaciones hasta que es completada. La memoria de
programa no puede ser accedida durante un ciclo de escritura por tanto ninguna
instruccin puede ser ejecutada. Durante la operacin de escritura el oscilador contina
trabajando los dems mdulos. Si se presenta una interrupcin, est queda en espera
(en una suerte de cola) hasta que el ciclo de escritura de la memoria de programa haya
terminado. Terminado el ciclo, ejecuta una instruccin ms (que se carg antes de que
empiece la grabacin) y luego salta al vector de interrupcin.
MATERIAL Y EQUIPO EMPLEADO
DESARROLLO
1. Abrir el programa MPLAB y escribir la siguiente secuencia de cdigo la cual se
guardar con el nombre de PRAC09.ASM. (Xtal= 4MHz).
LIST P=16F877A
INCLUDE "P16F877A.INC"
__CONFIG
0x3F39
ADDR_L EQU 0x20
DATA_L EQU 0x21
ORG 0x00
NOP
NOP
NOP
_INICIO
BSF STATUS, RP0
BCF STATUS, RP1
CLRF TRISA
CLRF TRISB
CLRF TRISC
CLRF TRISD
CLRF TRISE
BCF STATUS, RP0
BCF STATUS, RP1
CLRF PORTC
CLRF ADDR_L
CALL LEER_EEPROM
MOVF DATA_L, W
MOVWF PORTC
INCF DATA_L, F
CALL ESCRIBIR_EEPROM
_BUCLE
GOTO _BUCLE
ESCRIBIR_EEPROM:
BCF STATUS, RP0
BCF STATUS, RP1
MOVF ADDR_L, W
BCF STATUS, RP0
BSF STATUS, RP1
MOVWF EEADR
BCF STATUS, RP0
BCF STATUS, RP1
MOVF DATA_L, W
BCF STATUS, RP0
BSF STATUS, RP1
MOVWF EEDATA
BSF STATUS, RP0
BSF STATUS, RP1
BCF EECON1, EEPGD
BSF EECON1, WREN
;Ir banco 1
;PORTA
;PORTB
;PORTC
;PORTD
salida
salida
salida
salida
;Ir banco 0
;Limpiar PORTC
;ADDR_L = 0x00 (Variables en banco2)
;Llamar rutina de lectura
;W = DATA_L
;PORTC = W
;incremento del dato ledo de la EEPROM
;Llamar rutina de grabacin
;Ir _bucle
;Ir banco 0
;EEADR = ADDR_L
;Ir banco 2
;Ir banco 0
;EEDATA = DATA_L
;Ir banco 2
;Ir banco 3
;Apuntar a la memoria EEPROM
;Habilitar escritura
;Deshabilita interrupciones
;Escribe 55 hexadecimal
;Escribe AA hexadecimal
;Habilita el bit de escritura
;Habilita interrupciones
;Espera el final de grabacin
;Si no termina la grabacin: Ir _bucle
;Si termina Borra bandera interrupcin
;Deshabilitar escritura
;Ir banco 0
;Retorno
;Ir banco 0
;Cargar direccin a leer
;Ir banco 2
;Ir banco 3
;Apunta a la memoria EEPROM
;Habilita ciclo de lectura
;Ir banco 2
;W = EEDATA (leer dato de EEPROM)
;Ir banco 0
;DATA_L = W (almacena dato de EEPROM)
;Retorno
END
VC C
U 1
1
13
R A0
M C L R /V P P
R A1
O S C 1 /C L K
R A2
R A3
VD D
R A 4 /T 0 C L K
VD D
R A 5 /S S
R B 0 /IN T
R B1
R B2
R B3
R B4
R B5
R B6
R B7
R C 0 /T 1 O S I/T 1 C L K
R C 1 /T 1 O S O
R C 2 /C C P 1
R C 3 /S C K /S C L
R C 4 /S D I/S D A
R C 5 /S D O
R C 6
R C 7
R D 0 /P S P 0
R D 1 /P S P 1
R D 2 /P S P 2
R D 3 /P S P 3
R D 4 /P S P 4
R D 5 /P S P 5
R D 6 /P S P 6
R D 7 /P S P 7
R E 0 /R D
R E 1 /W R
R E 2 /C S
O S C 2 /C L K O U T
G N D
G N D
11
32
470
D 1
LED
2
3
4
5
6
7
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
8
9
10
14
R A0
R 3
470
D 2
LED
R 4
470
D 3
LED
R 5
470
D 4
LED
R 6
470
D 5
LED
R 7
470
D 6
LED
R 8
470
D 7
LED
R 9
470
D 8
LED
R C 1
R C 2
R C 3
R C 4
R C 5
R
R
R
R
R
R
R
R
C
C
C
C
C
C
C
C
0
1
2
3
4
5
6
7
R C 6
R C 7
VC C
MC LR
O SC 1
R 2
R C 0
R 17
R 16
R A0
O SC 2
10K
VC C
12
31
470
P IC 1 6 F 8 7 7
R 1
47k
C 1
O SC 1
SW 1
22pF
C 2
Y 1
8 MH z
MC LR
S W P U S H B U TTO N
O SC 2
22pF
c.
d.