Está en la página 1de 52

5.

OTROS MICROCONTROLADORES

Ya que se han visto los microcontroladores de Microchip, ahora se estudiaran los fabricados

por Fresacele. Este fabricante tiene microcontroladores que se pueden dividir por el bus de

datos que maneja así como lo menciona Vesga en su libro Microcontroladores Motorola

Freescale1, y a su vez en familias como lo muestra la tabla 24.

Tamaño del bus datos Familia Variedades


HC08AB, HC08AP,
HC08 HC08AS/AZ,HC08BD, HC08EY,
HC08G, HC08JK/JL, HC08MR,
Bus de 8 bits HC08Q, HC08RF, HC08SR
HCS08 HCS08AW
HCS08G/Q/R
RS08 MC9RS08KA1/2
S12 S12XA/D, S12A, S12C, S12D, S12E,
S12H, S12G
Bus de 16 bits HC12 HC912BXX, HC912DXX
HC16 68HC16R1, 68HC16Y1/Y3,
68HC16Z1/Z3
Bus de 32 bits 68K/ColdFire ColdFire MCF52XX, 68K M683XX,
68K M68 0X0

Tabla 24. Familias de Microcontroladores de Freescale.

5.1. MICROCONTROLADORES DE 8 BITS.

Entre los microcontroladores de 8 bits se encuentran el MC68HC908JL3, el MC68HC908JK3,

el MC68HC908JK1, el MC68HC908GP32 y el MC68HC908AP16A, entre otros, en la tabla 25

se muestran algunas de las características de cada unos de ellos.

1
VESGA F. Juan Carlos. Microcontroladores Motorola Freescale. Bogotá : AlfaOmega, 2007, p. 16, 17.
__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
181
Tabla 25. Comparación entre algunos Microcontroladores de 8 Bit´s. Freescale.

Características MC68HC908JK1 MC68HC908JK3 MC68HC908JL3 MC68HC908GP32 MC68HC908AP16A


Memoria de 1536 X 8 4K X 8 4K X 8 32K X 8 16K X 8
Programa (ROM)
FLASH
Memoria RAM 128 X 8 128 X 8 128 X 8 512 X 8 1024 X 8
Pines de I/O 15 23 23 33 32
Oscilador Interno SI SI SI NO NO
Tipo de Empaque DIP PDIP PDIP PDIP SDIP
Numero de Pines 20 28 28 40 42

Siendo así seleccionado el MC68HC908JK1, pues es un microcontrolador poderoso y pequeño;

además se pueden realizar las mismas aplicaciones que se realizaron en los capítulos 3 y 4 bajo

el microcontrolador PIC16F62A. El lector podrá observar que estas aplicaciones pueden servir

para los otros mencionados que se analizaron en la tabla 25, solo hay que tener en cuenta el

mapa de memoria de cada uno.

En la tabla 26 se muestra la comparación entre los micronctroladores PIC 16F628A y el

MC68HC908JK1, en la cual se muestran las principales características de cada uno de ellos y

de esa forma se aprecia que son muy parecidos.

Tabla 26. Comparación entre los Microcontroladores PIC 16F628A y MC68HC908JK1.

Memoria de Memoria RAM Pines de I/O Oscilador Tipo de Numero de


Microntroladores Programa Interno Empaque Pines
(ROM) FLASH
PIC16F628A 2K X 14 128 X 8 15 SI DIP 18
MC68HC908JK1 1536 X 8 128 X 8 15 SI DIP 20

5.2. MC68HC908JK1

En la tabla 25 y 26 se comento que el MC68HC908JK1 es de 20 pines empaquetado DIP, es así

que en la figura 45 se muestra la distribución de estos.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
182
2
Figura 45. Distribución de pines del MC68HC908JK1.

En la figura 46 se muestra el mapa de memoria; a continuación se hablara de algunas de las

partes de esta: entre las posiciones 0000 H hasta 003F H se encuentran los registros de I/O, los

cuales mas adelante se explicaran; entre las posiciones 0080 H hasta 00FF H se encuentran la

Memoria RAM (la cual es de 128x 8 bits, es decir 128 Bytes, es donde el usuario almacena los

datos temporales dentro del proceso del programa); entre las posiciones F600 H hasta FBFF H

se encuentran la Memoria ROM (la cual es de 1536 x 8 bits, es decir 1536 Bytes, es donde esta

almacenado el programa o las aplicaciones del usuario “ programa”).

El lector podrá interpretar y explorar las de más posiciones del mapa de memoria. Por el

momento se quiere avanzar en programación en asembler, para tal motivo se explicaran

algunos de los registros que posee este microcontrolador, sin embargo para mayor información

se puede consultar el data sheet 3:

2
Freescale [Internet] [consultado 13 Abril de 2009]. Disponible en
http://www.freescale.com/files/microcontrollers/doc/data_sheet/MC68HC908JL3.pdf .
3
Freescale [Internet] [consultado 13 Abril de 2009]. Disponible en
http://www.freescale.com/files/microcontrollers/doc/data_sheet/MC68HC908JL3.pdf .
__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
183
0000 H
Registros I/O
003F H
0040 H
Reservado
007F H 64 Bytes
0080 H
RAM
128 Bytes
00FF H
0100 H
No implementado

F5FF H
F600 H ROM
FLASH
FBFF H 1536 Bytes
FC00 H
Monitor ROM2
FDFF H 512 Bytes
FE00 H Registros de
Control y
FE0F H de Estados
FE10 H Monitor ROM1
447 Bytes
FFCE H
FFD0 H Vectores para la FLASH
FFFF H 48 Bytes

4
Figura 46. Distribución de Memoria del MC68HC908JK1.

ACUMULADOR (A): Registro de 8 bits, se usa en las operaciones aritméticas y lógicas.

Comúnmente se usa para almacenar resultados de cálculos aritméticos y de manipulación de

datos 5. Este registro es como el registro W para los microcontroladores de Microchip.

4
Freescale [Internet] [consultado 13 Abril de 2009]. Disponible en
http://www.freescale.com/files/microcontrollers/doc/data_sheet/MC68HC908JL3.pdf .
5
Ibid., p. 46.
__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
184
REGISTRO X: Es un registro de 8 bits que permite hacer el direccionamiento indexado, ó

puede usarse como un acumulador auxiliar.

REGISTRO H:X: Es este par de registros H y X forman 16 bits, se usan para direccionamiento

indexado y también se puede usar como puntero de memoria 6 con el cual se puede cubrir todo

el mapa de memoria de la figura 46.

REGISTRO CCR (CONDITION CODE REGISTER): Este registro es el que contiene las

banderas y es de 8 bits, es muy similar el registro STATUS en los micrcontroladores de

Microchip, su funcionamientos es así7:

V 1 1 H I N Z C
BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

BIT 7: V: (OVERFLOW) BIT DE REBOSAMIENTO DE SIGNO. ES DECIR CUANDO SE SALE DEL RANGO -128
A 127 ASÍ:
1 REBOSAMIENTO
0 NO REBOSAMIENTO.

BIT 4: H: (HALF-CARRY) BANDERA DE MEDIO CARRY:


1: HAY CARRY EN EL BIT 4. EN UNA SUMA CON O SIN CARRY.
0: NO HAY CARRY EN EL BIT 4. EN UNA SUMA CON O SIN CARRY.

BIT 3: I: (INTERRUPT MASK) MASCARA DE INTERRUPCIÓN. PRENDER – CONTAR (POWER – DOWN)


1 LAS INTERRUPCIONES ESTÁN DESHABILITADAS.
0 LAS INTERRUPCIONES ESTÁN HABILITADAS.

BIT 2: N: (NEGATIVE) BANDERA DE NEGATIVO


1: EL RESULTADO DE UNA OPERACIÓN ARITMÉTICA NEGATIVO.
0: EL RESULTADO DE UNA OPERACIÓN ARITMÉTICA NO ES NEGATIVO.

BIT 1: Z: (ZERO) BANDERA DEL CERO


1: EL RESULTADO DE UNA OPERACIÓN ARITMÉTICA O LÓGICA DA CERO

6
Ibid., p. 46.
7
Ibid., p. 46.
__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
185
0: EL RESULTADO DE UNA OPERACIÓN ARITMÉTICA O LÓGICA NO DA CERO.

BIT 0: C: (CARRY) CARRY.


1: EL RESULTADO DE UNA OPERACIÓN SIN SIGNO PASA DE LA CAPACIDAD DE OPERACIÓN, ES
DECIR EL CARRY DE 8 BITS.
0: EL RESULTADO DE UNA OPERACIÓN SIN SIGNO PASA DE LA CAPACIDAD DE OPERACIÓN, ES
DECIR DE 8 BITS.

(LAS INSTRUCCIONES DE CORRIMIENTO Y ROTACIÓN TAMBIÉN AFECTAN ESTE BIT)

5.3. PINES DE I/0.

El microcontrolador MC68HC908JK1 cuenta con 15 líneas de entrada y salida (I/O)

distribuidas en tres Puertos (PTA, PTB, PTD), el Puerto A tiene solo un bit (A6), el Puerto B

tiene 8 bits (B7 a B0), el Puerto D tiene 5 bits (D2 a D6). Para controlarlos como entrada o

salida tiene los registros de control, DDRA, DDRB, DDRD, los cuales controlan

respectivamente cada puerto. En la figura 46 se observa que entre la posición 0000H y la

003FH están los registros de I/O, pero sin ser específicos, para ello se puede mirar la figura 47

donde se muestran los 8 primeros registros con su respectiva dirección y bits; por lo pronto se

explicaran estos registros a medida que se avance en programación se verán otros registros de

este grupo, además el lector podrá explorar por su cuenta. Hay que mencionar que los

microcontroladores de Freescale a comparación de los de Microchip en la RAM no tienen

bancos, tanto los Puertos (PTX) como los controladores (DDRX) están en el mismo banco.

Para programar una línea de salida se le garantiza uno (1) y para programarla de entrada se le

garantiza cero (0). Es importante aclarar que es lo contrario de los microntroladores de

Microchip.

Dirección Registro Bit 7 Bit 0

0000H PTA __ PTA6 __ __ __ __ __ __

0001H PTB PTB7 PTB6 PTB5 PTB4 PTB3 PTB2 PTB1 PTB0

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
186
0002H __ __ __ __ __ __ __ __

0003H PTD __ PTD6 PTD5 PTD4 PTD3 PTD2 __ __

0004H DDRA __ DDRA6 __ __ __ __ __ __

0005H DDRB DDRB7 DDRB6 DDRB5 DDRB4 DDRB3 DDRB2 DDRB1 DDRB0

0006H __ __ __ __ __ __ __ __

0007H DDRD __ DDRD6 DDRD5 DDRD4 DDRD3 DDRD2 __ __

8
Figura 47. Distribución de Puertos y Controladores de puertos del MC68HC908JK1.

5.4. SET DE INSTRUCCIONES.

Antes de empezar a desarrollar ejemplos de aplicaciones en el microcontrolador; se hace

necesario ver las instrucciones. En el capitulo 3 se mencionó que este fabricante esta en el

grupo CISC, por ende son muchas las instrucciones que tiene, el lector podrá darse cuanta que

efectivamente es muy complicado explicar en detalle todas las instrucciones, entonces a medida

que se hagan ejemplos se explicarán las que se van usando. La tabla 26 se muestran las

instrucciones explicadas según Vesga9; las cuales fueron tomadas del datasheet del

microcontrolador 10.

Recordar que en los microntroladores de Microchip existe el registro W, para los de Freescale

es el A (Acumulador).

8
Freescale [Internet] [consultado 13 Abril de 2009]. Disponible en
http://www.freescale.com/files/microcontrollers/doc/data_sheet/MC68HC908JL3.pdf .
9
Ibid., p. 46.
10
Freescale [Internet] [consultado 13 Abril de 2009]. Disponible en
http://www.freescale.com/files/microcontrollers/doc/data_sheet/MC68HC908JL3.pdf .
__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
187
11
Tabla 26. Set instrucciones del MC68HC908JK1.

INSTRUCCIÓN OPERACIÓN CICLOS


ADC #OPR 2
ADC OPR Suma con Carry 3
ADC OPR,X 3
ADC ,X A = A + (M) + C 2
ADC OPR,SP 4
ADD #OPR 2
ADD OPR Suma sin Carry 3
ADD OPR,X 3
ADD ,X A = A + (M) 2
ADD OPR,SP 4
AIS #OPR SP = SP + OPR 2
AIX #OPR H:X = H:X + OPR 2
AND #OPR 2
AND OPR Operación lógica AND 3
AND OPR,X 3
AND ,X A = A & (M) 2
AND OPR,SP 4
ASL OPR 4
ASLA Rota a la Izquierda el Registro así: 1
ASLX C b7 b0 1
ASL OPR,X 0 4
ASL ,X 3
ASL OPR,SP 5
ASL OPR 4
ASLA Rota a la Izquierda el Registro así: 1
ASLX b7 b0 C 1
ASL OPR,X 4
ASL ,X 3
ASL OPR,SP 5
BCC REL Salta a una subrutina o etiqueta (REL) si el Bit del Carry del 3
Registro de Banderas (CCR) es Cero
BCLR N,OPR Toma un bit (N) de un registro (OPR) y lo pone en Cero (CLR) 4
BCS REL Salta a una subrutina o etiqueta (REL) si el Bit del Carry del 3
Registro de Banderas (CCR) es Uno
BEQ REL Salta a una subrutina o etiqueta (REL) si el Bit del Zero del 3
Registro de Banderas (CCR) es Uno
BHCC REL Salta a una subrutina o etiqueta (REL) si el Bit de Half Carry 3
del Registro de Banderas (CCR) es Cero
BHCS REL Salta a una subrutina o etiqueta (REL) si el Bit de Half Carry 3
del Registro de Banderas (CCR) es Uno
BIH REL Salta a una subrutina o etiqueta (REL) si el pin IRQ es Cero 3
BIL REL Salta a una subrutina o etiqueta (REL) si el pin IRQ es Uno 3
BIT #OPR
BIT OPR
BIT OPR,X Probar un bit cualquiera de un registro
BIT ,X
BIT OPR,SP
BMC REL Salta a una subrutina o etiqueta (REL) si el Bit del Interrupt 3

11
Freescale [Internet] [consultado 13 Abril de 2009]. Disponible en
http://www.freescale.com/files/microcontrollers/doc/data_sheet/MC68HC908JL3.pdf .
__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
188
Mask del Registro de Banderas (CCR) es Cero
BMI REL Salta a una subrutina o etiqueta (REL) si el resultado de una 3
operación es Negativo
BMS REL Salta a una subrutina o etiqueta (REL) si el Bit del Interrupt 3
Mask del Registro de Banderas (CCR) es Uno
BNE REL Salta a una subrutina o etiqueta (REL) si no hay cero 3
BPL REL Salta a una subrutina o etiqueta (REL) si es resultado de una 3
operación es positivo
BRA REL Salta a una etiqueta (REL) siempre 3
BRCLR N,OPR,REL Salta a una subrutina o etiqueta (REL) si es el Bit (N) de un 5
registro (OPR) esta en Cero (CLR).
BRN REL Nuca salta a subrutina o etiquete (REL) 3
BRSET N,OPR,REL Salta a una subrutina o etiqueta (REL) si es el Bit (N) de un 5
registro (OPR) esta en Uno (SET).
BSET N,OPR Toma un bit (N) de un registro (OPR) y lo pone en Uno (SET) 4
BSR REL Llama a un subrutina (REL) 4
CBEQ OPR,REL 5
CBEQA #OPR,REL 4
CBEQX #OPR,REL Compara el valor del Registro A con el valor del registro (OPR) 4
CBEQ OPR,X+,REL y salta a una etiqueta o subrutina (REL) si son iguales 5
CBEQ X+REL 4
CBEQ OPR,SP,REL 6
CLC Pone Cero en el Bit del Carry 1
CLI Pone Cero en el Bit del Interrupt Mask. (Habilita las 2
interrupciones).
CLR OPR 3
CLRA 1
CLRX 1
CLRH Poner 00h en el registro 1
CLR OPR,X 3
CLR ,X 2
CLR OPR,SP 4
CMP #OPR 2
CMP OPR Compara el valor del registro A con un Registro 3
CMP OPR,X A – (M) 3
CMP ,X 2
CMP OPR,SP 4
COM OPR 4
COMA 1
COMX 1
COM OPR,X Complemento 4
COM ,X 2
COM OPR,SP 5
CPHX #OPR Compara el valor de H:X con el valor almacenado en registro 3
CPHX OPR OPR o con el valor de OPR 4
CPX #OPR 2
CPX OPR Compara el valor del registro X con un Registro 3
CPX ,X X – (M) 3
CPX OPR,X 3
CPX OPR,SP 4
DAA Ajustar a decimal el registro A (A10) 2
DBNZ OPR,REL 5
DBNZA REL 3
DBNZX REL Decrementa (Resta en uno) el registro (OPR, A, X, SP) y salta a 3
DBNZ OPR,X,REL una etiqueta o subrutina (REL) si no es cero 5
DBNZ X,REL 4

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
189
DBNZ OPR,SP,REL 6
DEC OPR 4
DECA 1
DECX Decrementa (Resta en uno) el registro (OPR, A, X, SP) 1
DEC OPR,X 4
DEC ,X 3
DEC OPR,SP 5
DIV División así: A = H:A/X 7
A = Cociente (Resultado), H = Residuo
EOR #,OPR 2
EOR OPR OR EXCLUSIVA Así: 3
EOR OPR,X A= A OPR 4
EOR ,X 2
EOR OPR,SP 4
INC OPR 4
INCA 1
INCX Incrementa (Suma uno) el registro (OPR, A, X, SP) 1
INC OPR,X 4
INC ,X 3
INC OPR,SP 5
JMP OPR 2
JMP OPR,X Salto a una dirección OPR 4
JMP ,X 2
JSR OPR 4
JSR OPR,X Salta a una subrutina 6
JSR ,X 4
LDA #OPR 2
LDA OPR Carga en el registro A el valor (#OPR) o el dato almacenado en 3
LDA OPR,X OPR 4
LDA ,X 2
LDA OPR,SP A ← (M) 4
LDHX #OPR Carga en el registro H:X el valor (#OPR) o el dato almacenado 3
LDHX OPR en OPR 4
H:X ← M:M
LDX #OPR 2
LDX OPR Carga en el registro X el valor (#OPR) o el dato almacenado en 3
LDX OPR,X OPR 4
LDX ,X 2
LDX OPR,SP X ← (M) 4
LSL OPR 4
LSLA Rota a la Izquierda el Registro así: 1
LSLX C b7 b0 1
LSL OPR,X 0 4
LSL ,X 3
LSL OPR,SP 5
LSR OPR 4
LSRA Rota a la Derecha el Registro así: 1
LSRX b7 b0 C 1
LSR OPR,X 0 4
LSR ,X 3
LSR OPR,SP 5
MOV OPR,OPR 5
MOV OPR,X Mueve así 4
MOV #OPR,OPR Destino ← Fuente 4
MOV X+,OPR 4

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
190
MUL Multiplicación sin signo así: 5
A x X = X:A
NEG OPR 4
NEGA 1
NEGX Complemento a uno 1
NEG OPR,X 4
NEG ,X 3
NEG OPR,SP 5
NOP No hace nada 1
Toma los cuatro bits de mayor peso del registro A y los
intercambia con los cuatro bit de menor peso así:
NSA 3
A= 7 4 3 0

ORA #OPR 2
ORA OPR Hace la operación lógica OR entre el Registro A y el valor 3
ORA OPR,X (#OPR) o el dato almacenado en OPR, así: 4
ORA ,X 2
ORA OPR,SP A ← A OR (M) 4
PSHA Inserta el Registro A en SP 2
PSHH Inserta el Registro H en SP 2
PSHX Inserta el Registro X en SP 2
PULA Saca el Registro A en SP 2
PULH Saca el Registro H en SP 2
PULX Saca el Registro X en SP 2
ROL OPR 4
ROLA Rota a la Izquierda el Registro con Carry así: 1
ROLX C b7 b0 1
ROL OPR,X 4
ROL ,X 3
ROL OPR,SP 5
ROR OPR 4
RORA Rota a la Derecha el Registro con Carry así: 1
RORX b7 b0 C 1
ROR OPR,X 4
ROR ,X 3
ROR OPR,SP 5
RPS Resetea el SP asi: SP ← FF 1
RTI Retorna de una Interrupción 7
RTS Retorna de una subrutina 4
SBC #OPR 2
SBC OPR Resta con Carry, así 3
SBC OPR,X 3
SBC ,X A = A - (M) – C 2
SBC OPR,SP 4
SEC Poner Uno (Set) al bit Carry del registro CCR, así: C ← 1 1
SEI Poner Uno (Set) al bit Interrupt Mark del registro CCR, así: 2
I ← 1. (Deshabilita las interrupciones).
STA OPR 3
STA OPR,X Almacenar A en M, así 3
STA ,X M ← A 2
STA OPR,SP 4
STHX OPR Almacenar HX en OPR 4
STOP Habilita el pin IRQ, y Para el Oscilador 1
STX OPR 3

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
191
STX OPR,X Almacenar X en M, así 3
STX ,X M ← X 2
STX OPR,SP 4
SUB #OPR 2
SUB OPR Resta sin Carry, así 3
SUB OPR,X 3
SUB ,X A = A - (M) 2
SUB OPR,SP 4
SWI Interrupción de Software 9
TAP Transferir el Registro A al Registro CCR, así: 2
CCR ← A
TAX Transferir el Registro A al Registro X, así: 1
X← A
TPA Transferir el Registro CCR al Registro A, así: 1
A ← CCR
TST OPR 3
TSTA 1
TSTX Hacer test si la cantidad es Cero o Negativo 1
TST OPR,X 3
TST ,X 2
TST OPR,SP 4
TSX Transferir el Registro SP al Registro H:X, así: 2
H:X ← SP
TXA Transferir el Registro X al Registro A, así: 1
A← X
TXS Transferir el Registro H:X al Registro SP, así: 2
SP ← H:X

Donde:
A = Acumulador SP = Stack Pointer
M = Dato o valor almacenado H:X = Registro para direccionamiento Indexado de 16 bits
C = Carry REL = Una etiqueta cualquiera, (Una subrutina)
OPR = Registro (8 ó 16 Bits) N = Cualquier bit
X = Registro para direccionamiento Indexado de 8 bits # OPR = Valor inmediato

5.5. PROGRAMACIÓN.

A continuación se acondicionaran algunos de los ejemplos que se desarrollaron en los

microcontroladores de Microchip vistos en los capítulos 3 y 4, para que el lector pueda

desarrollar destreza en ambos fabricantes, siguiendo los mismos pasos de programación,

planteados en el ejemplo 8 el cual se vio en el capítulo 3, se recomienda al lector leer

nuevamente este ejemplo.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
192
Para programar y simular los programas de los microcontroladores de Freescale se usara

CodeWarrior versión 5.9.

Ejemplo 21. Tomar el ejemplo 8 y acondicionarlo para el microcontrolador MC68HC908JK1.

A continuación se desarrollara paso a paso, además se explicara como hacer un proyecto en

CodeWarrior.

Paso 1. El funcionamiento de un led ya se conoce por ende se omite este paso.

Paso 2. Hacer un diagrama de conexiones. Hay que decir en cual de las 15 líneas de In/Out, del

microcontrolador se va a poner el led. Se puede tomar B3, así como el ejemplo 8. (En los

ejemplos desarrollados con microntroladores Freescale no se harán figuras con los

montajes, el lector entenderá que solo es seguir la distribución de pines del

microcontrolador en cual esta trabajando; para este caso es el MC68HC908JK1; recordar

que en la figura 45 se muestra. De la misma forma tener en cuenta las líneas de

alimentación, de reset y del oscilador).

Paso 3. Hacer el diagrama de flujo. De acuerdo al diagrama de conexiones planteado en el

punto anterior. Hay que programar B3 como salida para el led. Ver diagrama 33.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
193
La subrutina tiempo es la misma de los anteriores programas por ende no se hace el diagrama

de flujo, ver diagrama 3 visto en el ejemplo 8.

Diagrama 33. Programa que prender y apagar un led. Ejemplo 21

INICIO

Definición del Microcontrolador

Definición de registros del Usuario

Programación B3 Como Salida


PRENDE

1 = B3 Prende el LED

Llamar TIEMPO

0 = B3 Apaga el LED

Llamar TIEMPO

Paso 4: Una vez hecho el diagrama de flujo hay que pasarlo a instrucciones. A continuación se

desarrollara el diagrama de flujo bloque por bloque: Cuando se construye un nuevo proyecto se

hace la definición del microcontrolador, para ello se usa CodeWarrior versión 5.9 o en otra

versión superior. Para abrir este programa ir por Inicio/Todos los programas/Freescale

CodeWarrior/CW for Microcontrolles V6.0/Code Warrior IDE, así como lo muestra la figura

48a. Una vez abierto el programa hacer clic en Create New Project, como se observa en la

figura 48b.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
194
48 a 48 b

Figura 48. Inicio de Code Warrior y Crear proyecto.

Después hay que escoger el microcontrolador en el cual se va a realizar el programa, así que

hay que buscar la familia HC08 y allí la familia JK/JL y por ultimo en la lista seleccionar el

MC68HC908JK1, como se observa en la figura 49a, además hay que seleccionar Full Chip

Simulation, para poder simular el programa; posteriormente hacer clic en siguiente.

49 a 49 b

Figura 49. Selección del microcontrolador y nombre proyecto.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
195
En la ventana que aparece, allí seleccionar Relocateble Assembly; en la casilla Project Name

escribir el nombre del proyecto, en la figura 49b se muestra esto; el lector puede tener una

carpeta para sus proyectos, para ello puede ir por Location y allí seleccionar la carpeta

correspondiente y escribir el nombre. Posteriormente pude seleccionar finalizar.

Es en ese momento es donde se crea el proyecto, así como se muestra en la figura 50a, para

iniciar a escribir hacer clic en mian, y en la ventana que se abre hay una plantilla, que es donde

se escribe el programa del usuario. El lector podrá observar tres óvalos azules en la figura 50b,

el primero es donde el usuario puede definir los registros para su uso, el segundo es donde se

programan los puertos, el tercero es donde se escribe el programa principal y las subrutinas.

50 a 50 b

Figura 50. Proyecto listo para digitar el programa en Assembler.

Ahora se hace la definición de los registros del Usuario, recordar que puede iniciar en la

posición 0080H hasta 00FFH, ver figura 46.

Tener en cuanta que para este compilador asignar una posición en Hexadecimal se le antepone

el signo pesos ($), además que hay usar los dos puntos después del registro así:

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
196
CON1: EQU $80 ; REGISTROS PARA LA SUBRUTINA TIEMPO
CON2: EQU $81

Ahora hay que programar B3 como salida para el led, recordar que los registros de control

son los DDRX, para este caso se usara el DDRB, así:

BSET 3,DDRB ; B3 COMO SALIDA PARA EL LED

Observe que se uso la instrucción BSET, esta tiene el siguiente formato: BSET n,opr; lo que

hace es tomar un bit que lo representa n, de un registro cualquiera que lo representa opr y lo

pone en uno (SET), de esta forma se programa la línea 3 del Puerto B como salida.

El siguiente bloque del diagrama de flujo es prende el led y allí es donde inicia el programa

principal para lo cual la plantilla asigna una etiqueta o nivel que la llama mainLoop, figura 49b,

para prender el led se usa la misma instrucción anterior pero con la diferencia que se pone en

uno el bit 3 del Puerto B (PTB) así:

BSET 3,PTB ; PRENDE EL LED EN B3

Siguiendo el diagrama de flujo ahora hay que llamar tiempo para que el ojo humano pueda

observar el led prendido para ello se usa la instrucción BSR rel; la cual se usa para llamar una

subrutina; tener en cuanta que puede usar esta instrucción siempre y cuando el salto no supere

las 128 posiciones tanto arriba como abajo desde donde se este llamando.

BSR TIEMPO ; SE DA TIEMPO PARA VER EL LED PRENDIDO

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
197
Posteriormente hay que apagar el led, para ello se usa la instrucción BCLR n,opr; esta lo que

hace es tomar un bit que lo representa n, de un registro cualquiera y lo representa opr y lo pone

en cero, así:

BCLR 3,PTB ; APAGA EL LED EN B3

Aquí nuevamente se llama tiempo para poder dejar el ojo humano pueda observar el led

apagado así:

BSR TIEMPO ; SE DA TIEMPO PARA VER EL LED APAGADO

Según el diagrama de flujo hay que regresar a prender el led, es decir hasta aquí es el programa

principal, para ello se usa la instrucción BRA rel; la cual se usa para hacer saltos

incondicionales a cualquier parte del programa, para esta caso se salta a mainLoop así:

BRA mainLoop ; SALTA A PREDENR NUEVAMENTE

De esta forma ya se escribió el programa principal, solo queda por hacer la subrutina tiempo,

por ende siguiendo el diagrama 3 hay que cargar los registros contadores CON1 y CON2, para

ello se usa la instrucción MOV opr,opr, la cual mueve un valor cualquiera (ya se hexadecimal,

o en decimal o en binario) a cualquier registro. Para entender un poco mas esto se puede

observar la tabla 24 en la cual se muestra como se usa esta instrucción para cargar el valor 77

en decimal y los equivalentes en Hexadecimal, ASCII y en binario el registro CON1.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
198
Forma de uso de la instrucción Explicación
MOV #$4D,CON1 Mueve el valor 64 en
Hexadecimal al registro CON1
MOV #77t,CON1 Mueve el valor 100 en Decimal al
registro CON1
MOV #%01001101,CON1 Mueve el valor 01100100 en
Binario al registro CON1
MOV #’M’,CON1 Mueve el valor ASCII de la letra
M (01001101) al registro CON1

Tabla 24. Forma de uso de la instrucción MOV opr,opr

El lector puede observar como se escribió la instrucción, es decir que primero se escribe el

valor a cargar (fuente) y después el registro (destino).

Entonces siguiendo el diagrama 3 se carga 30H y 20H a los registros CON1 y CON2

respectivamente así:

TIEMPO:
MOV #$30,CON1 ; MUEVE EL VALOR 30 H AL REGISTRO CON1.
N1:
MOV #$20,CON2 ; MUEVE EL VALOR 20 H AL REGISTRO CON2.

Note que hay la etiqueta N1, que según el diagrama de flujo es donde se regresa a cargar

nuevamente el registro CON2 cuando CON1 aun no es cero.

Siguiendo el diagrama hay que restar en uno el CON2 y preguntar si es cero, para ello se usa la

instrucción DBNZ opr,rel; la cual decrementa (resta en uno cualquier registro, que lo

representa opr) y salta si no es cero (salta a una etiqueta que la representa rel), así:

N2:
DBNZ CON2,N2 ; CON2 – 1 = C0N2, SI NO ES CERO SALTA A N2

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
199
Ahora hay que restar en uno el CON1 y preguntar si es cero, para ello la misma instrucción

anterior así:

DBNZ CON1,N1 ; CON1 – 1 = C0N1, SI NO ES CERO SALTA A N1

Por ultimo se usa la instrucción RTS para retornar al programa principal desde la subrutina

TIEMPO así:

RTS ; RETORNA AL PROGRAMA PRINCIPAL

Ahora que se escribió el programa desarrollando cada una de las partes del diagrama de flujo a

continuación se puede observar el programa completo:

CON1: EQU $80 ; REGISTROS PARA LA SUBRUTINA TIEMPO


CON2: EQU $81
BSET 3,DDRB ; B3 COMO SALIDA PARA EL LED
mainLoop:
BSET 3,PTB ; PRENDE EL LED EN B3
BSR TIEMPO ; SE DA TIEMPO PARA VER EL LED PRENDIDO
BCLR 3,PTB ; APAGA EL LED EN B3
BSR TIEMPO ; SE DA TIEMPO PARA VER EL LED APAGADO
BRA mainLoop ; SALTA A PREDENR NUEVAMENTE
TIEMPO:
MOV #$30,CON1 ; MUEVE EL VALOR 30 H AL REGISTRO CON1.
N1:
MOV #$20,CON2 ; MUEVE EL VALOR 20 H AL REGISTRO CON2.
N2:
DBNZ CON2,N2 ; CON2 – 1 = C0N2, SI NO ES CERO SALTA A N2
DBNZ CON1,N1 ; CON1 – 1 = C0N1, SI NO ES CERO SALTA A N1
RTS ; RETORNA AL PROGRAMA PRINCIPAL

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
200
Una vez escrito todo el programa ya se puede compilar, usando el icono MAKE, así como se

muestra en la figura 51a, cuando se hace clic el aplicativo compila; cuando hay errores se abre

una ventana donde indica cada uno de ellos; así que hay que corregirlos hasta que no se tenga

ninguno, iniciado por el primer error y nuevamente compilar. Cuando se ha compilado

exitosamente se procede hacer la simulación del programa para lo cual se pude hacer clic en

DEBUG, como se observa en la figura 51b.

Al hacer clic en DEBUG se abre el True-Time Simulator & Real Time Debuger, en la figura

52 se muestra. El lector puede darse cuanta cuales son los icono para la simulación, estos están

en un ovalo rojo, o también puede hacerla por teclado usando F11, que es paso a paso.

Antes de iniciar la simulación es bueno explicar algunas de las ventanas, Source es donde se

muestra el programa completo, Aseembly es donde esta el programa en assembler, Register es

donde se puede ver el estado de los registros, entre ellos el A (acumulador), PC (contador de

programa), Status (registro de estados), entre otros, Memory es donde se observa el estados de

todos los registros de la memoria RAM.

51 a 51 b

Figura 51. Como compilar.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
201
Figura 52. Ventanas de simulación.

El lector puede entonces ir ejecutado el programa paso a paso usando la tecla F11, e ir

verificando como van cambiando los registros involucrados en el programa y de esa forma ver

si el programa esta haciendo lo debe hacer, para este caso prender y apagar un led.

Paso 5. Programar el microcontrolador, armar el circuito y probar. En este paso hay que tener

cuidado cuando se este cableando en el protoboard, para ello hay que saber la distribución del

microcontrolador (ver figura 45) y el diagrama de conexiones planteado en el paso 2.

Paso 6. Si hay que hacer correcciones, hacerlas y volver al paso tres.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
202
Ejemplo 22. Tomar el ejemplo 9 y acondicionarlo para el microcontrolador MC68HC908KJ1.

A continuación se desarrollará paso por paso:

Paso 1. Ya se sabe el funcionamiento de un led, y así como se dijo en el ejemplo 9 solo es

adicionar siete leds mas en el puerto B para poder hacer el juego de luces.

Paso 2. Como se mencionó en el punto anterior se trabajará todo el puerto B para los 8 leds. El

programador entenderá que le puede agregar al circuito anterior los siete led´s restantes.

Paso 3. Diagrama de flujo: Hay que programar todo el PORTB como salida para los 8 leds.

Para controlar la rotación tanto para la derecha como para la izquierda se pueden usar las

instrucciones de rotación con carry, tanto para izquierda como para la derecha, ver tabla 23;

entonces solo es preguntar por el Carry, de esa forma se puede tener control de las rotaciones.

El Puerto B inicia con 0000 0001 en binario para cuando rota a la izquierda y cuando va a la

derecha se le asegura 1000 0000 en binario, ver diagrama 34.

Paso 4. El programa se puede observar después del diagrama 34, note que la subrutina de

tiempo es la misma del ejemplo anterior, si se desea que se mas rápido o mas lento el juego de

luces, solo se aumenta o disminuye el valor a los contadores desde 00 H a FFH. Una ves digitado

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
203
el programa se puede compilar para posteriormente poderlo simular, de esa forma el se puede

observar que el PUERTO B efectivamente esta rotando.

El lector podrá darse cuenta que las instrucciones nuevas que se usarán en este programa son

las de rotación tanto a la izquierda como a la derecha las cuales se muestran a continuación

respectivamente así:

LSL PTB ; SE ROTA AL IZQUIERDA EL PUERTO B, CON CARRY


LSR PTB ; SE ROTA AL DERECHA EL PUERTO B, CON CARRY

Y para preguntar por el estado del bit del Carry:

BCC REL ; Salta a una subrutina o etiqueta (REL) si el Bit del Carry del
; Registro de Banderas (CCR) es Cero

Diagrama 34. Programa que juego de luces. Ejemplo 22.

INICIO

Definición del Microcontrolador

Definición de Registros del Usuario

Programación PORTB Como Salida

LUCES
01 = PUERTO B
IZQ
Llamar TIEMPO

Rotar a la Izquierda PUERTO B = PUERTO B

NO
CARRY = 1

SI
80 =(STATUS)
PUERTO B
DER
Llamar TIEMPO

Rotar a la Derecha PUERTO B = PUERTO B

NO
CARRY = 1
SI

(STATUS)

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
204
Una vez explicadas las nuevas instrucciones que se usarán solo queda escribir el programa

completo así:

CON1: EQU $80 ; CON1 Y CON2 CONTADORES PARA LA SUBRUTINA


; TIEMPO
CON2: EQU $81
MOV #$FF,DDRB ; PUERTO COMO SALIDA PARA LOS LEDS
LUCES:
MOV #%00000001,PTB ; SE INICIA CON 0000 0001
IZQ:
BSR TIEMPO ; SE DA TIEMPO PARA VER LA ROTACIÓN
LSL PTB ; SE ROTA AL IZQUIERDA EL PUERTO B
BCC IZQ ; SI EL CARRY ES CERO SALTA A IQZ
MOV #%10000000,PTB ; SE INICIA CON 0000 0001
DER:
BSR TIEMPO ; SE DA TIEMPO PARA VER LA ROTACIÓN
LSR PTB ; SE ROTA AL DERECHA EL PUERTO B
BCC DER ; SI EL CARRY ES CERO SALTA A DER
BRA LUCES ; REGRESA A INICIAR ROTACIÓN ALA IZQUIERDA
TIEMPO:
MOV #$30,CON1 ; MUEVE EL VALOR 30 H AL REGISTRO CON1.
N1:
MOV #$20,CON2 ; MUEVE EL VALOR 20 H AL REGISTRO CON2.
N2:
DBNZ CON2,N2 ; CON2 – 1 = C0N2, SI NO ES CERO SALTA A N2
DBNZ CON1,N1 ; CON1 – 1 = C0N1, SI NO ES CERO SALTA A N1
RTS ; RETORNA AL PROGRAMA PRINCIPAL

Paso 5. Programar el microcontrolador, armar el circuito y probar. En este paso hay que tener

cuidado cuando se este cableando en el protoboard, para ello hay que saber la distribución del

microcontrolador (ver figura 45) y el diagrama de conexiones planteado en el paso 2.

Paso 6. Si hay que hacer correcciones, hacerlas y volver al paso tres.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
205
Con los dos ejemplos anteriores se trabajo manejo de puertos solo de salida a partir del

siguiente ejemplo se van a realizar ejercicios tanto de entra como de salida con ello se puede

ver como se toman decisiones dependiendo de un dato del exterior, en estos

microcontroladores.

Ejemplo 23. Tomar el ejemplo 10 y acondicionarlo para el microcontrolador MC68HC908JK1.

A continuación se desarrollará paso por paso:

Paso 1. En el ejemplo 8 se explico el funcionamiento de un led, y en el ejemplo 10 se explico

como trabaja un pulsador normalmente abierto; queda listo este paso.

Paso 2. Para este ejercicio se pude tomar la misma distribución del ejemplo 10, es decir, B1

para el led y B4 para el pulsador.

Paso 3. Diagrama de flujo: Según lo planteado en el punto anterior hay que programar B1 como

salida para el led y B4 como entrada para el pulsador. Ver diagrama 35.

Diagrama 35. Programa que prender y apagar un led con dos velocidades. Ejemplo 23.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
206
INICIO

Definición del Microcontrolador

Definición de Registros de usuario

B1 Como salida para el LED

B4 Como entrada para el PULSADOR

LED
VEL 1
B4 = 1
VEL 2
NO SI
1 = B1 1 = B1

Llamar TIEMPO1 Llamar TIEMPO2

0 = B1 0 = B1

Llamar TIEMPO1 Llamar TIEMPO2

Como se mencionó en el ejemplo 10 hay dos subrutinas de retardo las cuales son: TIEMPO 1 y

TIEMPO 2, estas hacen la diferencia de las velocidades.

Paso 4. El programa es el siguiente; note los valores diferentes en los contadores para las

subrutinas de tiempo.

Para el desarrollo este programa se uso una instrucción que no se había trabajado la cual es:

BSET n,opr,rel

Esta instrucción permite preguntar por un bit (que lo representa (n)) de un registro (que lo

indicado por (opr)) si esta uno (SET), si lo es salta a una subrutina (rel), de lo contrario no

salta, es decir ejecuta la siguiente instrucción. Para el caso de este ejemplo es la que permite

tomar la decisión de que subrutina ejecutar, si B4 es uno ejecuta la subrutina VEL2 y si B4 es

cero ejecuta la subrutina VEL1.

Estos microcontroladores también tienen la posibilidad de preguntar por si un bit es cero (CLR)

la instrucción es:
__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
207
BCLR n,opr,rel

Esta instrucción funciona lo contrario a la interior, es decir que salta a una etiqueta (rel) si el bit

(n) de un registro (opr) es cero (CLR).

Ahora si se puede escribir el programa según lo planteado en el diagrama de flujo 35:

CON1: EQU $80 ; CON1 Y CON2 CONTADORES PARA LA SUBRUTINA


; TIEMPO
CON2: EQU $81
BSET DDRB,1 ; B1 COMO SALIDA PARA EL LED
BCLR DDRB,4 ; B4 COMO IN PARA EL PULSADOR
LED:
BRSET 4,PTB,VEL2 ; SE PREGUNTA SI B4 ES UNO, SI ES UNO SALTA A VEL2
; Y SI ES CERO SALTA A VEL1
VEL1:
BSET PTB,1 ; SUBRUTINA DE VELOCIDAD UNO
BSR TIEMPO1
BCLR PTB,1
BSR TIEMPO1
BRA LED
VEL2:
BSET PTB,1 ; SUBRUTINA DE VELOCIDAD DOS
BSR TIEMPO2
BCLR PTB,1
BSR TIEMPO2
BRA LED
TIEMPO1:
MOV #$30,CON1 ; MUEVE EL VALOR 30 H AL REGISTRO CON1.
N1:
MOV #$20,CON2 ; MUEVE EL VALOR 20 H AL REGISTRO CON2.
N2:
DBNZ CON2,N2 ; CON2 – 1 = C0N2, SI NO ES CERO SALTA A N2
DBNZ CON1,N1 ; CON1 – 1 = C0N1, SI NO ES CERO SALTA A N1
RTS ; RETORNA AL PROGRAMA PRINCIPAL

TIEMPO2:
MOV #$50,CON1 ; MUEVE EL VALOR 30 H AL REGISTRO CON1.
__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
208
N1:
MOV #$60,CON2 ; MUEVE EL VALOR 20 H AL REGISTRO CON2.
N2:
DBNZ CON2,N2 ; CON2 – 1 = C0N2, SI NO ES CERO SALTA A N2
DBNZ CON1,N1 ; CON1 – 1 = C0N1, SI NO ES CERO SALTA A N1
RTS ; RETORNA AL PROGRAMA PRINCIPAL

Paso 5. Programar el microcontrolador, armar el circuito y probar. En este paso hay que tener

cuidado cuando se este cableando en el protoboard, para ello hay que saber la distribución del

microcontrolador (ver figura 45) y el diagrama de conexiones planteado en el paso 2.

Paso 6. Si hay que hacer correcciones, hacerlas y volver al paso tres.

Ejemplo 24. Tomar el ejemplo 11 y acondicionarlo para el microcontrolador MC68HC908JK1.

A continuación se desarrollará paso por paso:

Paso 1. En el ejemplo 11 se utilizó y se explicó como funciona un display de ánodo común, por

lo tanto no se explica.

Paso 2. Para este ejercicio se usara el Puerto B así como se uso en el ejemplo 11, desde B 0

hasta B6, una línea del puerto para cada segmento.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
209
Paso 3. Diagrama de flujo: Hay que usar el Puerto B de salida, justamente el diagrama de flujo

36 muestra como es esto y como sacar los datos, lo que hay que recordar es que estos datos son

los que se observan en la tabla 12. Note que el diagrama no esta completo, el lector puede

completarlo, solo es seguir la secuencia.

Diagrama 36. Programa para visualizar los números decimales del 0 al 9 en un Display 7 Segmentos.

Ejemplo 24.

INICIO

Definición del Microcontrolador

Definición de Registros de Usuario

Programación PUERTO B Como Salida


CERO
40H = PUERTO B

Llamar TIEMPO

79H = PUERTO B

Llamar TIEMPO

24H = PUERTO B

Llamar TIEMPO

30H = PUERTO B

Llamar TIEMPO

Paso 4. El programa es el siguiente. La subrutina de tiempo sigue siendo igual a los ejemplos

anteriores.

CON1: EQU $80 ; CON1 Y CON2 CONTADORES PARA LA SUBRUTINA


; TIEMPO
CON2: EQU $81

MOV #$FF,DDRB ; PUERTO B DE SALIDA PARA LOS SEGMENTOS DEL


; DISPLAY
CERO:
MOV #$40,PTB ; SE VISUALIZA CERO EN EL DISPLAY

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
210
BSR TIEMPO ; TIEMPO PARA VER EL DATO

MOV #$79,PTB ; SE VISUALIZA UNO EN EL DISPLAY


BSR TIEMPO ; TIEMPO PARA VER EL DATO

MOV #$24,PTB ; SE VISUALIZA DOS EN EL DISPLAY


BSR TIEMPO ; TIEMPO PARA VER EL DATO

MOV #$30,PTB ; SE VISUALIZA TRES EN EL DISPLAY


BSR TIEMPO ; TIEMPO PARA VER EL DATO

MOV #$19,PTB ; SE VISUALIZA CUATRO EN EL DISPLAY


BSR TIEMPO ; TIEMPO PARA VER EL DATO

MOV #$12,PTB ; SE VISUALIZA CINCO EN EL DISPLAY


BSR TIEMPO ; TIEMPO PARA VER EL DATO

MOV #$02,PTB ; SE VISUALIZA SEIS EN EL DISPLAY


BSR TIEMPO ; TIEMPO PARA VER EL DATO

MOV #$78,PTB ; SE VISUALIZA SIETE EN EL DISPLAY


BSR TIEMPO ; TIEMPO PARA VER EL DATO

MOV #$00,PTB ; SE VISUALIZA OCHO EN EL DISPLAY


BSR TIEMPO ; TIEMPO PARA VER EL DATO

MOV #$10,PTB ; SE VISUALIZA DIEZ EN EL DISPLAY


BSR TIEMPO ; TIEMPO PARA VER EL DATO

feed_watchdog
BRA CERO
TIEMPO:
MOV #$30,CON1 ; MUEVE EL VALOR 30 H AL REGISTRO CON1.
N1:
MOV #$20,CON2 ; MUEVE EL VALOR 20 H AL REGISTRO CON2.
N2:
DBNZ CON2,N2 ; CON2 – 1 = C0N2, SI NO ES CERO SALTA A N2
DBNZ CON1,N1 ; CON1 – 1 = C0N1, SI NO ES CERO SALTA A N1
RTS ; RETORNA AL PROGRAMA PRINCIPAL

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
211
Paso 5. Programar el microcontrolador, armar el circuito y probar. En este paso hay que tener

cuidado cuando se este cableando en el protoboard, para ello hay que saber la distribución del

microcontrolador (ver figura 45) y el diagrama de conexiones planteado en el paso 2.

Paso 6. Si hay que hacer correcciones, hacerlas y volver al paso tres.

Ejemplo 25. Acondicionar el ejemplo 12 para un MC68HC908JK1.

A continuación se desarrollará paso por paso:

Paso 1. A esta altura el lector ya sabrá como funciona un display multiplexado, claro que si aun

tiene dudas puede leer el paso 1 del ejemplo 12.

Paso 2. Hay que decir en cuales de las 15 líneas del microcontrolador se va a poner los 7

segmentos de todos los display y en cuales los comunes. Se puede tomar el PUERTO B para

los segmentos y el PUERTO D para los comunes, (desde D2 hasta D5), es decir estos dos

puertos van a ser programados como salida.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
212
Paso 3. Diagrama de flujo: Como se esta trabajando con el mismo display del ejemplo 12, por

tanto sirven los mismos códigos de la tabla 16 en la cual se pueden apreciar los códigos en

hexadecimal que debe sacar el microcontrolador por el PUERTO B para poder ver la palabra

HOLA.

Solo queda por plantear el diagrama de flujo el cual se puede observar en el diagrama 37,

observe el orden para sacar los códigos de cada letra mediante el PUERTO B, la forma como se

habilita los comunes de los display mediante el PUERTO D, y el tiempo que se da para ver

cada una.

Diagrama 37. Programa para visualizar la palabra hola en 4 display de 7 segmentos. Ejemplo 25.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
213
INICIO

Definición del Microcontrolador

Definición de Registros del Usuario

PUERTO B Como Salida

PUERTO D Como Salida


OTRO
09H = PUERTO B Letra H

1 = D5

Llamar TIEMPO

0 = D5

40H = PUERTO B Letra 0

1 = D4

Llamar TIEMPO

0 = D4

47H = PUERTO B Letra L

1 = D3

Llamar TIEMPO

0 = D3

08H = PUERTO B Letra A

1 = D2

Llamar TIEMPO

0 = D2

Paso 4. El programa es el siguiente. La subrutina de tiempo es la misma de los anteriores

programas; como se digo en el ejemplo 12 hay que tener cuenta los valores de los contadores

pues no pueden ser muy grandes ni muy pequeños pues si son lo primero se visualizaría letra

por letra, y si es el segundo caso se visualizaría en los cuatro display ochos.

CON1: EQU $80 ; CON1 Y CON2 CONTADORES PARA LA SUBRUTINA


; TIEMPO
CON2: EQU $81

MOV #$FF,DDRB ; PUERTO B DE SALIDA PARA LOS SEGMENTOS DE LOS


; DISPLAYS
MOV #$FF,DDRD ; PUERTO D DE SALIDA PARA LOS COMUNES DE LOS
__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
214
; DISPLAYS
HOLA:
MOV #$09,PTB ; CÓDIGO DE LA LETRA H
BSET 5,PTD ; SE HABILITA
BSR TIEMPO ; SE DA TIEMPO PARA VER LA LETRA H
BCLR 5,PTD ; SE DESHABILITA

MOV #$40,PTB ; CÓDIGO DE LA LETRA O


BSET 4,PTD ; SE HABILITA
BSR TIEMPO ; SE DA TIEMPO PARA VER LA LETRA O
BCLR 4,PTD ; SE DESHABILITA

MOV #$47,PTB ; CÓDIGO DE LA LETRA L


BSET 3,PTD ; SE HABILITA
BSR TIEMPO ; SE DA TIEMPO PARA VER LA LETRA L
BCLR 3,PTD ; SE DESHABILITA

MOV #$08,PTB ; CÓDIGO DE LA LETRA A


BSET 2,PTD ; SE HABILITA
BSR TIEMPO ; SE DA TIEMPO PARA VER LA LETRA A
BCLR 2,PTD ; SE DESHABILITA

feed_watchdog
BRA HOLA
TIEMPO:
MOV #$30,CON1 ; MUEVE EL VALOR 30 H AL REGISTRO CON1.
N1:
MOV #$20,CON2 ; MUEVE EL VALOR 20 H AL REGISTRO CON2.
N2:
DBNZ CON2,N2 ; CON2 – 1 = C0N2, SI NO ES CERO SALTA A N2
DBNZ CON1,N1 ; CON1 – 1 = C0N1, SI NO ES CERO SALTA A N1
RTS ; RETORNA AL PROGRAMA PRINCIPAL

Paso 5. Programar el microcontrolador, armar el circuito y probar. En este paso hay que tener

cuidado cuando se este cableando en el protoboard, para ello hay que saber la distribución del

microcontrolador (ver figura 45) y el diagrama de conexiones planteado en el paso 2.

Paso 6. Si hay que hacer correcciones, hacerlas y volver al paso tres.


__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
215
Ejemplo 26. Acondicionar el ejemplo 13 para el MC68HC908JK1, recordar que se trata de

visualizar la frase PRUEBA DEL PUBLIC - HOLA., En el mismo montaje del ejemplo

25.

A continuación se desarrollará paso por paso:

Paso 1. En los ejemplos 12, 13 y 23, se trabajo con cuatro display de ánodo común

multiplexados, entonces el funcionamiento es el mismo.

Paso 2. En este montaje se usará la misma distribución del ejemplo 25

Paso 3. Para hacer el diagrama de flujo, diagrama 33, se sigue la misma secuencia del ejemplo

13 la cual es: primero se llama la subrutina ROTAR, diagrama 9, luego se carga el código de la

letra en el registro D1, y por último se llama la subrutina VER, diagrama 10.

Lo mismo que en el ejemplo 13 a cada display se le asignará un registro de la RAM, los cuales

serán D1, D2, D3 y D4.

El lector podrá leer en ejemplo 13 cual es la función de las subrutinas ROTAR y VER, ya que

son las mismas.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
216
Diagrama 33. Programa para visualizar una frase completa en 4 display de 7 segmentos. Ejemplo 24

INICIO

Definición del Microcontrolador

Registros de Propósito General

PUERTO B Como Salida

PUERTO D Como Salida


OTRO
Llamar ROTAR Letra P

0CH = D1

Llamar VER Se visualiza P

Llamar ROTAR Letra R

2FH = D1

Llamar VER Se visualiza PR

Llamar ROTAR Letra U

41H = D1

Llamar VER Se visualiza PRU

Llamar ROTAR Letra E

06H = D1

Llamar VER Se visualiza PRUE

Llamar ROTAR Letra B

03H = D1

Llamar VER Se visualiza PRUEB


Paso 4. El programa es el siguiente. La subrutina de tiempo es la misma de los anteriores

programas con los mismos valores del anterior ejemplo. Note que el programa no está completo

solo es seguir la secuencia para las otras letras.

En el ejemplo 21 se explico como usar la instrucción BSR rel; para llamar una subrutina;

siempre y cuando el salto no supere las 128 posiciones tanto arriba como abajo desde donde se

este llamando, como este programa es mas largo se hace necesario usar otra instrucción para

llamar subrutinas la cual es JSR OPR, donde OPR representa la Subrutina donde se quiere
__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
217
saltar (etiqueta). Y para realizar el retorno desde la subrutina se usa misma instrucción RTS tal

cual como se uso en los anteriores ejemplos de este capítulo.

CON1: EQU $80 ; CON1 Y CON2 CONTADORES PARA LA SUBRUTINA


; TIEMPO
CON2: EQU $81
CON3: EQU $82
D1: EQU $83 ; REGISTROS PARA LA ROTACION Y VISUALIZACION
; DINÁMICA
D2: EQU $84
D3: EQU $85
D4: EQU $86

MOV #$FF,DDRB ; PUERTO B DE SALIDA PARA LOS SEGMENTOS DE LOS


; DISPLAYS
MOV #$FF,DDRD ; PUERTO D DE SALIDA PARA LOS COMUNES DE LOS
; DISPLAYS
MOV #$FF,D1 ; SE LIMPIAN LAOS DISPLAY, SE LIPIA PANTALLA
MOV #$FF,D2
MOV #$FF,D3
MOV #$FF,D4
OTRO:
JSR ROTA ; SE VISUALIZA LETRA P
MOV #$0C,D1
JSR VER

JSR ROTA ; SE VISUALIZA LETRA R


MOV #$02F,D1
JSR VER

JSR ROTA ; SE VISUALIZA LETRA U


MOV #$41,D1
JSR VER

JSR ROTA ; SE VISUALIZA LETRA E

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
218
MOV #$06,D1
JSR VER

JSR ROTA ; SE VISUALIZA LETRA B


MOV #$03,D1
JSR VER

JSR ROTA ; SE VISUALIZA LETRA A


MOV #$08,D1
JSR VER

JSR ROTA ; SE VISUALIZA EL ESPACIO


MOV #$FF,D1
JSR VER

JSR ROTA ; SE VISUALIZA LETRA D


MOV #$A1,D1
JSR VER

JSR ROTA ; SE VISUALIZA LETRA E


MOV #$06,D1
JSR VER

JSR ROTA ; SE VISUALIZA LETRA L


MOV #$C7,D1
JSR VER

feed_watchdog
JMP OTRO

ROTA:
MOV D3,D4 ; D3 = D4
MOV D2,D3 ; D2 = D3
MOV D1,D2 ; D1 = D2
RTS

VER:

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
219
MOV #$20,CON3
VER_1:
MOV D1,PTB ; SE VISUALIZA LO QUE TINE D1
BSET 2,PTD
BSR TIEMPO
BCLR 2,PTD

MOV D2,PTB ; SE VISUALIZA LO QUE TINE D2


BSET 3,PTD
BSR TIEMPO
BCLR 3,PTD

MOV D3,PTB ; SE VISUALIZA LO QUE TINE D3


BSET 4,PTD
BSR TIEMPO
BCLR 4,PTD

MOV D4,PTB ; SE VISUALIZA LO QUE TINE D4


BSET 5,PTD
BSR TIEMPO
BCLR 5,PTD

DBNZ CON3,VER_1
RTS
;
TIEMPO:
MOV #$30,CON1 ; MUEVE EL VALOR 30 H AL REGISTRO CON1.
N1:
MOV #$20,CON2 ; MUEVE EL VALOR 20 H AL REGISTRO CON2.
N2:
DBNZ CON2,N2 ; CON2 – 1 = C0N2, SI NO ES CERO SALTA A N2
DBNZ CON1,N1 ; CON1 – 1 = C0N1, SI NO ES CERO SALTA A N1
RTS ; RETORNA AL PROGRAMA PRINCIPAL

Paso 5. Programar el microcontrolador, armar el circuito y probar. Como se había mencionado

en el punto 2 es el mismo montaje del ejemplo anterior.


__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
220
Paso 6. Si hay que hacer correcciones, hacerlas y volver al paso tres.

Ejemplo 25. Acondicionar el ejemplo 17 para el MC68HC908JK1. Recordar que se desea

visualizar una frase completa en una LCD de 16 X 2 y posteriormente que el microcontrolador

quede prendiendo y pagado un led estilo el ejemplo 6. La frase puede estar distribuida así:

Línea 1 “Prueba LCD 16x2”

Línea 2 “con MC68HC908JK1”

A continuación se desarrollará paso por paso:

Paso 1. En el ejemplo 17 se explico como funciona una LCD de 16 X 2, por ende este paso ya

se cumplió.

Paso 2. La distribución del circuito puede ser de la siguiente forma: el Puerto B para el bus de

la LCD, así: B0 con DB0 (pin 7), B1 con DB1 (pin 8), y así sucesivamente; y las líneas de

control RS (pin 4) y E (pin 6) están conectadas así; D2 = RS y D3 = E. El led se puede colocar

en D4.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
221
Paso 3. Así como en el ejemplo 17 se van a crear varias subrutinas las cuales van a ser citas por

el programa principal, diagrama 34, (el diagrama no está completo el lector podrá completarlo

siguiendo la secuencia), en este lo primero que se hace es programar los puertos luego da un

tiempo.

Diagrama 34. Programa manejo LCD a 8 bits. Ejemplo 25.

INICIO

Definición del Microcontrolador

Registros de Propósito General

PUERTO B y PUERTO D DE SALIDA

LLAMAR TIEMPO 33 mS

LLAMAR PRENDE_LCD

LLAMAR LÍNEA_1

“LETRA P” = A

LLAMAR DATO

“LETRA R” = A

LLAMAR DATO

LLAMAR LÍNEA_2

“LETRA C” = A

LLAMAR DATO

“LETRA O” = A

LLAMAR DATO

1 = D4

LLAMAR TIEMPO 30 mS

0 = D4

LLAMAR TIEMPO 30 mS

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
222
Posteriormente llama una subrutina de PRENDER_LCD la cual se encarga de configurar y

prender la LCD, diagrama 35, luego llama la subrutina LÍNEA_1 en la cual se selecciona la

línea 1 de la LCD posición 00H, diagrama 36, luego se carga el dato en ASCII en el registro A,

luego se usa la subrutina DATO la cual se encarga de enviar el dato a la LCD y se repite el

proceso para todas las letras.

Diagrama 35. Subrutina PRENDE_LCD. Ejemplo 25.

PRENDE_LCD

0 = D2 (RS)

0 = D3 (E)

TRANMISIÓN A 8 BITS
LCD DE 2 LÍNEAS
CARÁCTER 5X7
„00111000‟ = PORTB

LLAMAR TIEMPO 3mS

1 = D3 (E)

0 = D3 (E)

DISPLAY ON
CUERSOR OFF
PARPADEO OFF
„00001100‟ = PORTB

LLAMAR TIEMPO 3mS

1 = D3 (E)

0 = D3 (E)

RETORNAR

Cuando se requiere la línea 2 se usa la subrutina LÍNEA_2 en la cual se selecciona la línea 2 de

la LCD posición 40H, diagrama 37. Por ultimo se garantiza que un led prenda y apague

indefinidamente, con ello se prueba que la LCD un vez reciba el dato lo mantiene hasta que se

le diga los contrario.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
223
Diagrama 36. Subrutina LÍNEA 1. Ejemplo 25.

LÍNEA_1

0 = D2 (RS)

1 = D3 (E)

POSICIÓN 00H
EN LINEA 1
„10000000‟ = PORTB

TIEMPO 3 mS

0 = D3 (E)

RETORNAR

Diagrama 37. Subrutina LÍNEA 2. Ejemplo 25.

LÍNEA_2

0 = D2 (RS)

1 = D3 (E)

POSICIÓN 40H
EN LINEA 2
„11000000‟ = PORTB

TIEMPO 3 mS

0 = D3 (E)

RETORNAR

Diagrama 38. Subrutina DATO. Ejemplo 25.

DATO

1 = D2 (RS)

1 = D3 (E)

A = PORTB

TIEMPO 80 µS

0 = D3 (E)

RETORNAR

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
224
Paso 4. El programa es el siguiente, (en este caso el programa está completo para todas las

letras). Las subruintas de tiempo son las mismas que se han usado en los programas anteriores

pero con valores necesarios para cumplir con los requerimientos de tiempos de la LCD.

CON1: EQU $80 ; CON1 Y CON2 CONTADORES PARA LA SUBRUTINA


; TIEMPO
CON2: EQU $81

MOV #$FF,DDRB ; PUERTO B DE SALIDA BUS DE DATOS DE LA LCD


MOV #$FF,DDRD ; PUERTO D SALIDA, D2=RS, D3=E, D4=LED

BSET 0,CONFIG1 ; SE DESHABILITA COP


JSR TIEMPO ; SE DA TIEMPO PARA QUE PRENDA LA LCD
JSR PRENDE_LCD
MENSAJE:
JSR LINEA_1 ; LCD LÍNEA 1 POSICIÓN 00
LDA #'P' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA P
JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'r' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA r


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'u' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA u


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'e' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA e


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'b' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA b


JSR DATO ; SE VISUALIZA EN LA LCD

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
225
LDA #'a' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA a
JSR DATO ; SE VISUALIZA EN LA LCD

LDA #' ' ; SE CARGA EL CÓDIGO ASCII DEL ESPACIO


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'L' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA L


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'C' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA C


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'D' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA D


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #' ' ; SE CARGA EL CÓDIGO ASCII DEL ESPACIO


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'1' ; SE CARGA EL CÓDIGO ASCII DEL NUMERO 1


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'6' ; SE CARGA EL CÓDIGO ASCII DEL NUMERO 6


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'x' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA x


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'2' ; SE CARGA EL CÓDIGO ASCII DEL NUMERO 2


JSR DATO ; SE VISUALIZA EN LA LCD

JSR LINEA_2 ; LCD LÍNEA 2 POSICIÓN 40

LDA #'c' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA c


JSR DATO ; SE VISUALIZA EN LA LCD

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
226
LDA #'o' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA o
JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'n' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA n


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #' ' ; SE CARGA EL CÓDIGO ASCII DEL ESPACIO


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'M' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA M


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'C' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA C


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'6' ; SE CARGA EL CÓDIGO ASCII DEL NUMERO 6


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'8' ; SE CARGA EL CÓDIGO ASCII DEL NUMERO 8


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'H' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA H


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'C' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA C


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'9' ; SE CARGA EL CÓDIGO ASCII DEL NUMERO 9


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'0' ; SE CARGA EL CÓDIGO ASCII DEL NUMERO 0


JSR DATO ; SE VISUALIZA EN LA LCD

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
227
LDA #'8' ; SE CARGA EL CÓDIGO ASCII DEL NUMERO 8
JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'J' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA J


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'K' ; SE CARGA EL CÓDIGO ASCII DE LA LETRA K


JSR DATO ; SE VISUALIZA EN LA LCD

LDA #'1' ; SE CARGA EL CÓDIGO ASCII DEL NUMERO 1


JSR DATO ; SE VISUALIZA EN LA LCD
LED:
BSET 4,PTD ; PRENDE EL LED EN D4
BSR TIEMPO ; SE DA TIEMPO PARA VER EL LED PRENDIDO
BCLR 4,PTD ; APAGA EL LED EN D4
BSR TIEMPO ; SE DA TIEMPO PARA VER EL LED APAGADO
BRA LED

PRENDE_LCD:
BCLR 2,PTD ; RS=0
BCLR 3,PTD ; E=0
MOV #%00111000,PTB ; 0011 1000; TRANSMISIÓN EN 8 BIT, LCD DE 2 LÍNEAS,
; CARÁCTER 5X7

JSR TIEMPO_3ms ; DL=1, N=1, F=0


BSET 3,PTD ; E=1
BCLR 3,PTD ; E=0
MOV #%00001110,PTB ; 0000 1110; DISPLAY ON, CURSOR ON, PARPADEO OFF.
JSR TIEMPO_3ms ; D=1, C=1, B=0
BSET 3,PTD ; E=1
BCLR 3,PTD ; E=0
RTS ; RETORNA

LINEA_1:

BCLR 2,PTD ; RS=0


BSET 3,PTD ; E=1
MOV #$80,PTB ; 1000 0000 POSICIÓN 00, INICIO LÍNEA 1.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
228
JSR TIEMPO_3ms: ; SE DA TIEMPO DE 3 MILISEGUNDOS

BCLR 3,PTD ; E=0


RTS ; RETORNA DESDE DONDE LO LLAMARON
;

LINEA_2:

BCLR 2,PTD ; RS=0


BSET 3,PTD ; E=1
MOV #$C0,PTB ; 1100 0000 POSICIÓN 40, INICIO LÍNEA 2.
JSR TIEMPO_3ms: ; SE DA TIEMPO DE 3 MILISEGUNDOS

BCLR 3,PTD ; E=0


RTS ; RETORNA DESDE DONDE LO LLAMARON
;

DATO:

BSET 2,PTD ; RS=1


BSET 3,PTD ; E=1
STA PTB
JSR TIEMPO_80mics: ; SE DA TIEMPO DE 80 MICROSEGUNDOS

BCLR 3,PTD ; E=0


RTS ; RETORNA DESDE DONDE LO LLAMARON

TIEMPO_3ms:

MOV #$19,CON1 ; MUEVE EL VALOR 30 H AL REGISTRO CON1.


N1:
MOV #$29,CON2 ; MUEVE EL VALOR 20 H AL REGISTRO CON2.
N2:
DBNZ CON2,N2 ; CON2 – 1 = C0N2, SI NO ES CERO SALTA A N2
DBNZ CON1,N1 ; CON1 – 1 = C0N1, SI NO ES CERO SALTA A N1
RTS ; RETORNA DESDE DONDE LO LLAMARON

TIEMPO_80mics:

MOV #$01,CON1 ; MUEVE EL VALOR 30 H AL REGISTRO CON1.


N3:
MOV #$19,CON2 ; MUEVE EL VALOR 20 H AL REGISTRO CON2.
N4:
DBNZ CON2,N4 ; CON2 – 1 = C0N2, SI NO ES CERO SALTA A N4
DBNZ CON1,N3 ; CON1 – 1 = C0N1, SI NO ES CERO SALTA A N3
RTS ; RETORNA DESDE DONDE LO LLAMARON
__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
229
TIEMPO:
MOV #$30,CON1 ; MUEVE EL VALOR 30 H AL REGISTRO CON1.
N5:
MOV #$20,CON2 ; MUEVE EL VALOR 20 H AL REGISTRO CON2.
N6:
DBNZ CON2,N6 ; CON2 – 1 = C0N2, SI NO ES CERO SALTA A N6
DBNZ CON1,N5 ; CON1 – 1 = C0N1, SI NO ES CERO SALTA A N5
RTS ; RETORNA DESDE DONDE LO LLAMARON

Paso 5. Programar el microcontrolador, armar el circuito y probar. En este paso hay que tener

cuidado cuando se este cableando en el protoboard, para ello hay que saber la distribución del

microcontrolador (ver figura 45) y el diagrama de conexiones planteado en el paso 2.

Paso 6. Si hay que hacer correcciones, hacerlas y volver al paso tres.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
230
Ejercicios 5

1) Se desea que un led aumente su velocidad de prendido y apagado y después la disminuya. Es


decir que inicie con velocidad lenta hasta una velocidad que el ojo humano no vea y por ultimo
que regrese de la misma forma a la velocidad en la que inicio.

2) Hacer un contador en binario de 00H a 4CH y que inicie nuevamente.

3) Hacer un juego de luces que valla 3 veces de izquierda a derecha y 5 veces de derecha a
izquierda.

4) Se tiene tres matrices unicolor 7x5, se desea visualizar la palabra


MICROCONTROLADORES, en los tres colores posibles (Rojo, Verde, Ámbar).

5) Hay un concurso de conocimientos en electrónica básica organizado por la facultad de


ingeniería de la universidad de San Buenaventura. El concurso tiene cinco participantes. La
misión es diseñar el circuito para cuando se realice una pregunta en el momento que alguno de
los participantes oprima para contestar indique con un bombillo de 110 V AC y deshabilite los
otros participantes; una vez conteste hay un sistema de reset. Hay un led indicador.

6) Hay cinco motores 12 VDC cada uno tiene un pulsador con el cual se puede apagar o prender.
Al iniciar todos los cinco motores están prendidos, si se desea apagar alguno de ellos, por
ejemplo el motor 2, pues se pulsa el pulsador dos, los otros motores siguen prendidos, si se
quiere prenderlo pues vuelve oprimir el pulsador, con los otros sucede lo mismo.

7) Hay una tejedora que tiene un motor 12 V DC, el cual mueve un cabezal; tiene dos microswich
una a la izquierda y otro a la derecha. Se desea que el cabezal valla a la derecha y al izquierda,
es decir simular el movimiento de coser. Hay un led indicador el cual funciona permanente
mente.

8) Diseñar un programa que controle un motor paso a paso de 1.8 grados por paso así: Hay un
pulsador, cuando se oprima este el motor gira así:
Gira 281 grados a la derecha, luego dos vueltas a la izquierda, luego una vuelta a la derecha y
por ultimo 90 a la izquierda y al final el motor para. Hay un led de testigo. Cuando se vuelve a
pulsar inicia nuevamente.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
231
9) En el ejemplo 20 se trabajo con un potor paso a paso de cuatro bobinas, de 1.8 grados por
paso, de 5Vdc y cuatro pulsadores ubicados en cruz, figura 42. Se desea que una LCD
visualize en la Linéa 1 los grados que gira el motor y en la Línea 2 el sentido de giro (Derecha
ó Isquierda)

10) Se desea diseñar el control de un semáforo en una intersección (calle/carrera) así: La


prioridad la tiene la calle; en la carrera estarán ubicados sensores para detectar el flujo, cuando
pasen 15 vehículos en cada uno de los sentidos (norte/sur ó sur/norte) el semáforo debe dar la
vía a la carrera, durante 50 segundos. Se debe tener leds indicadores para los tres colores del
semáforo tanto en la calle como en la carrera.

11) Agregarle un semáforo peatonal a al ejercicio anterior. Este deber ser visualizado en un
Matriz bicolor así: cuando el peatón no bebe caminar el semáforo mostrara un monacho en rojo
quieto; cuando el peatón puede caminar el monacho esta en verde caminado (animación);
cuando el tiempo se este terminado el monacho debe caminar mas rápido y ponerse ámbar y
cuando el tiempo se acabe debe pasar a rojo y quieto.

__________________________________________________________________________
“Diseños NEFEPEQUIN” 05/04/2010
232

También podría gustarte