Documente Academic
Documente Profesional
Documente Cultură
UNIVERSIDAD EAFIT
DEPARTAMENTO DE INGENIERIA DE
DISEO DE PRODUCTO
MEDELLIN
2002
TABLA DE CONTENIDO
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
INTRODUCCIN
CONCEPTOS BSICOS
COMPUERTAS LGICAS
FUNCIONES LGICAS CON BYTES
CIRCUITO COMBINACIONAL
LATCHES
FLIP-FLOP
MEMORIAS
ARITMTICA BINARIA
INTRODUCCIN AL MICROCONTROLADOR
EXPLICACIN DEL REGISTRO STATUS
SINTAXIS DE LAS INSTRUCCIONES
DIRECTIVAS PARA HACER UN PROGRAMA EN MICROCONTROLADOR
EJEMPLOS SENCILLOS DE DIAGRAMAS DE FLUJO
CONFIGURACIN DE LOS PUERTOS
EJEMPLOS SENCILLOS CON ENTRADAS Y SALIDAS DE DATOS
RETARDOS
MANEJO DE SUBRRUTINAS
EJEMPLO UTILIZANDO RETARDOS
GENERACIN DE TONOS CON MICROCONTROLADORES
MOTORES PASO A PASO
EJEMPLO DE MANEJO DEL MOTOR PASO A PASO
EXPLICACIN DE LAS INSTRUCCIONES DE ROTACIN
MANEJO DE DISPLAY 7 SEGMENTOS Y ANTIREBOTE
TRABAJOS CON PULSADORES
EJEMPLO CON MANEJO DE DISPLAY
MULTIPLEXAJE DE DISPLAY
EJEMPLO DE MULTIPLEXAJE
INTERRUPCIONES
EJEMPLO UTILIZANDO INTERRUPCION POR RB0
CONVERSOR ANALOGO / DIGITAL (A/D)
EJEMPLO DE CONVERSOR ANLOGO DIGITAL
COMUNICACIN SERIAL
EJEMPLO COMUNICACIN SERIAL
BIBLIOGRAFIA
2
7
9
10
13
13
16
21
23
27
30
31
33
37
38
40
44
45
46
48
49
52
55
57
59
61
64
66
70
73
77
79
83
INTRODUCCIN
MICROCONTROLADORES
2.
CONCEPTOS BSICOS:
27 26 25 24 23 22 21 20
DECIMAL
HEXADECIMAL
2.1
MICROCONTROLADORES
2.2
LSB
1 palabra = 16 bits
1 byte
= 8 bits
1 nible = 4 bits
1 byte = 1 0 1 0
1100
MICROCONTROLADORES
2.3
Este sistema es en base 16, lo que significa que para cada columna es posible
escoger uno de entre 16 dgitos.
Estos son: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E y F.
Donde
A = 10
B = 11
C = 12
D = 13
E = 14
F = 15
2.4
Para convertir un nmero binario en uno decimal, se hace la lista con los valores de
cada posicin y luego se suman los que corresponden a las posiciones donde hay
un 1.
Ejemplo
1 0 1 0 1
24 23 22 21 20
16 + 0 + 4 + 0 + 1=21
MICROCONTROLADORES
2.5
= 50
= 25
= 12
=6
=3
=1
=0
Residuo
Residuo
Residuo
Residuo
Residuo
Residuo
Residuo
1 LSB
0
1
0
0
1
1 MSB
RESPUESTA 1 1 0 0 1 0 12
2.6
decimal ?
162 161
2
B
160
6
2* 256 + 11 * 16 + 6 * 1 = 694
2.7
Ntese que cuatro bits binarios corresponden a un dgito hexadecimal. Esto es, se
refieren cuatro bits para contar de 0 hasta F. Para representar nmeros binarios
como nmeros hexadecimales, se forman grupos de cuatro comenzando en el punto
binario y en direccin a la izquierda. A continuacin se convierte cada grupo en el
correspondiente dgito hexadecimal.
Convertir 10111100 en un numero hexadecimal
1011
1100
10111100 = BC16
MICROCONTROLADORES
2.8
Binario ?
F
1111
FF16 = 11111111
2.9
2.10
0010
0101
BINARIO
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
HEXADECIMAL
0
1
2
3
4
5
6
7
8
9
A
B
BCD
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
0001 0000
0001 0001
6
MICROCONTROLADORES
12
13
14
15
1100
1101
1110
1111
C
D
E
F
0001 0010
0001 0011
0001 0100
0001 0101
3.
COMPUERTAS LGICAS
3.1
Compuerta AND: La compuerta AND genera una salida ALTO solo cuando
todas las entradas estn en nivel ALTO.
A
B
X=A*B
3.2
0
0
1
1
0
1
0
1
0
0
0
1
A
B
X=A+B
3.3
0
0
1
1
0
1
0
1
0
1
1
1
X
X=A
0
1
1
0
X
X=A
MICROCONTROLADORES
3.4
A
B
X=A*B
0
0
1
1
0
1
0
1
1
1
1
0
La compuerta NAND genera una salida a nivel bajo solo cuando todas las entradas
estn a nivel alto.
Cuando cualquiera de las entradas est a nivel bajo, la salida se pondr a nivel
ALTO.
3.5
A
B
X=A+B
0
0
1
1
0
1
0
1
1
0
0
0
La compuerta NOR genera una salida a nivel bajo cuando cualquiera de las entradas
esta a nivel alto.
3.6
3.7
X = AB + AB
0
0
1
1
0
1
0
1
0
1
1
0
X = AB + A.B
0
0
1
1
0
1
0
1
1
0
0
1
La salida se pone a nivel ALTO solo cuando las dos entradas estn a niveles lgicos
iguales.
INGENIERIA DE DISEO DE PRODUCTO
MICROCONTROLADORES
5.
AND
1 0 1 1 0 1 1 1
0 0 0 0 1 1 1 1
0 0 0 0 0 1 1 1
OR
1 0 1 1 0 1 1 1
1 1 1 1 0 1 1 0
1 1 1 1 0 1 1 1
XOR
1 0 1 0 1 1 1 1
1 0 1 0 1 1 0 0
0 0 0 0 0 0 1 1
CIRCUITO COMBINACIONAL
X = A*B + A*B
La salida es uno si A = 1 y B = 0, si A = 1 y B = 1
El numero de posibles combinaciones de un circuito combinacional esta
representado por 2n ; donde n significa el numero de entradas.
Por ejemplo un circuito combinacional con 3 entradas puede tener 8 posibles
combinaciones:
23 = 8
MICROCONTROLADORES
5.1
Problema:
Las acciones de una sociedad estn distribuidas de la siguiente manera:
El socia A tiene el 22% de las acciones, el socio B el 20%, el socio C el 27% y el
socio D el 31%. Cada decisin que toma la junta directiva compuesta por los cuatro
socios, ser aprobada con el 51% como mnimo del porcentaje total de las acciones.
Cada votacin de un socio es asumida como aceptada 1 y como no aceptada 0.
Se pide disear el circuito, que nos indique encendiendo un bombillo, cuando la
propuesta fue aceptada.
Pasos para el diseo de un circuito combinacional
1. Entender bien el problema.
2. Hacer la tabla de verdad. El numero de entradas determina el numero de
posibles combinaciones de la tabla de verdad con la formula 2n , donde n es
el numero de entradas.
En este caso cada socio representa una entrada, por los tanto el numero de
posibles combinaciones es 24 = 16
22%
A
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
20%
B
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
27%
C
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
31%
D
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
SALIDA
0
0
0
1
0
1
0
1
0
1
0
1
0
1
1
1
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
10
MICROCONTROLADORES
AB
00
01
11
10
11
MICROCONTROLADORES
CD
AB
00 01 11 10
00
01
11
10
00 01 11 10
00
01
11
10
AD
BD
ACD
CD
Salida
12
MICROCONTROLADORES
6.
LATCHES
0
0
1
1
0
1
0
1
Q
ESTADO PROHBIDO
0
1
NO CAMBIA
Por ejemplo para encender un motor con una estacin Start/ Stop, se enciende con
el Start y permanece encendido hasta que se oprima el pulsador de Stop.
7.
FLIP FLOP:
Los flip-flop son dispositivos biestables sincrnicos. En este caso sincrnico significa
que la salida varia de estado nicamente en un instante especfico de una entrada
de disparo denominada reloj (clock).
Un flip-flop disparado por flanco cambia de estado con el flanco positivo (flanco de
subida) o con el flanco negativo (flanco de bajada) del pulso de reloj.
INGENIERIA DE DISEO DE PRODUCTO
13
MICROCONTROLADORES
Flanco de
Subida
Flanco de
Bajada
Tabla de Verdad
Ck
NO CAMBIA
RESET
SET
ESTADO PROHIBIDO
Ck
Existen otros tipos de flip-flop que no se tratarn en el curso tales como: Flip Flop
JK y Tipo T.
Para implementar circuitos con flip flops existen circuitos integrados con diferentes
tipos de flip-flops.
En ste caso se trabajaran con el circuito integrado 74LS74 que es un flip flop tipo
D con entradas de preset y clear; se trabajar como latch S R y como flip flop
tipo D.
Adems se trabajar con el circuito integrado 74LS374, este circuito contiene 8 flip
flop tipo D, es decir un byte con un reloj comn.
A continuacin se muestran los circuitos de aplicacin.
14
MICROCONTROLADORES
PRIMER CIRCUITO
Como flip/flop set - reset
1K
1K
74LS 74
1K
15
MICROCONTROLADORES
1K
8.
MEMORIAS
Direccin
0
1
2
3
00
Bits
16
MICROCONTROLADORES
a) Memoria RAM
La memoria RAM (Ramdom-Acces Memory; Memoria de Acceso Rpido), es un tipo
de memoria en la que se tarda lo mismo en acceder a cualquier direccin de
memoria y stas se pueden seleccionar en cualquier orden , tanto en una operacin
de lectura como de escritura. Todas las RAMs poseen la capacidad de lectura y
escritura.
Las memorias RAM reciben el nombre de memoria voltil, ya que pierden los datos
almacenados cuando se desconecta la alimentacin.
b) Memoria ROM
La memoria ROM (Read_Only Memory; Memoria de solo lectura), es un tipo de
memoria en la que los datos se almacenan en forma permanente o semipermanente.
Los datos se pueden leer de una ROM, pero no existe la operacin de escritura
como en las RAM.
c) Memoria EPROM
Son memorias que se programan elctricamente y que se borran con la exposicin
de la memoria a una luz ultravioleta que pasa a travs de la ventana de cuarzo que
tiene en la parte superior del encapsulado.
INGENIERIA DE DISEO DE PRODUCTO
17
MICROCONTROLADORES
d) Memoria EEPROM
Son memorias que se pueden borrar y programar mediante impulsos elctricos. Ya
que se pueden grabar y borrar elctricamente, las EEPROM se pueden reprogramar
dentro del propio circuito final.
c) Memoria FLASH
Las memorias flash son memorias de lectura / escritura de alta densidad (alta
densidad se refiere a gran cantidad de almacenamiento de bits) no voltil, lo que
significa que los datos se pueden almacenar indefinidamente sin necesidad de
alimentacin; En nuestro caso y como ejemplo practico trabajaremos con una
memoria EPROM (2716) que tienen una capacidad de almacenamiento de 1024
bytes.
A continuacin se muestra el diagrama de la memoria 2716, identificando sus pines.
Los pines del A0 al A10 permiten escoger la posicin de memoria que se desee leer
o escribir; los pines O0 al O7 son los datos (1 byte); las lneas OE y CE son
habilitadores que nos permiten leer y escribir en la memoria la lnea; y VPP se utiliza
para grabar la memoria.
El ejemplo que se plantea como aplicacin consiste en mostrar en un display siete
(7) segmentos, en este caso ser un mensaje HOLA.
En la memoria se almacenan los cdigos correspondientes a cada letra, iniciando en
la direccin 0,
hasta la 3. En la direccin 0 se almacenan los cdigos
correspondientes de la letra H, en la direccin 1 la O y as sucesivamente hasta
completar el mensaje.
Se necesitar un contador que vaya cambiando la direccin de memoria en forma
automtica y cuando llegue a 4 comience de nuevo.
INGENIERIA DE DISEO DE PRODUCTO
18
MICROCONTROLADORES
O7
O6
O5
O4
O3
O2
O1
O0
19
MICROCONTROLADORES
20
MICROCONTROLADORES
9.
ARITMTICA BINARIA
8.1
Suma Binaria:
Las cuatro reglas bsicas para sumar dgitos binarios son:
0
0
1
1
+
+
+
+
0
1
0
1
=
=
=
=
0
1
1
0
suma
suma
suma
suma
0 con acarreo
1 con acarreo
1 con acarreo
0 con acarreo
0
0
0
1
Ejemplos
100 + 10
100 +
10
110
4+
2
6
10011100 + 00110011
11
10011100 +
00110011
11001111
156 +
51
207
10101011 + 01101100
1
11 1
10101011 +
01101100
00111111
Bit de acarreo
9.2
Resta Binaria:
21
MICROCONTROLADORES
1 0 1 1 0 0 1 0
Numero Binario
0 1 0 0 1 1 0 1
Complemento a uno
Numero Binario
Complemento a Uno
Complemento a Dos
Para restar dos nmeros binarios se calcula el complemento a dos del sustraendo y
se suman el mimuendo y el complemento a dos del sustraendo. Si genera un bit de
acarreo, el resultado es positivo o cero, sino lo genera, el resultado es negativo.
Ejemplo:
Restar
10111001
01000010
Minuendo
Sustraendo
10111001+
10111110
1 01110111
185 66
119
Numero Positivo
Ejemplo:
Restar
10111001
11100011
10111001+
00011101
11010110
185 227
- 42
Numero Negativo
Complemento a uno
Complemento a dos
- 42
INGENIERIA DE DISEO DE PRODUCTO
22
MICROCONTROLADORES
10.
INTRODUCCION AL MICROCONTROLADOR
Memoria de
Cdigo (Flash)
Bus de Direccin de
Instrucciones
Bus de Direccin de
Datos
Procesador
Bus de Instrucciones
Memoria de
Datos
(SRAM)
Bus de Datos
23
MICROCONTROLADORES
01h
Indirect addr.(*)
80h
OPTION_REG
81h
PCL
02h
PCL
STATUS
03h
STATUS
82h
83h
FSR
04h
FSR
84h
PORTA
05h
TRISA
85h
PORTB
06h
TRISB
86h
PORTC
07h
87h
PORTD (1)
08h
TRISC
PORTD (1)
PORTE (1)
09h
PORTE (1)
89h
PCLATH
INTCON
0Ah
0Bh
PCLATH
8Ah
INTCON
8Bh
88h
PIR1
0Ch
PIE1
8Ch
PIR2
0Dh
PIE2
8Dh
TMR1L
0Eh
PCON
8Eh
TMR1H
0Fh
8Fh
T1CON
10h
90h
TMR2
11h
SSPCON2
91h
T2CON
SSPBUF
12h
13h
PR2
SSPADD
93h
SSPCON
14h
94h
CCPR1L
15h
95h
96h
92h
CCPR1H
16h
CCP1CON
17h
RCSTA
18h
TXSTA
98h
TXREG
RCREG
19h
SPBRG
1Ah
99h
9Ah
CCPR2L
1Bh
9Bh
CCPR2H
1Ch
9Ch
CCP2CON
1Dh
97h
9Dh
1Eh
ADRESL
9Eh
ADCON0
1Fh
ADCON1
9Fh
Registros de
Propsito
General
96 Bytes
20h
Registros de
Propsito
General
80 Bytes
A0h
ADRESH
EFh
7Fh
Banco 0
Mapeados con
70h-7Fh
F0h
FFh
Banco1
24
MICROCONTROLADORES
Para seleccionar el banco al que se desea acceder en la RAM se emplean los bits 6
y 5 del registro de estado (status)
A partir de la posicin de memoria 20H estn los registros de propsito general,
donde se almacenan datos temporales durante la ejecucin del programa. Todos
estos registros son de 8 bits, por lo tanto el numero mximo que podemos almacenar
es 255.
Existe adems en el microcontrolador el registro W de 8 bits, es un registro de
trabajo y la mayor parte de las instrucciones del microcontrolador lo involucran.
OSC1 / CLK IN (9): Entrada del cristal de cuarzo o del oscilador externo.
OSC2 / CLK OUT (10): Salida del cristal de cuarzo.
VSS (8 - 19): Conexin a tierra (GND)
VDD (20): Conexin a positivo (+5V)
MCLR# / VPP (1): Entrada de Reset o entrada del voltaje de programacin.
Si no se va a utilizar se debe poner a +5V.
25
MICROCONTROLADORES
Puerto B: Este puerto esta compuesto por 8 lneas que se pueden configurar
como entrada / salida digital y para interrupciones externas.
RB0 (21): lnea de entrada / salida digital.
RB1 (22): lnea de entrada / salida digital.
RB2 (23): lnea de entrada / salida digital.
RB3 (24): lnea de entrada / salida digital.
RB4 (25): lnea de entrada / salida digital.
RB5 (26): lnea de entrada / salida digital.
RB6 (27): lnea de entrada / salida digital.
RB7 (28): lnea de entrada / salida digital.
Puerto C: Este puerto esta compuesto por 8 lneas que se pueden configurar
como entrada / salida digitales, adems sirve para trabajar con los
temporizadores del microcontrolador y la comunicacin serial.
RC0 (11): lnea de entrada / salida digital.
RC0 (12): lnea de entrada / salida digital.
RC0 (13): lnea de entrada / salida digital.
RC0 (14): lnea de entrada / salida digital.
RC0 (15): lnea de entrada / salida digital.
RC0 (16): lnea de entrada / salida digital.
RC0 (17): lnea de entrada / salida digital.
RC0 (18): lnea de entrada / salida digital.
INGENIERIA DE DISEO DE PRODUCTO
26
MICROCONTROLADORES
NOTA:
El cristal determina la velocidad de ejecucin del programa.
Para ejecutar un programa se necesita garantizar las siguientes conexiones.
11.
RP1
RP0
TO#
PD#
DC
Los tres bits de menos peso son los sealizadores de ciertas condiciones en las
operaciones lgicas aritmticas.
Z: Sealizador de cero: Se pone a 1 automticamente cuando el resultado de una
operacin lgica o aritmtica da cero.
C: Acarreo/llevada en el bit 8: Se pone a 1 automticamente cuando existe acarreo
en el bit de mas peso en las instrucciones de suma. Tambin acta como
sealizador de llevada en las instrucciones de resta, pero en este caso la
correspondencia es inversa. Es si vale 0 hay llevada.
DC: Acarreo/llevada en el bit 4: Funciona igual que el sealizador C, pero en el
cuarto bit. Es muy til en las operaciones con nmeros expresados en BCD.
27
MICROCONTROLADORES
RP0
Banco Seleccionado
0
0
1
1
0
1
0
1
Banco 0
Banco 1
Banco 2
Banco 3
En el caso del PIC16F873 solo se cuenta con dos bancos de memoria el banco 0 y
el banco 1.
El bit IRP se usa concatenado con el bit de mas peso del registro FSR para elegir el
banco de RAM en el direccionamiento indirecto.
IRP Seleccin del banco de RAM en direccionamiento indirecto.
0: Bancos 0 y 1
1: Bancos 2 y 3
En los primeros ejemplos que haremos solo usaremos los bits Z (cero) y C (carry)
del registro de estado.
28
MICROCONTROLADORES
PARMETROS
OPERACIN
CICLOS
SEALIZADORES
f,d
SUMA de W con f
C,DC,Z
ANDWF
f,d
AND de W con f
CLRF
BORRADO de f
CLRW
a,e
BORRADO de W
COMF
f,d
COMPLEMENTO de f
DECF
f,d
DECREMENTO de f
INCF
f,d
INCREMENTO de f
IORWF
f,d
OR de W con f
MOVIMIENTO de f
MOVIMIENTO de W a f
MOVF
f,d
MOVWF
NOP
ae
NO OPERACIN
RLF
f,d
RRF
f,d
SUBWF
f,d
C,DC,Z
SWAPF
f,d
XORWF
f,d
RESTA de W a f (f - W)
INTERCAMBIO de 4 bits de +peso por los 4
de peso.
OR exclusiva de W con f
1
1
f,b
BSF
f,b
INSTRUCCIONES DE <SALTO>
BTFSC
f,b
1 (2)
BTFSS
f,b
1 (2)
DECFSZ
f,d
DECREMENTO de f; SALTA si es 0
1 (2)
INCFSZ
f,d
INCREMENTO de f; SALTA si es 0
1 (2)
k
k
k
k
k
k
1
1
1
1
1
1
C, DC,Z
Z
Z
C,DC,Z
Z
k
K
k
LLAMADA a subrrutina
BORRADO del WATHDOG
SALTO a una direccin
RETORNO de interrupcin
RETORNO devolviendo literal en W
RETORNO de subrrutina
PUESTA del microprocesador en reposo
2
1
2
2
2
2
1
#TO, #PD
#TO,#PD
29
MICROCONTROLADORES
12.
Todas las instrucciones del microcontrolador tienen una sintaxis, que se indica en la
tabla de instrucciones:
1) MOVLW K: carga en W el valor del literal K.
K: es una constante que puede tomar el valores de 0 a 255, ya que es de 8
bits.
Las constantes se pueden indicar en 3 sistemas de numeracin diferentes:
MOVLW
MOVLW
MOVLW
.255
b11111111
0FFH
30
MICROCONTROLADORES
13.
Operacin
Operandos
Inicio
movlw
Comentarios
; Carga el circuito w
Etiquetas:
Son nombres simblicos que se asignan a una direccin de memoria. Por ejemplo,
cuando se escribe la palabra inicio, se le est diciendo al ensamblador que esa es la
direccin de memoria correspondiente donde quedar grabada la primera
instruccin.
Operacin:
Es la instruccin del microcontrolador que se ejecuta.
Operandos:
Son los registros o cantidades sobre los que se realizan las operaciones o
instrucciones. Puede ser un registro de la memoria de datos o un valor constante
que comnmente se conoce como literal.
Cuando se utilizan dos operandos, el primero es el operando fuente y el segundo es
el operando destino.
Comentario:
El ensamblador ignora esta lnea en el momento de generar el cdigo objeto, pero
para la persona que hace el programa es muy importante ya que ah puede escribir
la idea o la explicacin de lo que esta haciendo en esa lnea del programa.
Punto y coma (;):
Es un delimitador. Hace que el ensamblador ignore la linea de texto que se
encuentra a la derecha de l. Se usa para escribir comentarios acerca de la
instruccin particular que se tiene y de la accin que esta ejecutando el
microcontrolador.
Clases de lneas en un programa:
Se pueden usar cuatro tipos diferentes de lineas, la de igualdad (EQU), la de origen
(ORG), la de instruccin normal y la de final (END).
Igualdades:
Se utilizan para asignar un nombre o smbolo a un valor especifico (Hexadecimal).
Por ejemplo cuando se hace:
PORT B
EQU
06
Se est asignando el nombre PORTB al valor 06, que corresponde a la direccin
fsica del puerto B.
INGENIERIA DE DISEO DE PRODUCTO
31
MICROCONTROLADORES
Tambin se puede usar para asignar nombres a un numero cualquiera, por ejemplo:
EQU
CONTADOR
09
Origen:
ORG es una directiva del ensamblador que se usa para definir el sitio (de la
memoria) donde se desea escribir alguna porcin de programa en particular.
ORG
En este caso se indica que las instrucciones que vienen a continuacin quedarn a
partir de la direccin de memoria 00 en el microcontrolador.
Final:
Se usa para decirle al ensamblador que el programa ha terminado; se usa la
directiva END.
Encabezado del programa
list
P = 16F873
R = Hex
20
21
22
0
05
OPERANDO1
02
OPERANDO2
OPERANDO1
OPERANDO2,W
RESULTADO
END
;w=5
; w = OPERANDO1
;w=2
; w = OPERANDO2
; w = OPERANDO1
; w = w+OPERANDO2
; w = RESULTADO
; DIRECTIVA DEL FIN DE PROGRAMA
32
MICROCONTROLADORES
14.
EQU
20
LOOP
ORG
MOVLW
MOVWF
NOP
NOP
NOP
DECFSZ
GOTO
END
0
5
CONTADOR
EQU
20
ORG
MOVLW
MOVWF
MOVLW
XORWF
BTFSS
0
.10
NUMERO1
.15
NUMERO1,W
STATUS,Z
GOTO
GOTO
NOIGUAL
IGUAL
; Carga W con 15
; Lleva 15 a NUMERO1
; Carga W con 15
; Realiza una XOR entre W y NUMERO1
; Pregunta si el bit Z del registro de
; estado esta en uno
; Salta a NOIGUAL
; Salta a IGUAL
33
STATUS,Z
LOOP
INICIO
BTFSS
GOTO
GOTO
END
XORWF
.15
MOVLW
;lleva W al contador
CONTADOR
MOVWF
;carga W con o
INCF
ORG
MOVLW
20
EQU
INCLUDE <P16F873,INC>
Programa
LOOP
INICIO
CONTADOR
EJEMPLO 3
SI
Contador=15
34
NO
INCREMENTAR CONTADOR
CONTADOR=0
INICIO
Diagrama de flujo
MICROCONTROLADORES
LOOP
GOTO
END
MULTIPLICADOR,F
DECFSZ
RESULTADO
MOVWF
RESULTADO,F
.0
MOVLW
ADDWF
MULTIPLICADOR
MOVWF
MULTIPLICANDO,W
.Y
MOVLW
MOVF
MULTIPLICANDO
MOVWF
LOOP
.X
22
MOVLW
EQU
RESULTADO
21
EQU
MULTIPLICADOR
20
ORG
EQU
MULTIPLICANDO
INCLUDE <P16F873.INC>
Programa
NO
EN D
SI
M ultiplicador=0
35
R esultado=
resultado+m ultiplicando
Carga resultado=0
C argar m ultiplicador
C argar m ultiplicando
M U LTIPLIC AC I N
Diagrama de flujo
EJEMPLO 4
MICROCONTROLADORES
20
21
22
23
RESULTADO,F
LOOP
0
.X
DIVIDENDO
.Y
DIVISOR
.0
RESULTADO
DIVIDENDO,W
RESIDUO
DIVISOR,W
RESIDUO,F
.0
RESIDUO,W
STATUS,Z
EQU
EQU
EQU
EQU
LOOP
ORG
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVF
MOVWF
MOVF
SUBWF
MOVLW
XORWF
BTFSC
RETURN
INCFSZ
GOTO
END
DIVIDENDO
DIVISOR
RESULTADO
RESIDUO
INCLUDE <P16F873.INC>
LIST P=16F873, R=HEX
Programa
Incrementa
resultado
NO
END
SI
Residuo = 0
36
Residuo =
residuo-dividendo
Residuo=dividendo
Carga resultado=0
Cargar divisor
Cargar dividendo
DIVISIN
Diagrama de flujo
EJEMPLO 5
MICROCONTROLADORES
MICROCONTROLADORES
15.
Los puertos del microcontrolador se pueden configurar cada patica como entrada o
salida digital.
Cada lnea de cada puerto representa un bit, por ejemplo el puerto B:
RB7
RB6
RB5
RB4
RB3
RB2
RB1
RB0
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
RB0
RB1
RB2
RB3
RB4
RB5
RB6
RB7
Entrada
Salida
37
MICROCONTROLADORES
16.
Port B = 0
Rc 2 = 0 ?
Si
No
RB 0 = 0
RB 0 = 1
Programa:
Include
LIST
LOOP
H1
<P16F873. INC>
P = 16873 = HEX
ORG
MOVLW
TRIS
MOVLW
TRIS
CLRF
BTFSS
GOTO
BSF
GOTO
BCF
GOTO
END
0
PORTB
.255
PORTC
PORTB
PORTC,2
H1
PORTB,0
LOOP
PORTB,0
LOOP
38
EJEMPLO 6
EQU
0
B'00000001
PORTC
B'00000000
PORTB
.0
CONTADOR
PORTB
PORTC,0
ASCENDENTE
CONTADOR,W
STATUS,Z
DESCENDENTE
CONTADOR,1
CONTADOR,0
PORTB
PUERTO
.15
CONTADOR
PUERTO
.15
CONTADOR,W
STATUS,Z
INICIO
CONTADOR,1
CONTADOR,W
PORTB
PUERTO
20
<P16F873.INC>
P=16F873,
R=HEX
ORG
MOVLW
TRIS
MOVLW
TRIS
INICIO
MOVLW
MOVWF
MOVWF
PUERTO
BTFSC
GOTO
MOVF
BTFSC
GOTO
DECF
MOVF
MOVWF
GOTO
DESCENDENTE MOVLW
MOVWF
GOTO
ASCENDENTE MOVLW
XORWF
BTFSC
GOTO
INCF
MOVF
MOVWF
GOTO
END
CONTADOR
INCLUDE
LIST
Programa
SI
Inc cont
NO
Cont=15
SI
SI
39
Dec cont
NO
Cont=0
NO
Cont=1
RC0=1
CONTADOR=0
INICI
Diagrama de flujo
MICROCONTROLADORES
MICROCONTROLADORES
17.
RETARDOS
Contador = 15
Decremento de
Contador
No
Contador = 0
Si
FIN
Programa:
Include < P16F873. INC>
LIST P=16F873, R = HEX
CONTADOR
EQU
20
CICLOS DE RELOJ
LOOP
ORG
0
MOVLW
.15 _______ 1
MOVWF CONTADOR __ 1
DECFSZ CONTADOR ___ 1
GOTO LOOP __________ 2
END
45 + 2 = 47
3 x 15 = 45
40
MICROCONTROLADORES
LOOP, en este caso lo hace 15 veces, ya que con este valor se carga inicialmente el
contador, se puede ver que las instrucciones: DECFSZ CONTADOR,F y GOTO
LOOP se ejecutan 15 veces y se demoran 3 ciclos de reloj, por lo tanto, 3 (ciclos de
reloj) x 15 (veces que se repite), nos da como resultado 45, adems las
instrucciones MOVLW .15 y MOVWF CONTADOR solo se ejecuta una vez.
En total el tiempo de ejecucin ser 45 + 2 = 47 ciclos de reloj, es decir 47s.
El numero mximo con el que se puede cargar un contador (registro de memoria) es
255 ya que cada posicin de memoria es de 8 bits.
Para calcular el tiempo total de ejecucin del programa se utiliza la formula:
T = 3 x N +2, donde N es el valor inicial que se le asigna al contador, esto significa
que el retardo mximo que se puede conseguir con un solo registro, es:
3 x 255 + 2 = 767s.
Cuando se quiere retardos de tiempos mayores se utilizan 2 o 3 contadores
(registros).
Ejemplo: se quiere hacer un retardo de 40 ms (milisegundos) = 40.000 s
(microsegundos) siempre se debe pasar el tiempo a microsegundos.
Para generar retardos mayores a 767 microsegundos utilizamos dos contadores y el
diagrama de flujo en el siguiente:
INICIO
CONTADOR 1 = M
CONTADOR 2 = N
DECREMENTA
CONTADOR 2
No
CONTADOR 2 = 0
DECREMENTA
CONTADOR 1
No
CONTADOR 1 = 0
FIN
INGENIERIA DE DISEO DE PRODUCTO
41
MICROCONTROLADORES
LOOP1
LOOP
EQU
EQU
20
21
ORG
MOVLW
MOVWF
MOVLW
MOVWF
DECFS2
GOTO
DECFS2
GOTO
END
O
M
CONTADOR 1
N
CONTADOR 2
T1=3x N+2
CONTADOR 2, F
LOOP
CONTADOR 1, F ___________________1
LOOP, ___________________________2
T 2 = (T 1 + 3) M
42
MICROCONTROLADORES
Diagrama de Flujo
Inicio
Contador 1 = L
Contador 2 = M
Contador 3 = N
Decrementar
contador 3
No
Contador 3 = 0
Si
Decrementar
contador 2
NO
Contador 2 = 0
Si
Decrementar
contador 1
NO
Contador 1 = 0
Si
FIN
Suponiendo que M y N sean 255 y partiendo de los clculos del ejemplo anterior nos
da 196352 s.
Para calcular T3 se aplica la formula:
T3 = (T2 + 2 + 3) x L
T3 = (169350 + 2 + 3) x L
T3 = (196355) x L
43
MICROCONTROLADORES
18.
MANEJO DE SUBRUTINAS
Las subrutinas son subprogramas que se llaman varias veces en un programa, por
ejemplo los retardos.
Para llamar una subrutina se utiliza la instruccin CALL N, donde N es el nombre de
la subrutina. El programa salta a la subrutina y cuando termina de ejecutarla
continua con la siguiente instruccin del programa que llamo la subrutina.
Programa Principal
.
.
.
LOOP BSF PORTB, 0
CALL RETARDO
BCF PORTB, 0
CALL RETARDO
Subrutina
RETARDO
.
.
.
.
.
.
RETURN
GOTO LOOP
44
MICROCONTROLADORES
19.
Configurar Puertos
RB 0 = 0
Retardo 1 segundo
RB 0 = 1
Retardo 1 segundo
45
MICROCONTROLADORES
Programa:
Include <P16F873.INC>
LIST P=16F873, R=HEX
REG1
REG2
REG3
LOOP
RETARDO
REP3
REP2
REP1
EQU
EQU
EQU
20
21
22
ORG
MVLW
TRIS
BSF
CALL
BCF
CALL
GOTO
0
0
PORTB
PORTB,0
RETARDO
PORTB,0
RETARDO
LOOP
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
.5
REG1
.255
REG2
.255
REG3
REG3,F
REP1
REG2,F
REP2
REG3,F
REP3
END
20.
Se puede notar que el periodo esta compuesto por el tiempo en que la salida
permanece en alto 1 y en bajo 0.
En el caso de la frecuencia de 1KHz nos da un periodo de 1000 s que se divide en
dos, por lo tanto T/2 = 500 s
46
MICROCONTROLADORES
Inicio
Activar Salida
Desactivar Salida
Programa:
Include <P16F873.INC>
LIST
P= 16F873, R=Hex
CONTADOR
LOOP
RETARDO
LOOP1
EQU
20
ORG
MOVLW
0
B11111110
TRIS
BSF
CALL
BCF
CALL
GOTO
PORTB
PORTB,0
RETARDO
PORTB,0
RETARDO
LOOP
MOVLW
MOVWF
DECFSZ
GOTO
RETURN
END
.166
;RETARDO DE 500s.
CONTADOR
CONTADOR,F
LOOP 1
47
MICROCONTROLADORES
21.
Los motores paso a paso son un tipo especial de motores que permiten el
movimiento de su eje en ngulos muy precisos y por pasos, tanto a la izquierda
como a la derecha. Aplicando a ellos una secuencia de pulsos.
Cada paso tiene un ngulo muy preciso, determinado por la construccin del motor
lo que permite realizar movimientos exactos.
Son utilizados para generar movimientos precisos, por ejemplo en robots, en equipos
con movimientos X-Y, entre otros.
Existen dos tipos de motores paso a paso:
1. Motores Unipolares: este tipo de motor tienen dos bobinas en cada uno de los
estatores y cada par de bobinas tienen un punto comn, es decir, tiene seis
terminales.
2. Motores Bipolares: este tipo de motor tiene dos bobinas y no poseen puntos
comn, es decir tiene cuatro terminales.
Para controlar este tipo de motor paso a paso bipolar es necesario una fuente con
polaridad positiva y negativa.
48
MICROCONTROLADORES
Para controlar el motor paso a paso se debe conocer su secuencia y sus terminales,
de tal manera que el circuito o el programa en microcontrolador genere la secuencia
lgica de cuatro bits que energiza una bobina del motor en el orden correcto.
GIRO A LA IZQUIERDA
Q2
Q3
Q4
OFF
ON
OFF
OFF
OFF
OFF
OFF
ON
OFF
OFF
OFF
OFF
OFF
ON
OFF
PASOS
1
2
3
4
1
Q1
Q2
Q3
Q4
OFF
OFF
OFF
ON
OFF
OFF
OFF
ON
OFF
OFF
OFF
ON
OFF
OFF
OFF
ON
OFF
OFF
OFF
ON
Las seales que habilita cada transistor pueden venir desde un circuito integrado o
desde el microcontrolador, el transistor lleva el negativo a la bobina del motor, en el
momento en que es habilitado.
La velocidad del motor depende de la frecuencia con que se enven los pulsos a
cada transistor.
Existen otras formas de controlar un motor paso a paso para generar ms torque o
hacerlo ms preciso, en el prximo ejemplo se ver una nueva forma.
22.
49
MICROCONTROLADORES
Inicio
ABCD
1 1 0 0
0 1 1 0
0 0 1 1
1 0 0 1
1 1 0 0
12
6
3
9
12
Sentido horario
No
Si
PortB=00001001
PortB=00000011
Retardo 100ms
Retardo 100ms
PortB=00001100
PortB=00000110
Retardo 100ms
Retardo 100ms
PortB=0000110
PortB=0001100
Retardo 100ms
Retardo 100ms
PortB=0000011
PortB=0001001
Retardo 100ms
Retardo 100ms
50
MICROCONTROLADORES
Programa:
Include <P16F873>
LIST
P=16F873
REG2
REG3
SEC
LOOP
HOR
RETARDO
REP2
REP1
EQU
EQU
20H
21H
ORG
MOVLW
TRIS
MOVLW
TRIS
BTFSS
GOTO
MOVLW
MOVWF
CALL
MOVLW
CALL
MOVLW
MOVWF
CALL
MOVLW
MOVWF
CALL
GOTO
MOVLW
MOVWF
CALL
MOVLW
MOVWF
CALL
MOVLW
MOVWF
CALL
MOVLW
MOVWF
CALL
GOTO
0
0
PORT B
.255
PORTC
PORTC,2
HOR
.9
PORT B
RETARDO
.3
RETARDO
.6
PORT B
RETARDO
.12
PORT B
RETARDO
SEC
.12
PORT B
RETARDO
.6
PORTB
RETARDO
.3
PORTB
RETARDO
.9
PORTB
RETARDO
SEC
MOVLW
MOVWF
MOVLW
MOVWF
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
END
.132
REG2
.255
REG3
REG3,F
REP1
REG2,F
REP2
;SENTIDO HORARIO.
51
MICROCONTROLADORES
23.
Registro f
RRF f,d
Registro f
INICIO
LOOP
ORG 0
MOVLW b'00000000'
TRIS PORTB
MOVLW b'11111111'
MOVWF PORTB
BCF STATUS,C
RLF PORTB,F
BTFSS PORTB,7
GOTO INICIO
GOTO LOOP
END
52
MICROCONTROLADORES
Ejemplo 2: Este programa genera una secuencia en la que un uno (led encendido)
rota desde el bit cero del RB0 hasta el bit 7 RB7 y una vez termina pone los
bits en cero desde RB0 hasta RB7.
Inicio
Poner en 0 PortB
Poner en 1 RB0
Poner en 1 el carry
Rotar a la izq a traves
de carry
No
RB7 =1?
Si
No
RB0=0?
Si
53
MICROCONTROLADORES
Programa:
Include
LIST
<P16F873.INC>
P= 16F873, R=HEX
REG1
REG2
REG3
EQU
EQU
EQU
20H
21H
22H
ORG
MOVLW
TRIS
CLRF
BSF
CALL
BSF
RLF
0
0
PORTB
PORTB
PORTB,0
RETARDO
STATUS,C
PORTB,F
CALL
BTFSS
GOTO
RETARDO
PORTB,7
REP
LOOP 10
BCF
RRF
CALL
BTFSS
GOTO
GOTO
STATUS,C
PORTB,F
RETARDO
PORT B,O
LOOP 10
LOOP
RETARDO
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
.10
REG1
.132
REG2
.255
REG3
REG3,F
REP1
REG2,F
REP3
REG1,F
REP3
LOOP
REP
REP3
REP2
REP1
END
54
MICROCONTROLADORES
24.
Cuando se quiere mostrar datos en display, existen dos opciones para hacerlo, una
utilizar un decodificador BCD a 7 segmentos despus del microcontrolador, y otra es
generar con el mismo microcontrolador el cdigo 7 segmentos equivalente a cada
numero de 0 a 9.
En este caso se har el decodificador BCD a 7 segmentos con el mismo
microcontrolador.
Antes de explicar como mostrar datos en un display con el mocrocontrolador, se
recordar que hace un decodificador BCD a 7 segmentos
55
MICROCONTROLADORES
NUMERO RB7
0
1
2
3
4
5
6
7
8
9
RB6
g
CODIGO 7 SEGMENTOS
RB5
RB4
RB3
RB2
f
e
d
c
RB1
b
RB0
a
56
MICROCONTROLADORES
.
.
MOVF
VALOR,W
CALL
TABLA
MOVWF
PORTB
ADDWF
PCL,F
PCL + W
RETLW
B 00111111
CODIGO PARA EL 0
RETLW
B 00000110
CODIGO PARA EL 1
RETLW
B 01011011
CODIGO PARA EL 2
RETLW
B 01001111
CODIGO PARA EL 3
RETLW
B 01100110
CODIGO PARA EL 4
RETLW
B 01101101
CODIGO PARA EL 5
RETLW
B 01111100
CODIGO PARA EL 6
RETLW
B 00000111
CODIGO PARA EL 7
RETLW
B 01111111
CODIGO PARA EL 8
RETLW
B 01100111
CODIGO PARA EL 9
TABLA
Es decir, el suiche o pulsador genera unos y ceros hasta que finalmente se estabiliza
debido a que es un dispositivo electromecnico, el microcontrolador con su velocidad
de trabajo se da cuenta de esto.
INGENIERIA DE DISEO DE PRODUCTO
57
MICROCONTROLADORES
No
Pulsador = 1
Retardo 200 ms
Falsa
Alarma
No
Pulsador = 1
El Pulsador
se oprimi
BTFSS
PORTC,1
GOTO
LOOP
SALTA A LOOP
CALL
RET200ms
BTFSS
PORTC,1
GOTO
FALSO
SALTA A FALSO
GOTO
INCREM
SALTA A INCREM
58
MICROCONTROLADORES
26.
Inicio
Contador=0
w=contador
PortB=cod7 seg
Incrementar contador
No
Contador=10?
Si
59
MICROCONTROLADORES
Programa:
Include <p16f873.inc>
List
p=16f873
CONTADOR
EQU
20
REG
REG
REG
EQU
EQU
EQU
21
22
23
ORG
MOVLW
TRIS
MOVLW
MOVWF
MOVF
CALL
MOVWF
CALL
INCF
MOVLW
XORWF
BTFSC
GOTO
GOTO
00
0
PORTB
;CONFIGURAR EL PORTB COMO SALIDA
0
CONTADOR ;CARGAR EL CONTADOR CON 0
CONTADOR,W;CONTADOR=W
TABLA
;LLAMAR TABLA
PORTB
;LLEVAR VALOR 7 SEGMENTOS A PORTB
RET1S
;LLAMA RETARDO 1S.
CONTADOR,F
.10
;COMPARA CONTADOR CON 10
CONTADOR,W
STATUS,2
LOOP
INICIO
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
DECFSZ
GOTO
.10
REG1
.132
REG2
.255
REG3
REG3,F
REP1
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
REG2,F
REP2
REG1,F
REP3
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
END
PCL,F
B 00111111
B 00000110
B 01011011
B 01001111
B 01100110
B 01101101
B 01111100
B 00000111
B 01111111
B 01100111
INICIO
LOOP
RET1S
REP3
REP2
REP1
TABLA
; PCL + W
; CODIGO PARA EL 0
; CODIGO PARA EL 1
; CODIGO PARA EL 2
; CODIGO PARA EL 3
; CODIGO PARA EL 4
; CODIGO PARA EL 5
; CODIGO PARA EL 6
; CODIGO PARA EL 7
; CODIGO PARA EL 8
; CODIGO PARA EL 9
;FIN DEL PROGRAMA.
60
MICROCONTROLADORES
27.
MULTIPLEXAJE DE DISPLAY
Nota: los segmentos de cada display van unidos entre si, es decir a con a, b con b,
hasta el g con g. y por cada display adicional se necesita un transistor y solo una
lnea mas del microcontrolador.
En este diagrama se asume que las unidades estn en el display de la derecha y las
decenas en el display de la izquierda.
El diagrama de flujo para mostrar datos en el display es el siguiente:
61
MICROCONTROLADORES
INICIO
W = Unidades
Llamar tabla
Llevar a PORTB
Activar RC5 y
desactivar RC4
W = decenas
Llamar tabla
Activar RC4 y
desactivar RC5
Return
62
MICROCONTROLADORES
MOVF
CALL
MOVWF
BSF
BCF
CALL
MOVF
CALL
MOVWF
BSF
BCF
CALL
RETURN
DECE,W
TABLA
PORTB
PORTC,4
PORTC,5
RETARDO
UNID,W
TABLA
PORTB
PORTC,5
PORTC,4
RETARDO
TABLA
ADDWF
PCL,F
; PCL + W
RETLW
B 00111111
; CODIGO PARA EL 0
RETLW
B 00000110
; CODIGO PARA EL 1
RETLW
B 01011011
; CODIGO PARA EL 2
RETLW
B 01001111
; CODIGO PARA EL 3
RETLW
B 01100110
; CODIGO PARA EL 4
RETLW
B 01101101
; CODIGO PARA EL 5
RETLW
B 01111100
; CODIGO PARA EL 6
RETLW
B 00000111
; CODIGO PARA EL 7
RETLW
B 01111111
; CODIGO PARA EL 8
RETLW
B 01100111
; CODIGO PARA EL 9
MOVLW
.255
MOVWF
REG1
DECFSZ
REG1,F
GOTO
RET1
RETARDO
RET1
RETURN
Esto ocurre cuando por ejemplo, se pregunta por un pulsador, donde se llama el
retardo de 200 ms, la rutina mostrar debe estar dentro del retardo de 200ms y as
cada vez que el programa principal este dentro de un loop.
Otro caso es el retardo de un segundo, aqu tambin es necesario que la rutina de
mostrar haga parte del retardo de un segundo.
63
MICROCONTROLADORES
28.
EJEMPLO DE MULTIPLEXAJE
Valor1=5
Valor2=7
Habilitar transistor de
valor1(RC0) y deshabilitar
transistor de valor2(RC1)
Retardo de 1ms
Habilitar transistor de
valor2(RC1) y deshabilitar
transistor de valor1(RC0)
Retardo de 1ms
64
MICROCONTROLADORES
Programa:
INCLUDE
<P16F873.INC>
LIST
P=16F873, R = HEX
R12
VALOR 1
VALOR 2
EQU
EQU
EQU
20H
21H
22H
MOVLW
TRIS
MOVLW
TRIS
MOVLW
MOVWF
MOVLW
MOVWF
MOVF
CALL
0
PORTB
0
PORTC
.7
VALOR 2
.5
VALOR 1
VALOR 1,W
TABLA
MOVWF
MOVLW
MOVWF
PORTB
.1
PORT C
CALL
MOVF
CALL
RETARDO
VALOR 2,W
TABLA
MOVWF
MOVLW
MOVWF
CALL
GOTO
PORT B
.2
PORTC
RETARDO
LOOP1
MOVLW
MOVWF
DECFSZ
GOTO
.255
R12
R12,F
REP
;RETARDO DE 1 mS APROX.
TABLA
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
PCL,F
B 00111111
B 00000110
B 01011011
B 01001111
B 01100110
B 01101101
B 01111100
B 00000111
B 01111111
B 01100111
; PCL + W
; CODIGO PARA EL 0
; CODIGO PARA EL 1
; CODIGO PARA EL 2
; CODIGO PARA EL 3
; CODIGO PARA EL 4
; CODIGO PARA EL 5
; CODIGO PARA EL 6
; CODIGO PARA EL 7
; CODIGO PARA EL 8
; CODIGO PARA EL 9
RETARDO
MOVLW
MOVWF
DECFSZ
GOTO
RETURN
END
.255
REG1
REG1,F
RET1
LOOP 1
RETARDO
REP
RET1
65
MICROCONTROLADORES
29.
INTERRUPCIONES
RBPU# INTEDG
TOCS
TOSE
PSA
PS2
PS1
PS0
PS2
PS1
PS0
DIVISION DEL
TMR0
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256
66
MICROCONTROLADORES
REGISTRO INTCON
GIE
PEIE
TOIE
INTE
RBIE
TOIF
INTF
RBIF
67
MICROCONTROLADORES
En la rutina de interrupcin
1. Deshabilitar la interrupcin por RB0: Bit INTE del registro INTCON
2. Limpiar sealizador de interrupcin por RB0: Bit INTF del registro INTCON
Al terminar la rutina de interrupcin:
Habilitar nuevamente la interrupcin por RB0: Bit INTE del registro INTCON
Retornar de la interrupcin con la instruccin RETFIE
68
MICROCONTROLADORES
0
Inicio
4
INTER
:
:
BSF
STATUS,5
:
:
:
INTER
:
:
:
:
PROGRAMA
QUE DEBE
EJECUTAR LA
INTERRUPCIN
RETFIE
; RETORNO DE LA INTERRUPCIN
69
MICROCONTROLADORES
30.
INICIO
Configurar Puertos
Unidades = 0
Decenas = 0
Configurar Interrupcin
por RB0
Habilitar Interrupcin
por RB0
CALL Mostrar
Para la interrupcin:
INICIO
Incrementar Unidades
Unidades = 10
Si
Decenas = 9
NO
Si
Unidades = 0
Incrementar
Decenas
Decenas = 0
Unidades = 0
Return
INGENIERIA DE DISEO DE PRODUCTO
70
MICROCONTROLADORES
Programa:
Include<P16F873.INC>
LIST P=16F873, R=HEX
UNID
DECE
REG1
REG2
REG3
INICIO
EQU
EQU
EQU
EQU
EQU
20
21
23
24
25
ORG
GOTO
ORG
GOTO
0
INICIO
4
INTER
ORG 6
MOVLW
TRIS
1
PORTB
;SALTA A INICIO
; SALTA A EJECUTAR LA INTERRUPCIN
MOVLW
0
TRIS
PORTC
BSF
STATUS,5
BSF OPTION_REG,INTEDG
BSF
BCF
BSF
BSF
CLRF
CLRF
CALL
GOTO
INTCON,GIE
UNID
DECE
MOSTRAR
LOOP
MOSTRAR
MOVF
CALL
MOVWF
BSF
BCF
CALL
MOVF
CALL
MOVWF
BSF
BCF
CALL
RETURN
DECE,W
TABLA
PORTB
PORTC,4
PORTC,5
RETARDO
UNID,W
TABLA
PORTB
PORTC,5
PORTC,4
RETARDO
RETARDO
MOVLW
MOVWF
DECFSZ
GOTO
0FFH
REG1
REG1,F
REP
LOOP
REP
RETURN
71
MICROCONTROLADORES
TABLA
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
INTER
BCF INTCON,INTE
BCF INTCON,INTF
DECREM
LOOP1
RET100
LOOP3
LOOP2
PCL,F
B 00111111
B 00000110
B 01011011
B 01001111
B 01100110
B 01101101
B 01111100
B 00000111
B 01111111
B 01100111
; PCL + W
; CODIGO PARA EL 0
; CODIGO PARA EL 1
; CODIGO PARA EL 2
; CODIGO PARA EL 3
; CODIGO PARA EL 4
; CODIGO PARA EL 5
; CODIGO PARA EL 6
; CODIGO PARA EL 7
; CODIGO PARA EL 8
; CODIGO PARA EL 9
INCF
MOVLW
XORWF
BTFSS
GOTO
UNID,F
.10
UNID,W
STATUS,Z
LOOP1
MOVLW
XORWF
BTFSS
GOTO
.9
DECE,W
STATUS,Z
DECREM
CLRF
CLRF
GOTO
UNID
DECE
LOOP1
INCF
CLRF
CALL
BSF
RETFIE
DECE,F
UNID
RET100
INTCON,INTE ; HABILITA INTERRUPCIONES POR RB0
; RETORNA DE LA INTERRUPCIN
MOVLW
MOVWF
MOVLW
MOVWF
CALL
DECFSZ
GOTO
2
REG3
.255
REG2
MOSTRAR
REG2,F
LOOP2
DECFSZ
GOTO
REG3,F
LOOP3
RETURN
END
72
MICROCONTROLADORES
31.
73
MICROCONTROLADORES
ADFM
-------
PCFG2:PCFG0
000
001
010
011
100
101
11X
-------
-------
PCFG3
PCFG2
PCFG1
PCFG0
RA0
RA1
RA2
RA5
RA3
VREF
A
A
A
A
A
A
D
A
A
A
A
A
A
D
A
A
A
A
D
D
D
A
A
A
A
D
D
D
A
VREF
A
VREF
A
VREF
D
VDD
RA3
VDD
RA3
VDD
RA3
-------
A: Entrada anloga.
D: Entrada/salida digital.
74
MICROCONTROLADORES
Como ejemplo de este punto, se supone que se quiere configurar todo el puerto A
como Entradas/Salidas digital.
El valor que se debe cargar en el Registro ADCON1 ser la combinacin 00000110
o 00000111 (6 0 7 en decimal), como nos los indica el Registro ADCON1. La X
significa que el estado de este bit no importa.
MOVLW 6
MOVWF ADCON1
3. Paso al banco 0 de memoria.
BCF STATUS,5
4. Configurar el puerto A como lo necesitamos, es decir cuales de los pines
funcionaran como entradas o salidas.
En este paso configuramos el PORTA como lo hemos hecho siempre.
MOVLW B00000000
TRIS PORTA.
REGISTRO ADCON0
ADCS1
ADCS0
CHS2
CHS1
CHS0
G0/ DONE H
--------
ADON
CHS2:
75
MICROCONTROLADORES
Los pasos que se deben seguir para realizar una conversin anloga son los
siguientes:
1. Configurar el modulo A/D
76
MICROCONTROLADORES
32.
Programa:
Include <P16F873.INC>
LIST P=16F873, R=HEX
REP3
REG1
REG2
REG3
REG4
EQU
EQU
EQU
EQU
ORG
MOVLW
TRIS
TRIS
BSF
MOVLW
0
0
PORTB
PORTC
STATUS,5
80
MOVWF
BCF
MOVLW
ADCON1
STATUS,5
1
MOVWF
CALL
ADCON0
RETARDO
20
21
22
23
77
MICROCONTROLADORES
REP1
BSF
ADCON0,2
; INICIA LA CONVERSIN
REP
BTFSC
GOTO
MOVF
ADCON0,2
REP
ADRESH,W
MOVWF
BSF
MOVF
PORTC
STATUS,5
ADRESL,W
BCF
MOVWF
CALL
GOTO
STATUS,5
PORTB
RETD
REP3
MOVLW
MOVWF
DECFSZ
GOTO
.255
REG4
REG4,F
REP4
RETARDO
REP4
RETURN
RETD
REP6
REP2
REP7
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
DECFSZ
GOTO
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
2
REG1
84H
REG2
0FFH
REG3
REG3,F
REP7
REG2,F
REP2
REG1,F
REP6
END
78
MICROCONTROLADORES
33.
COMUNICACIN SERIAL
Existen dos formas comunes de transferir informacin binaria entre dos equipos, la
comunicacin paralela y la comunicacin serial.
En la comunicacin en forma paralela los datos se transfieren en forma simultnea y
existen algunas lneas adicionales de control que permite la comunicacin entre los
dos equipos.
Bus de
Datos
EQUIPO
EQUIPO
Bus de
Control
Tx
EQUIPO
EQUIPO
Rx
GND
Rx
GND
79
MICROCONTROLADORES
MSB
Bit de
Start
Bit de
Stop
80
MICROCONTROLADORES
Inicio
Bit de Start
Contador = 8
Colocar Tx en bajo
Rotar registro de
transmisin a la
derecha
Carry = 0 ?
No
Colocar Tx en bajo
Si
Decrementar
contador
No
Contador = 0
Si
Bit de parada
Retorne
81
MICROCONTROLADORES
Esta la lnea
Rx en bajo
No
Si
Contador = 8
Carry = 0
Esta la lnea
Rx en bajo
No
Carry = 1
Rotar a la derecha
registro de recepcin
Call retardo 1 bits
Decrementar
contador
No
Contador = 0
Si
Retornar
Para la comunicacin serial se utiliza el protocolo RS-232, segn esta norma un uno
lgico es un voltaje comprendido entre 5V y 15V y entre 3V y 25V en el
receptor.
Un cero lgico es un voltaje comprendido entre 5V y 15V en el transmisor y entre 3V
y 25V en el receptor.
82
MICROCONTROLADORES
Segn lo anterior, se debe utilizar dispositivos que permitan convertir niveles TTL a
niveles RS-232 y viceversa, de esta funcin se encarga el circuito integrado
MAX232.
34.
83
MICROCONTROLADORES
Programa:
INCLUDE <P16F873.INC>
List
P=16F873, R = HEX
CBLOCK
20H
CONT,DELAY,REGTX,REGRX,VALOR
ENDC
#DEFINE
#DEFINE
REPETIR
TRANSMISOR PORTC,7
RECEPTOR
PORTC,6
ORG
BSF
MOVLW
MOVWF
CLRF
BCF
BSF
MOVLW
CALL
MOVWF
CALL
MOVF
MOVWF
MOVLW
SUBWF
CALL
MOVWF
CALL
GOTO
0
STATUS,5
B'01111111'
TRISC
TRISB
STATUS,5
TRANSMISOR
0
TABLA
PORTB
RECEP
REGRX,W
VALOR
.48
VALOR,W
TABLA
PORTB
TRANS
REPETIR
;RUTINA DE TRANSMISION
TRANS
TOTRO
MOVWF
MOVLW
MOVWF
BCF
CALL
BCF
BCF
RRF
BTFSC
BSF
CALL
DECFSZ
GOTO
BSF
CALL
RETURN
REGTX
.8
CONT
TRANSMISOR
RETAR1
TRANSMISOR
STATUS,C
REGTX,F
STATUS,C
TRANSMISOR
RETAR1
CONT,F
TOTRO
TRANSMISOR
RETAR1
84
MICROCONTROLADORES
ROTRO
CLRF
BTFSC
GOTO
CALL
MOVLW
MOVWF
BCF
BTFSC
BSF
RRF
CALL
DECFSZ
GOTO
RETURN
REGRX
RECEPTOR
RECEP
RETAR2
.8
CONT
STATUS,C
RECEPTOR
STATUS,C
REGRX,F
RETAR1
CONT,F
ROTRO
MOVLW
MOVWF
DECFSZ
GOTO
RETURN
.32
DELAY
DELAY,F
CICLO
TABLA
MOVLW
MOVWF
DECFSZ
GOTO
RETURN
.50
DELAY
DELAY,F
CICLO1
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
PCL,F
B 00111111
B 00000110
B 01011011
B 01001111
B 01100110
B 01101101
B 01111100
B 00000111
B 01111111
B 01100111
; PCL + W
; CODIGO PARA EL 0
; CODIGO PARA EL 1
; CODIGO PARA EL 2
; CODIGO PARA EL 3
; CODIGO PARA EL 4
; CODIGO PARA EL 5
; CODIGO PARA EL 6
; CODIGO PARA EL 7
; CODIGO PARA EL 8
; CODIGO PARA EL 9
END
85
BIBLIOGRAFIA