Beruflich Dokumente
Kultur Dokumente
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
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
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
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
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
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
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
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
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
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
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
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
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
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
;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
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
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
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
;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
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
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
;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
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