CUENCAS HIDROGRAFICAS CARACTERIZACION GEOMORFOLOGIAS DE LA CUENTA
Laboratorio de Microcomputadoras - Práctica 03
1. Laboratorio de Microcomputaoras
Facultad de
Ingeniería
Práctica 03
Ortiz Gómez Cristian
Teoría: Grupo 1
Sánchez Segovia Diego Armando
Teoría: Grupo 3
Puertos Paralelos II
(Control de acciones)
2. Introducción general a un microcontrolador PIC16F877
Objetivo
• Emplear los puertos paralelos que contiene un microcontrolador para realizar funciones de control, configurando
estos como entrada y salida.
Desarrollo
Para cada uno de los siguientes ejercicios, realizar los programas solicitados y comprobar el funcionamiento de ellos.
1. Empleando dos puertos paralelos del microcontrolador PIC, uno de ellos configurado como entrada y el
otro como salida; realizar un programa que de acuerdo al valor del bit menos significativo del puerto A, se
genere la acción indicada en el puerto B.
1
PuertosparalelosII(Controldeacciones)
processor 16f877
include <p16f877.inc>
org 0
goto BEGIN
org 5
BEGIN
clrf PORTA
bsf STATUS, RP0 ; Cambio al Banco 1
bcf STATUS, RP1
movlw 0
movwf TRISB ; Configura Puerto B como salida
clrf PORTB ; Limpia los bits de Puerto B
movlw 06h ; Configura puertos A y E como digitales
movwf ADCON1
movlw 3Fh ; Configura el Puerto A como entrada
movwf TRISA
bcf STATUS, RP0 ; Regresa al Banco 0
LOOP
btfsc PORTA ; Verifica la entrada a través del Puerto A
goto ON
goto OFF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Valor PA0 Acción puerto B
0 0000 0000
1 1111 1111
Tabla 3.1 Control de salidas controladas por un bit
3. 2. Realizar un programa, el cuál realice las siguientes acciones de control, para lo cuál requiere trabajar un
puerto de entrada y otro puerto de salida, usar los sugeridos en el ejercicio anterior; generar retardos de ½
segundo en las secuencias que lo requieran.
2
PuertosparalelosII(Controldeacciones)
ON
movlw h’FF’ ; Enciende todos los bits del Puerto B
movwf PORTB
goto LOOP
OFF
clrf PORTB ; Apaga todos los bits del Puerto B
goto LOOP
END
25
26
27
28
29
30
31
32
33
34
35
Tabla 3.2 Control de salidas completo
DATO ACCIÓN EJECUCIÓN
$00 Todos los leds apagados 0000 0000
$01 Todos los leds encendidos 1111 1111
$02 Corrimiento del bit más significativo
hacia la derecha
1000 0000
0100 0000
0010 0000
. . . . . . . .
0000 0001
$03 Corrimiento del bit menos significativo
hacia la izquierda
0000 0001
0000 0010
0000 0100
. . . . . . . .
1000 0000
$04 Corrimiento del bit más significativo
hacia la derecha y a la izquierda
1000 0000
0100 0000
. . . . . . . .
0000 0001
0000 0010
. . . . . . . .
1000 0000
$05 Apagar y encender todos los bits 0000 0000
1111 1111
4. 3
PuertosparalelosII(Controldeacciones)
processor 16f877
include <p16f877.inc>
; Variables para el DELAY
valor1 equ h'21'
valor2 equ h'22'
valor3 equ h'23'
cte1 equ 20h
cte2 equ 50h
cte3 equ 60h
; Definición de variables a utilizar para
; comparar las entradas a través del puerto A
v0 equ h'24'
v1 equ h'25'
v2 equ h'26'
v3 equ h'27'
v4 equ h'29'
v5 equ h'30'
c0 equ 0h
c1 equ 1h
c2 equ 2h
c3 equ 3h
c4 equ 4h
c5 equ 5h
org 0
goto BEGIN
org 5
BEGIN
clrf PORTA
bsf STATUS, RP0 ; Cambio al Banco 1
bcf STATUS, RP1
movlw 0
movwf TRISB ; Configura Puerto B como salida
clrf PORTB ; Limpia los bits de Puerto B
movlw 06h ; Configura puertos A y E como digitales
movwf ADCON1
movlw 3Fh ; Configura el Puerto A como entrada
movwf TRISA
bcf STATUS, RP0 ; Regresa al Banco 0
LOOP
movlw c0
movwf v0
movfw PORTA ; Mueve lo que hay en PORTA a W
xorwf v0, W ; Verifica si la entrada es $00 (b0000)
btfsc STATUS, Z ; Z == 0?
goto OFF ; NO, entonces v0 == W
; SI, entonves v0 != W
movlw c1
movwf v1
movfw PORTA
xorwf v1, W
btfsc STATUS, Z ; Verifica si la entrada es $01 (b0001)
goto ON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
5. 4
PuertosparalelosII(Controldeacciones)
movlw c2
movwf v2
movfw PORTA
xorwf v2, W
btfsc STATUS, Z ; Verifica si la entrada es $02 (b0010)
goto RIGHT
movlw c3
movwf v3
movfw PORTA
xorwf v3, W
btfsc STATUS, Z ; Verifica si la entrada es $03 (b0011)
goto LEFT
movlw c4
movwf v4
movfw PORTA
xorwf v4, W
btfsc STATUS, Z ; Verifica si la entrada es $04 (b0100)
goto RL
movlw c5
movwf v5
movfw PORTA
xorwf v5, W
btfsc STATUS, Z ; Verifica si la entrada es $05 (b0101)
goto ONOFF
OFF ; Apaga los bits del puerto B
movlw 0
movwf PORTB
goto LOOP
ON ; Enciende los bits del puerto B
movlw h'FF'
movwf PORTB
goto LOOP
RIGHT ; Corrimiento a la derecha
movlw h'80'
movwf PORTB
call DELAY
R1
rrf PORTB, 1
call DELAY
btfss PORTB, 0
goto R1
goto LOOP
LEFT ; Corrimiento a la izquierda
movlw 1
movwf PORTB
call DELAY
L1
rlf PORTB, 1
call DELAY
btfss PORTB, 7
goto L1
goto LOOP
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
6. Conclusiones
Las entradas y salidas de los puertos son configuradas usando los registros TrisA y TrisB, en el cual 1 equivale a entrada y
0 a salida. Para la entrada que utiliza un interruptor, podemos utilizar libremente cualquier pin, excepto los que tienen
etiquetas AN. Estos pines analógicos que incluyen todos los pines PORTA y PORTE están diseñados para la conversión de
analógico a digital y necesitan un poco de código adicional para hacerlos digitales. Para convertir estos pines analógicos a
digitales, debemos escribir 0x07 o 0x06 en el registro ADCON1.
5
PuertosParalelosII(Controldeacciones)
RL ; Realiza corrimiento a la derecha
movlw h'80' ; y luego a la izquierda
movwf PORTB
call DELAY
R2
rrf PORTB, 1
call DELAY
btfss PORTB, 0
goto R2
movlw 1
movwf PORTB
call DELAY
L2
rlf PORTB, 1
call DELAY
btfss PORTB, 7
goto L2
goto LOOP
ONOFF ; Loop que enciende y apaga los
movlw 0 ; bits del puerto B
movwf PORTB
call DELAY
movlw h'FF'
movwf PORTB
call DELAY
goto LOOP
DELAY ; Rutina que genera un RETARDO
movlw cte1
movwf valor1
three
movwf cte2
movwf valor2
two
movlw cte3
movwf valor3
one
decfsz valor3
goto one
decfsz valor2
goto two
decfsz valor1
goto three
return
END
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105