Sie sind auf Seite 1von 36

3.

TDel ejercicio anterior, sabiendo los datos existentes en las localidades de memoria
0Eh y 0Fh, modifique el programa que transfiera el dato de las localidades de
memoria 0Eh al puerto B.
a. Diagrama de flujo

b. Circuito
PIC16F84A

PTOB

;enviamos el registro w al puerto B


mos registro w con el numero ABh

C1
4 MHZ

27p

C2
16
15
27p

R2

10k

R1
100R

RESET

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

17
18
1
2
3
6
7
8
9
10
11
12
13
RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

T
T

c. Cdigo .asm
LIST
RADIX
STATUS
PTOB
AUX
DIR1
DIR2

P=16F84A
HEX
EQU
EQU
EQU
EQU T
EQU T

CLRF
CLRF
CLRF

CICLO
T

0x03 T
0x06 T
0x0D
0x0E T
0x0F T

;direciona al registro de STATUS


;direcciona al puerto B
; direccion de mamoria 0DH
;direccion de mamoria 0EH
;direccion de mamoria 0FH

ORG T
0x00
BSF
STATUS,5 T;seleccionar el banco 1
MOVLW T0x00
;carga w con el valor 00h
MOVWF
PTOB
;para habilitar el puerto B salida
BCF
STATUS,5 T;seleccionar el banco 0

T
T
T
T
T
T
T
T
T

;comando que indica el pic usado.


;los valores en hexadecimal

DIR1
DIR2
AUX

MOVLW T0X3f
MOVWF
DIR1
MOVWF
AUX
MOVLW T0xF3 T
MOVWF
DIR2
MOVWF
DIR1
MOVFW
AUX T
MOVWF
DIR2
MOVFW
DIR1
MOVWF
PTOB
GOTO
CICLO
TEND T

ORG T
0x00
;limpia la direccion 0EH
;limpia la direccion 0FH
;limpia la direccion 0DH
;cargar el reg w con el num 3Fh
T;almacenar el reg w en la dir 0Eh
T;almacenar el reg w en aux 0Dh
;cargar reg w con el numero F3h
;almacenar el reg w en la dir 0Fh
;almacenar el reg w en la dir 0Eh
;cargar reg w con dato de dir 0Dh
;almacenar reg w en la dir 0Fh
;cargar reg w con dato de dir 0Eh
;enviar el reg w al pto B
;ir a ciclo
;fin del programa

PIC16F84A

4.TProponer un circuito que tenga el puerto B como salida conectando 8 leds y el puerto
A como entradas, realizar un programa que transfiera todas las entradas en el puerto
A hacia el puerto B.
a. Diagrama de flujo

VCC

b. Circuito

C1
4 MHZ

27p

C2
16
15
27p

R2

10k

R1
100R

RESET

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

17
18
1
2
3

RA0

RA1

RA2

RA3

RA4

6
7
8
9
10
11
12
13
RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

c.TCdigo .asm
TLIST
TRADIX
STATUS
PTOA
PTOB

P=16F84A
HEX
EQU T
EQU
EQU

;comando que indica el pic usado.


;los valores en hexadecimal
0x03 T
0x05 T
0X06

;direciona al registro de STATUS


;direcciona al puerto A
;direcciona al puerto B

ORG T
0x00
BSF
STATUS,5 T;seleccionar el banco 1
MOVLW T0x1F
;carga w con el valor 01h para habilitar
MOVWF
PTOA
; el puerto A como entrada
MOVLW T0x00
;carga w con el valor 00h para habilitar
MOVWF
PTOB
; el puerto B como salida
BCF
STATUS,5 T;seleccionar el banco 0

T
T

CICLO
T
T

CLRF
CLRF

PTOA
PTOB

;limpia el puerto A
;limpia el puerto B

MOVFW
MOVWF
GOTO
END T

PTOA
PTOB
CICLO

;cargamos w con el valor del puerto A


;enviamos el registro w al puerto B
;ir a la subrutina CICLO
;fin del programa

PIC16F84A

5.TProponer un circuito que tenga el puerto B como salida conectando 8 leds y el puerto
A como entradas realizar un programa que permita hacer la operacin de suma del
puerto A (entrada) con el dato 05h y el resultado mostrarlo en el puerto B (salida).
porta = porta + 05h.
a. Diagrama de flujo

VCC

b. Circuito

C1
4 MHZ

27p

C2
16
15
27p

R2

10k

R1
100R

RESET

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

17
18
1
2
3

RA0

RA1

RA3

RA4

6
7
8
9
10
11
12
13
RB7

Prog04 Diagrama elctrico

RA2

RB6

RB5

RB4

RB3

RB2

RB1

RB0

c. Cdigo .asm
T
T

T
T
T
T

LIST
RADIX
STATUS
PTOA
PTOB

0x03 T
0x05 T
0x06 T

ORG T
0x00
BSF
STATUS,5 T
MOVLW T0x1F
MOVWF
PTOA
MOVLW T0x00
MOVWF
PTOB
BCF
STATUS,5 T
TCLRF
CLRF

CICLO

P=16F84A
HEX
EQU
EQU
EQU

PTOA
PTOB

MOVLW T0x05
ADDWF
PTOA,0
MOVWF
PTOB
GOTO
CICLO
TEND T

;comando que indica el pic usado.


;los valores en hexadecimal
;direciona al registro de STATUS
;direcciona al puerto A
;direcciona al puerto B
;seleccionar el banco 1
;carga w con 1Fh
;habilitar puerto A como entrada
;carga w con 00h
;habilitar puerto B como salida
;seleccionar el banco 0
;limpia el puerto A
;limpia el puerto B

;cargamos w con el numero 05h


;suma, W = PuertoA + W
;enviamos el reg w al puerto B
;ir a CICLO
;fin del programa

6.TRealizar un programa que permita hacer la funcin espejo en el puerto B, el nibble


menos significativo delPIC16F84A
puerto B ser de entrada y el nibble ms significativo ser de
salida, permitiendo de esta manera monitorear el estado del nibble de entrada en el
nibble de salida.
a. Diagrama de flujo

VCC

b. Circuito

C1
4 MHZ

27p

C2
16
15
27p

R2

10k

R1
100R

RESET

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

17
18
1
2
3

RB3

RB2

RB1

RB0

6
7
8
9
10
11
12
13
RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

c.TCdigo .asm
T

LIST
RADIX

P=16F84A
HEX

STATUS
PTOA
PTOB

EQU
EQU
EQU

;comando que indica el pic usado.


;los valores en hexadecimal
0x03 T
0x05 T
0x06 T

;direciona al registro de STATUS


;direcciona al puerto A
;direcciona al puerto B

ORG T
0x00
T
BSF
STATUS,5 T;seleccionar el banco 1
T
MOVLW T0x0F
;carga w con el valor 0fh
T
MOVWF
PTOB
;habilitar Tpuerto TB Ten Tnibble
SALIDA y nibble ENTRADA
T
BCF
STATUS,5 T;seleccionar el banco 0
T
T

CLRF
SWAPF
GOTO

END T

CICLO

PTOB
PTOB,1
CICLO

T;limpia el puerto B
;intercambia nibbles del puerto B
;ir a la subrutina CICLO
;fin del programa

7.TRealizar un programa que permita tener una seal cuadrada simtrica de 50 hz en el


bit 7 del puerto B.
a. Diagrama de flujo

b. Circuito
C1
4 MHZ

27p

C2
16
15
27p

R2

10k

R1
100R
RESET

PIC16F84A
OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

17
18
1
2
3
6
7
8
9
10
11
12
13

c. Cdigo .asm
LIST
RADIX

P=16F84A
HEX

STATUS
PTOB
CONTA1
CONTA2

EQU
EQU
EQU T
EQU T

T
T
T
T
CICLO
T
T
T
T
T
T

;comando que indica el pic usado.


;los valores se representan en hexadecimal
0x03 T
0x06 T
0x0D
0x0E T

;direciona al registro de STATUS


;direcciona al puerto B
;hace refencia a la direccion 0Dh
;hace refencia a la direccion 0Eh

ORG T
0x00
BSF
STATUS,5 T;seleccionar el banco 1
MOVLW T0x00
;carga w con 00h para habilitar puerto B salida
MOVWF
PTOB
T;transfiere contenido de w en 0x05 del banco 1
BCF
STATUS,5 T;seleccionar el banco 0
CLRF
PTOB
MOVLW T0x80 T
MOVWF
PTOB
CALL
IEMPO
MOVLW T0x00 T
MOVWF
PTOB
CALL
IEMPO
GOTO
CICLO

;limpia el puerto B
;cargamos w con el numero 80h
;enviamos el registro w al puerto B
;llamamos a la subrutina de tiempo TIEMPO
;cargamos w con el numero 80h
;enviamos el registro w al puerto B
;llamamos a la subrutina de tiempo TIEMPO
;ir a la subrutina CICLO

IEMPO
MOVLW TD'150'
;cargamos w con el numero decimal 5
T
MOVWF
CONTA1
;almacenamos w en la direccion 0Dh
LAZO2
MOVLW TD'20' T
;cargamos w con el numero decimal 5
T
MOVWF
CONTA2
;almacenamos w en la direccion 0Eh
LAZO1
DECFSZ
CONTA2,1 T;decrementa CONTA2 -1 y si el resultado es
igual a 0, salta 1 instruccion
T
GOTO
LAZO1
;ir a la subrutina LAZO1
T
DECFSZ
CONTA1,1 T;decrementa CONTA1 -1 y si el resultado es
igual a 0, salta 1 instruccion
T
GOTO
LAZO2
;ir a la subrutina LAZO2
T
RETURN
;retorno de la instruccion CALL
T

END T

;fin del programa

8.TRealizar un programa que permita tener una seal cuadrada simtrica de 50 hz en el


bit 7, una seal cuadrada simtrica de 60 hz en el bit 6 del puerto B.
a. Diagrama de flujo

b. Circuito
C1
4 MHZ

27p

PIC16F84A

C2
16
15
27p

R2
10k

4
RESET

R1
100R

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

17
18
1
2
3
6
7
8
9
10
11
12
13

D1
LED-GREEN

c. Cdigo .asm
LIST
RADIX

P=16F84
HEX

W
F
EDO
PTAB
CONTA4
CONTA1
CONTA2
CONTA3

EQU
EQU
EQU
EQU
EQU T
EQU
EQU
EQU

0x00
0x01
0x03
0x06
0x0C
0x0D
0x0E
0x0F

ORG

0x00

T
INICIO
T
T
T

BSF
EDO,5
MOVLW Tb'00000000'
MOVWF
PTAB
BCF
EDO,5

;------------------------------INICIA PROGRAMA----------------------------------BUCLE
T
T
T
T
T
T
T
T
T
T
T
T

MOLVW T0x80
MOVWF
PTAB
CALL
EMPO
MOVLW T0x00
MOVWF
PTAB
CALL
EMPO
MOVLW T0x40
MOVWF
PTAB
CALL
EMPO1
MOVLW T0x00
MOVWF
PTAB
CALL
EMPO1
GOTO
BUCLE

;---------------------------------RUTINA DE TIEMPO--------------------------------EMPO
T
LAZO2
T
LAZO1
T
T
T
T

MOVLW TD'5'
MOVWF
CONTA1
MOVLW TD'5'
MOVWF
CONTA2
DECFSZ
CONTA2,1
GOTO
LAZO1
DECFSZ
CONTA1,1
GOTO
LAZO2
RETURN

EMPO1 TMOVLW TD'6'


T
MOVWF
CONTA3
LAZO4
MOVLW TD'6'
T
MOVWF
CONTA4
LAZO3
DECFSZ
CONTA4,1
T
GOTO
LAZO3
T
DECFSZ
CONTA3,1
T
GOTO
LAZO4
T
RETURN
T

END

9.TProponer un circuito que tenga el puerto B como salida conectando 8 leds, realizar un
programa que permita rotar el dato 01h en el puerto B de manera infinita. Controle la
rotacin para que el bit se rote de la posicin del bit 0 al bit 7.
a. Diagrama de flujo

PIC16F84A

b. Circuito
C1
4 MHZ

27p

C2
16
15
27p

R2

10k

R1
100R

RESET

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

17
18
1
2
3
6
7
8
9
10
11
12
13
RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

c. Cdigo .asm
LIST
RADIX

P=16F84A
HEX

STATUS
PTOB
CONT1
CONT2

EQU
EQU
EQU
EQU

;comando que indica el pic usado.


;los valores se representan en hexadecimal
0x03 T
0x06 T
0x0D
0x0E

;direciona al registro de STATUS


;direcciona al puerto B
;hace refencia a la direccion 0Dh
T;hace refencia a la direccion 0Eh

T
T
T
T

ORG T
0x00
BSF
STATUS,5 T;seleccionar el banco 1
MOVLW T0x00
T;carga w con 00h
MOVWF
PTOB
;transfiere contenido de w en 0x05 del banco 1
BCF
STATUS,5 T;seleccionar el banco 0

CLRF

PTOB

BCF

STATUS,0

INICIO
T
T

MOVLW T0x01 T
MOVWF
PTOB
CALL
IEMPO
RLF
PTOB,1
B FSS
PTOB,7

T
T

GOTO
GOTO

IZQ

;limpia el puerto B
;PONEMOS ACARREO A CERO
;cargar W con 0x01
;mandar w en puerto B
;llamamos subrutina de tiempo
;rotamos un 1 a la izquierda en el puerto B
;compara si b7 del puerto B es igual a 0, salta si

es 1
IZQ
INICIO

;no b7=0 entonces ir a IZQ


;si b7=1 entonces ir a INICIO

;rutina de tiempo
TD'150'
T;carga w con un valor decimal
CONT1
;almacena w en CONT1
TD'20' T
;carga w con un valor decimal
CONT2
;almacena w en CONT2
CONT2,1
;decrementa 1 a CONT2, salta si CONT2 es

IEMPO
MOVLW
T
MOVWF
LAZO2
MOVLW
T
MOVWF
LAZO1
DECFSZ
igual a 0
T
GOTO
LAZO1
T
DECFSZ
CONT1,1
CONT1, salta si CONT1 es igual a 0
T
GOTO
LAZO2
T
RETURN
T

END T

;si CONT2 es diferente de 0. Ir a LAZO1


;si CONT2 es igual a 0. Decrementa 1 a
;si CONT1 es diferente de 0. Ir a LAZO2
;retorno de subrutina
;fin del programa

10.Proponer un circuito que tenga el puerto B como salida conectando 8 leds, realizar un
programa que permita rotar el dato 01h en el puerto B a la izquierda y cuando llegue
al bit 7 se realice la rotacin a la derecha, de la posicin de bit 7 a la posicin de bit 0
de forma infinita.
a. Diagrama de flujo

b. Circuito

PIC16F84A

C1
4 MHZ

27p

C2
16
15
27p

R2

10k

R1
100R

RESET

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

17
18
1
2
3
6
7
8
9
10
11
12
13
RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

c. Cdigo .asm
;+--------------------------------------------------------------------------------------+
;|
ENCABEZADO
|
;+--------------------------------------------------------------------------------------+
LIST Tp = 16f84
;usar el PIC16F84
radix Thex T
;y la numeracin hexadecimal
;+--------------------------------------------------------------------------------------+
;|
VARIABLES
|
;+--------------------------------------------------------------------------------------+
estado
equ
0x03 T
;Le asignamos nombres a los registro
portb T
equ
0x06 T
;encuentran
Aux1
equ
0x0C T
;Direcciones de ocupados para
Aux2
equ
0x0D
;la subrutina de retardo
Aux3
equ
0x0E
;+--------------------------------------------------------------------------------------+
;|
CONFIGURACIN DEL PUERTO B COMO SALIDA T
|
;+--------------------------------------------------------------------------------------+
ORG T
0x00 T
;Origen del programa, siempre empieza aqui
;cuando se establece reset
CBF T
estado,5
;Nos pasamos al banco 1
CLRF
portb
;de configuracion del puerto B, ser de salida
BCF T
estado,5
;Nos regresamos al banco 0
;+--------------------------------------------------------------------------------------+
;|
AQUI ENCIENDE Y APAGA EL LED
|
;+--------------------------------------------------------------------------------------+
MOVLW
0x01 T
;Pone un 1 en el pin INT/RB0 (enciende el
LED)
MOVWF
portb
BCF
estado,0
CALL
TRetardo
;Llamar a la subrutina de retardo
rotari
TRLF
Tportb,1
;rotar a la izquierda portb
CALL
Retardo
;Llamar a la subrutina de retardo
B FSS
portb,7
;el b 7 de portb = 1?
GOTO
rotari
;No, ir a rotari
rotard
RRF T
portb,1
;Si, rotar a la derecha portb
CALL
Retardo
;llamar a la subrutina de retardo
B FSS
portb,0
;El b 0 de portb = 1?
GOTO
rotard
;No, ir a ratard
GOTO
rotari T
;Si, ir a rotari
;+-------------------------------------------------------------------------------------+
;|
RUTINA DE RETARDO
|
;+-------------------------------------------------------------------------------------+
Retardo
MOVLW T0x0F T
;239
T
MOVWF
Aux1
Uno T
T

MOVLW
MOVWF

0x0E T
Aux2

;232

Dos
res T
Cuatro
Cinco
T
T
T
Seis
Siete T
Ocho T
Nueve
T

CLRWDT
GOTO
GOTO
CLRWDT
DECFSZ
GOTO
DECFSZ
GOTO
GOTO
GOTO
GOTO
CLRWDT
RETURN
END T

;Limpiar el reloj del Perro guardian


Cuatro
Cinco
Aux2,f
Dos
Aux1,f
Uno
Siete
Ocho
Nueve

;Decrementar Aux3 -> Aux3-1


;Decrementar Aux2 -> Aux2-1

;Fin del programa

11.Proponer un circuito que tenga el puerto B como salida conectando 8 leds, realizar un
programa que permita encender el puerto B de manera secuencial desde el bit 7 al bit
0, y despus que apague todos desde el bit 7 hasta el bit 0, que se repita esto de
manera cclica.
a. Diagrama de flujo
b. Circuito
C1

4 MHZ

27p

PIC16F84A

C2
16
15
27p

R2

10k

R1
100R

RESET

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

17
18
1
2
3
6
7
8
9
10
11
12
13
RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

c. Cdigo .asm
;+--------------------------------------------------------------------------------------+
;|
ENCABEZADO
|
;+--------------------------------------------------------------------------------------+
LIST p = 16F84
;Usar el PIC16F84A-04/P
RADIX HEX T
;Todo en hexadecimal
;+--------------------------------------------------------------------------------------+
;|
VARIABLES
|
;+--------------------------------------------------------------------------------------+
w
equ
0
;Cuando d=0 el destino es w
f
T
equ
1
;Cuando d=1 el destino es f
PUERTOB Tequ
0x06 T
;Direccin del Puerto B
ESTADO
equ
0x03 T
;Direccin del Estado
PCL T
equ
0x02 T
;Direccin de PCL
Aux1
equ
0x0C T
;Direcciones de ocupados para
Aux2
equ
0x0D
;la subrutina de retardo
Aux3
equ
0x0E
cuenta
equ
0x20 T
;Direccin del registro que lleva el conteo
;+--------------------------------------------------------------------------------------+
;|
CONFIGURACIN DEL PUERTO B COMO SALIDA T
|
;+--------------------------------------------------------------------------------------+
ORG T
0x00 T
;Direccin de inicio
T
T

BSF
CLRF

ESTADO,5 T;Pasarse al Banco 1


PUERTOB ;Establecer el Puerto B como de salida

T
BCF
ESTADO,5 T;Volver al banco 0
;+--------------------------------------------------------------------------------------+
;|
PROGRAMA PRINCIPAL
;+--------------------------------------------------------------------------------------+
Ciclo1
CLRF
cuenta
;Inicializar el contador
Ciclo2
MOVF
cuenta,w
;Pasar a W el contenido de contador
CALL
abla
;Llamar a la tabla dependiendo de W
MOVWF
PUERTOB ;Mandar al Puerto B el valor obtenido
T
CALL
Retardo
T;Llamar la subrutina de retardo
T
INCF
cuenta,f
;Incrementar al contador
MOVLW
0x10 T
;Mover b'00010000' a W 16 decimal
T
XORWF
cuenta,w
;Hacer ope XOR cuenta con W
T
B FSS
ESTADO,2 T;El contador es igual a 16?
T
GOTO
Ciclo2
;No, seguir con el cciclo
T
GOTO
Ciclo1
;Si, ir a inicilizar el ciclo
;+--------------------------------------------------------------------------------------+
;|
RUTINA DE RETARDO
|
;+--------------------------------------------------------------------------------------+
Retardo
MOVLW
0x0D
;14
T
MOVWF
Aux1
Uno T
MOVLW
0x48 T
;72
T
MOVWF
Aux2
Dos
TMOVLW T0x7A
;0xF7 ;247
T
MOVWF
Aux3
res
CLRWDT
;Limpiar el reloj del Perro guardian
DECFSZ
Aux3,f
;Decrementar Aux3 -> Aux3-1
T
GOTO
res
T
DECFSZ
Aux2,f
;Decrementar Aux2 -> Aux2-1
T
GOTO
Dos
DECFSZ
Aux1,f
;Decrementar Aux1 -> Aux1-1
GOTO
Uno
T
GOTO
Sig
Sig
CLRWDT
;Limpiar el reloj del Perro guardian
T
RETURN
;+--------------------------------------------------------------------------------------+
;|
ABLA DE LA SECUENCIA
|
;+--------------------------------------------------------------------------------------+
abla
ADDWF
PCL,f
RETLW
B'10000000' T; 0x80
RETLW
B'11000000' T; 0xC0
RETLW
B'11100000' T; 0xE0
RETLW
B'11110000' T; 0xF0
RETLW
B'11111000' T; 0xF8
RETLW
B'11111100' T; 0xFC
RETLW
B'11111110' T; 0xFE
RETLW
B'11111111' T; 0xFF
RETLW
B'01111111' T; 0x7F
RETLW
B'00111111' T; 0x3F

RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
END T

B'00011111' T; 0x1F
B'00001111' T; 0x0F
B'00000111' T; 0x07
B'00000011' T; 0x03
B'00000001' T; 0x01
B'00000000' T; 0x00
;Fin del programa

12.Proponer un circuito que tenga el puerto B como salida conectando un motor a pasos
en sentido del reloj. Que inicie la rotacin cuando se presione el bit 0 del puerto A y
si se presiona cuando esta rotando este deber parar, es decir el bit ser de arranque y
paro.
a. Diagrama de flujo

b. Circuito

SW1

C1
4 MHZ

27p

SW-SPDT-MOM

C2
16
15
27p

R2

OSC1/CLKIN
OSC2/CLKOUT
MCLR

10k

R1

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

100R

RESET

PIC16F84A

17
18
1
2
3
6
7
8
9
10
11
12
13

U2
1
2
3
4
5
6
7
8

ULN2803 COM
1B
1C
2B
2C
3B
3C
4B
4C
5B
5C
6B
6C
7B
7C
8B
8C

10
18
17
16
15
14
13
12
11

+26

c. Cdigo .asm
;+----------------------------------------------------------------------+
;|
ENCABEZADO
|
;+----------------------------------------------------------------------+
LIST
p = 16F84
;Usar el PIC16F84A-04/P
RADIX
HEX T
;Todo en hexadecimal
;+----------------------------------------------------------------------+
;|
VARIABLES
|
;+----------------------------------------------------------------------+
w
equ
0
;Cuando d=0 el destino es w
f
T
equ
1
;Cuando d=1 el destino es f
PUERTOA equ
0x05 T
;Direccion del Puerto A
PUERTOB Tequ
0x06 T
;Direccin del Puerto B
ESTADO
equ
0x03 T
;Direccin del Estado
PCL T
equ
0x02 T
;Direccin de PCL
Aux1
equ
0x0D
Aux2
equ
0x0E T
npaso
equ
0x20 T
;Direccin del reg que lleva el conteo de
los pasos
;+------------------------------------------------------------------------------+
;|
CONFIGURACIN DEL PUERTO B COMO SALIDA T |
;|
Y EL PUERTO A COMO DE SALIDA
|
;+------------------------------------------------------------------------------+
ORG T
0x00 T
;Direccin de inicio
BSF
ESTADO,5 T
;Pasarse al Banco 1
MOVLW
0x00
MOVWF
PUERTOB
;Establecer el Puerto B como de salida
MOVLW
0x0F
MOVWF
PUERTOA
;Puerto A como de entrada RA0-RA3
T
BCF
ESTADO,5 T
;Volver al banco 0
;+----------------------------------------------------------------------+
;|
PROGRAMA PRINCIPAL
|
;+----------------------------------------------------------------------+
;inicio
Inicio
CLRF
npaso
;Borrar contenido de npaso
est T
B FSS
PUERTOA,0
;El bit 0 del puerto A es 1?
GOTO
Inicio
;No, ir a inicio
GOTO
Giro
T
;Si, ir a Giro
;fin
;+----------------------------------------------------------------------+
;|
GIRA MOTOR HACIA LA DERECHA
|
;+----------------------------------------------------------------------+
;inicio
Giro
TMOVF
npaso,w
;Pasar a W el contenido de contador
CALL
TablaD
;Llamar la tabla de pasos
MOVWF
PUERTOB
;Mandar al Puerto B el valor obtenido
CALL
Retardo
;Llamar subrutina de retardo
INCF
npaso,f
;Incrementar, npaso = npaso + 1
MOVLW
0x04 T
;Mover b'00000100' a W

XORWF
B FSS
GOTO
GOTO

npaso,w
ESTADO,2 T
est T
Inicio

;Hacer ope XOR cuenta con W


;El contador es igual a 4?
;No,va a ciclo
;Si, regresa al testeo T

;fin
;+----------------------------------------------------------------------+
;|
RETARDO DE 60 mlSeg
|
;+----------------------------------------------------------------------+
Retardo
MOVLW
.33
; 1 set number of repetitions (B)
MOVWF
Aux1
;1|
PLoop1
MOVLW
.60
; 1 set number of repetitions (A)
MOVWF
Aux2
;1|
PLoop2
CLRWDT
; 1 clear watchdog
CLRWDT
; 1 cycle delay
DECFSZ
Aux2,1
; 1 + (1) is the time over? (A)
GOTO
PLoop2
; 2 no, loop
DECFSC
Aux1,1
; 1 + (1) is the time over? (B)
GOTO
PLoop1
; 2 no, loop
CLRWDT
T
; 1 cycle delay
RETURN
; 2+2 Done
;fin
;+----------------------------------------------------------------------+
;|
ABLA MOTOR GIRA A LA DERECHA |
;+----------------------------------------------------------------------+
ablaD
ADDWF
PCL,f
RETLW
B'00001001'
;09
RETLW
B'00000011'
;03
RETLW
B'00000110'
;06
RETLW
B'00001100'
;0C
END T

;Fin del programa

13.Proponer un circuito que tenga el puerto B como salida conectando un motor a pasos
en sentido contrario del reloj. El bit 0 del puerto A ser de arranque y paro, el bit 1
controlara el sentido de giro en direccin del reloj, el bit 1 controlara el sentido de
giro en direccin contraria del reloj.
a. Diagrama de flujo

b. Circuito
VCC

C1
4 MHZ

27p

C2
16
15
27p

R2

10k

OSC1/CLKIN
OSC2/CLKOUT
MCLR

R1

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

100R

RESET

17
18
1
2
3
6
7
8
9
10
11
12
13

U2
1
2
3
4
5
6
7
8

1B
2B
3B
4B
5B
6B
7B
8B

COM
1C
2C
3C
4C
5C
6C
7C
8C

10
18
17
16
15
14
13
12
11

+65.

ULN2803

PIC16F84A

c. Cdigo .asm
;+----------------------------------------------------------------------+
;|
ENCABEZADO
|
;+----------------------------------------------------------------------+
LIST
p = 16F84
;Usar el PIC16F84A-04/P
RADIX
HEX T
;Todo en hexadecimal
;+----------------------------------------------------------------------+
;|
VARIABLES
|
;+----------------------------------------------------------------------+
w
equ
0
;Cuando d=0 el destino es w
f
T
equ
1
;Cuando d=1 el destino es f
PUERTOA equ
0x05 T
;Direccion del Puerto A
PUERTOB Tequ
0x06 T
;Direccin del Puerto B
ESTADO
equ
0x03 T
;Direccin del Estado
PCL T
equ
0x02 T
;Direccin de PCL
Aux1
equ
0x0D
Aux2
equ
0x0E T
npaso
equ
0x20 T
;Direccin del reg que lleva el conteo de
los pasos
;+-----------------------------------------------------------------------------+
;|
CONFIGURACIN DEL PUERTO B COMO SALIDA T |
;|
Y EL PUERTO A COMO DE SALIDA
|
;+-----------------------------------------------------------------------------+
ORG T
0x00 T
;Direccin de inicio
BSF
ESTADO,5 T
;Pasarse al Banco 1
MOVLW
0x00
MOVWF
PUERTOB
;Establecer el Puerto B como de salida
MOVLW
0x0F

MOVWF
PUERTOA
;Puerto A como de entrada RA0-RA3
T
BCF
ESTADO,5 T
;Volver al banco 0
;+----------------------------------------------------------------------+
;|
PROGRAMA PRINCIPAL
|
;+----------------------------------------------------------------------+
;inicio
Inicio
CLRF
npaso
;Borrar contenido de npaso
est T
B FSS
PUERTOA,0
;El bit 0 del puerto A es 1?
GOTO
Inicio
;No, ir a inicio
B FSS
PUERTOA,1
;Si,El bit 1 del puerto A es 1?
GOTO
GiroD
;No, ir a gira hacia la derecha
GOTO
GiroI
T
;Si, ir a gira hacia la izquierda
;fin
;+----------------------------------------------------------------------+
;|
GIRA MOTOR HACIA LA DERECHA
|
;+----------------------------------------------------------------------+
;inicio
GiroD
TMOVF
npaso,w
;Pasar a W el contenido de contador
CALL
TablaD
;Llamar la tabla de pasos
MOVWF
PUERTOB
;Mandar al Puerto B el valor obtenido
CALL
Retardo
;Llamar retardo
INCF
npaso,f
;Incrementar npaso = npaso + 1
MOVLW
0x04 T
;Mover b'00000100' a W
XORWF
npaso,w
;Hacer ope XOR cuenta con W
B FSS
ESTADO,2 T
;El contador es igual a 4?
GOTO
est T
;No,va a ciclo
GOTO
Inicio
;Si, regresa al testeo T
;fin
;+----------------------------------------------------------------------+
;|
GIRA MOTOR HACIA LA IZQUIERDA |
;+----------------------------------------------------------------------+
;inicio
GiroI
TMOVF
npaso,w
;Pasar a W el contenido de contador
CALL
TablaI
T
;Llamar la tabla de pasos
MOVWF
PUERTOB
;Mandar al Puerto B el valor obtenido
CALL
Retardo
;Llamar retardo
INCF
npaso,f
;Incrementar npaso = npaso + 1
MOVLW
0x04 T
;Mover b'00000100' a W
XORWF
npaso,w
;Hacer ope XOR cuenta con W
B FSS
ESTADO,2 T
;El contador es igual a 4?
GOTO
est T
;No,va a ciclo
GOTO
Inicio
;Si, regresa al testeo T
;fin
;+----------------------------------------------------------------------+
;|
RETARDO DE 60 mlSeg
|
;+----------------------------------------------------------------------+
Retardo
MOVLW
.33
; 1 set number of repetitions (B)
MOVWF
Aux1
;1|
PLoop1
MOVLW
.60
; 1 set number of repetitions (A)

PLoop2

MOVWF
CLRWDT
CLRWDT
DECFSZ
GOTO
DECFSZ
GOTO
CLRWDT
RETURN

Aux2
Aux2,1
PLoop2
Aux1,1
PLoop1

T
T

;1|
; 1 clear watchdog
; 1 cycle delay
; 1 + (1) is the time over? (A)
; 2 no, loop
; 1 + (1) is the time over? (B)
; 2 no, loop
; 1 cycle delay
; 2+2 Done

;fin
;+----------------------------------------------------------------------+
;|
ABLA MOTOR GIRA A LA DERECHA |
;+----------------------------------------------------------------------+
ablaD
ADDWF
PCL,f
RETLW
B'00001001'
;09
RETLW
B'00000011'
;03
RETLW
B'00000110'
;06
RETLW
B'00001100'
;0C
;+----------------------------------------------------------------------+
;|
ABLA MOTOR GIRA A LA IZQUIERDA |
;+----------------------------------------------------------------------+
ablaI
ADDWF
PCL,f
RETLW
B'00001100'
;0C
RETLW
B'00000110'
;06
RETLW
B'00000011'
;03
RETLW
B'00001001'
;09
END T

;Fin del programa

14.Proponer un circuito que tenga el puerto B como salida conectando un motor a pasos,
conectado al puerto B, y en el puerto A como entrada: el bit 0 incrementa la
velocidad, el bit 1 decrementa la velocidad.
a. Diagrama de flujo

b. Circuito
VCC

C1
4 MHZ

27p

C2
16
15
27p

R2

OSC1/CLKIN
OSC2/CLKOUT
MCLR

10k

R1

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

100R

RESET

17
18
1
2
3
6
7
8
9
10
11
12
13

U2
1
2
3
4
5
6
7
8

1B
2B
3B
4B
5B
6B
7B
8B

COM
1C
2C
3C
4C
5C
6C
7C
8C

10
18
17
16
15
14
13
12
11

ULN2803

PIC16F84A

c. Cdigo .asm
;+----------------------------------------------------------------------+
;|
ENCABEZADO
|
;+----------------------------------------------------------------------+
LIST
p = 16F84
;Usar el PIC16F84A-04/P
RADIX
HEX T
;Todo en hexadecimal
;+----------------------------------------------------------------------+
;|
VARIABLES
|
;+----------------------------------------------------------------------+
w
equ
0
;Cuando d=0 el destino es w
f
T
equ
1
;Cuando d=1 el destino es f
PUERTOA equ
0x05 T
;Direccion del Puerto A
PUERTOB Tequ
0x06 T
;Direccin del Puerto B
ESTADO
equ
0x03 T
;Direccin del Estado
PCL T
equ
0x02 T
;Direccin de PCL
Aux1
equ
0x0D
Aux2
equ
0x0E T
npaso
equ
0x20 T
;Direccin del reg que lleva el conteo de
los pasos
;+-----------------------------------------------------------------------------+
;|
CONFIGURACIN DEL PUERTO B COMO SALIDA T |
;|
Y EL PUERTO A COMO DE SALIDA
|
;+-----------------------------------------------------------------------------+
ORG T
0x00 T
;Direccin de inicio
BSF
ESTADO,5 T
;Pasarse al Banco 1
MOVLW
0x00
MOVWF
PUERTOB
;Establecer el Puerto B como de salida
MOVLW
0x0F
MOVWF
PUERTOA
;Puerto A como de entrada RA0-RA3

T
BCF
ESTADO,5 T
;Volver al banco 0
;+----------------------------------------------------------------------+
;|
PROGRAMA PRINCIPAL
|
;+----------------------------------------------------------------------+
;inicio
Inicio
CLRF
npaso
;Borrar contenido de npaso
est T
B FSS
PUERTOA,0
;El bit 0 del puerto A es 1?
GOTO
Inicio
;No, ir a inicio
B FSC
PUERTOA,1
;Si,El bit 1 del puerto A es 0?
GOTO
VelMax
;No, gira a vel max
B FSC
PUERTOA,2
;Si, el bit 2 del puerto A es 0?
GOTO
VelMin
;No, gira a vel min
GOTO
Inicio
;Si, vuelve al testeo
;fin
;+----------------------------------------------------------------------+
;|
GIRA MOTOR A VEL MAX
|
;+----------------------------------------------------------------------+
;inicio
VelMax
MOVF
npaso,w
;Pasar a W el contenido de contador
CALL
TablaD
;Llamar la tabla de pasos
MOVWF
PUERTOB
;Mandar al Puerto B el valor obtenido
CALL
Retardo1
;llamar la subrutina de retardo
INCF
npaso,f
;Incrementar npaso = npaso + 1
MOVLW
0x04 T
;Mover b'00000100' a W
XORWF
npaso,w
;Hacer ope XOR cuenta con W
B FSS
ESTADO,2 T
;El contador es igual a 4?
GOTO
est T
;No,va a ciclo
GOTO
Inicio
;Si, regresa al testeo T
;fin
;+----------------------------------------------------------------------+
;|
GIRA MOTOR A VEL MIN
|
;+----------------------------------------------------------------------+
;inicio
VelMin
MOVF
Tnpaso,w
;Pasar a W el contenido de contador
CALL
TablaD
;Llamar la tabla de pasos
MOVWF
PUERTOB
;Mandar al Puerto B el valor obtenido
CALL
Retardo
;Llamar la subrutina de retardo1
INCF
npaso,f
;Incrementar npaso = npaso + 1
MOVLW
0x04 T
;Mover b'00000100' a W
XORWF
npaso,w
;Hacer ope XOR cuenta con W
B FSS
ESTADO,2 T
;El contador es igual a 4?
GOTO
est T
;No,va a ciclo
GOTO
Inicio
;Si, regresa al testeo T
;fin
;+----------------------------------------------------------------------+
;|
RETARDO DE 60 mlSeg
|
;+----------------------------------------------------------------------+
Retardo
MOVLW
.33
; 1 set number of repetitions (B)
MOVWF
Aux1
;1|

PLoop1
PLoop2

MOVLW
MOVWF
CLRWDT
CLRWDT
DECFSZ
GOTO
DECFSZ
GOTO
CLRWDT
RETURN

.60
Aux2
Aux2,1
PLoop2
Aux1,1
PLoop1

T
T

; 1 set number of repetitions (A)


;1|
; 1 clear watchdog
; 1 cycle delay
; 1 + (1) is the time over? (A)
; 2 no, loop
; 1 + (1) is the time over? (B)
; 2 no, loop
; 1 cycle delay
; 2+2 Done

;fin
;+----------------------------------------------------------------------+
;|
RETARDO DE 30 mlSeg
|
;+----------------------------------------------------------------------+
Retardo1
MOVLW
.15
; 1 set number of repetitions (B)
MOVWF
Aux1
;1|
PLoop1
MOVLW
.30
; 1 set number of repetitions (A)
MOVWF
Aux2
;1|
PLoop2
CLRWDT
; 1 clear watchdog
CLRWDT
T
; 1 cycle delay
DECFSZ
Aux2,1
T
; 1 + (1) is the time over? (A)
GOTO
PLoop2
; 2 no, loop
DECFSZ
Aux1,1
; 1 + (1) is the time over? (B)
GOTO
PLoop1
; 2 no, loop
CLRWDT
T
; 1 cycle delay
RETURN
; 2+2 Done
;fin
;+----------------------------------------------------------------------+
;|
ABLA MOTOR GIRA A LA DERECHA |
;+----------------------------------------------------------------------+
ablaD
ADDWF
PCL,f
RETLW
B'00001001'
;09
RETLW
B'00000011'
;03
RETLW
B'00000110'
;06
RETLW
B'00001100'
;0C
END T

;Fin del programa

15.Proponer un circuito que tenga el puerto B como salida conectando un display de 7


segmentos conectando al puerto B de tal forma que podamos visualizar en el display
un contador de 0 al 9.
a. Diagrama de flujo

b. Circuito

R11
220R

R5

220R

R6

220R

R7

220R

R8

220R

R9

220R

R10

R1

220R

2k2

Q1
BC548

U1
16
15
4

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

17
18
1
2
3
6
7
8
9
10
11
12
13

PIC16F84A

c. Cdigo .asm
;+--------------------------------------------------------------------------------------+
;|
ENCABEZADO
|
;+--------------------------------------------------------------------------------------+
LIST
p = 16F84
;Usar el PIC16F84A-04/P
RADIX
HEX T
;Todo en hexadecimal
;+--------------------------------------------------------------------------------------+
;|
VARIABLES
|
;+--------------------------------------------------------------------------------------+
w
equ
0
;Cuando d=0 el destino es w
f
T
equ
1
;Cuando d=1 el destino es f
PUERTOB Tequ
0x06 T
;Direccin del Puerto B
PUERTOA equ
0x05
ESTADO
equ
0x03 T
;Direccin del Estado
PCL T
equ
0x02 T
;Direccin de PCL
Aux1
equ
0x0C T
;Direcciones de ocupados para
Aux2
equ
0x0D
;la subrutina de retardo
Aux3
equ
0x0E
cuenta
equ
0x20 T
;Direccin del registro que lleva el conteo
;+--------------------------------------------------------------------------------------+
;|
CONFIGURACIN DEL PUERTO B COMO SALIDA T
|
;+--------------------------------------------------------------------------------------+
ORG T
0x00 T
;Direccin de inicio

T
T

BSF
ESTADO,5 T;Pasarse al Banco 1
CLRF
PUERTOB ;Establecer el Puerto B como de salida
CLRF
PUERTOA
T
BCF
ESTADO,5 T;Volver al banco 0
;+--------------------------------------------------------------------------------------+
;|
PROGRAMA PRINCIPAL
|
;+----------------------------------------------.---------------------------------------+
BSF T
PUERTOA,0 ;Activar el display 1
Ciclo1
Ciclo2

CLRF
cuenta
;Inicializar el contador
MOVF
cuenta,w
;Pasar a W el contenido de contador
CALL
abla
;Llamar a la tabla dependiendo de W
MOVWF
PUERTOB ;Mandar al Puerto B el valor obtenido
T
CALL
Retardo
T;Llamar la subrutina de retardo
T
INCF
cuenta,f
;Incrementar al contador
MOVLW
0x0A
;Mover b'1010' a W
T
XORWF
cuenta,w
;Hacer ope XOR cuenta con W
T
B FSS
ESTADO,2 T;El contador es igual a 10?
T
GOTO
Ciclo2
;No, seguir con el conteo
T
GOTO
Ciclo1
;Si, ir a inicilizar el contador
;+--------------------------------------------------------------------------------------+
;|
RUTINA DE RETARDO
|
;+--------------------------------------------------------------------------------------+
Retardo
MOVLW T0x0D
;14
T
MOVWF
Aux1
Uno T
MOVLW
0x48 T
;72
T
MOVWF
Aux2
Dos
MOVLW
0x7A
;0xF7
;247
T
MOVWF
Aux3
res
CLRWDT
;Limpiar el reloj del Perro guardian
DECFSZ
Aux3,f
;Decrementar Aux3 -> Aux3-1
T
GOTO
res
T
DECFSZ
Aux2,f
;Decrementar Aux2 -> Aux2-1
T
GOTO
Dos
DECFSZ
Aux1,f
;Decrementar Aux1 -> Aux1-1
GOTO
Uno
T
GOTO
Sig
Sig
CLRWDT
;Limpiar el reloj del Perro guardian
T
RETURN
;+--------------------------------------------------------------------------------------+
;|
ABLA DE LOS DGITOS (0-9) T
;+--------------------------------------------------------------------------------------+
;B'gfedcba'
abla
ADDWF
PCL,f
RETLW
B'00111111' T; 0
RETLW
B'00000110' T; 1
RETLW
B'01011011' T; 2
RETLW
B'01001111' T; 3

RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
END T

B'01100110' T; 4
B'01101101' T; 5
B'01111100' T; 6
B'00000111' T; 7
B'01111111' T; 8
B'01100111' T; 9
;Fin del programa

Das könnte Ihnen auch gefallen