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)
Introducción general a un microcontrolador PIC16F877
Objetivo
•Emplearlospuertosparalelosquecontieneunmicrocontroladorpararealizarfuncionesdecontrol,configurando
estoscomoentradaysalida.
Desarrollo
Paracadaunodelossiguientesejercicios,realizarlosprogramassolicitadosycomprobarelfuncionamientodeellos.
1.EmpleandodospuertosparalelosdelmicrocontroladorPIC,unodeellosconfiguradocomoentradayel
otrocomosalida;realizarunprogramaquedeacuerdoalvalordelbitmenossignificativodelpuertoA,se
generelaacciónindicadaenelpuertoB.
1
Puertos paralelos II (Control de acciones)
processor16f877
include<p16f877.inc>
org0
gotoBEGIN
org5
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
ValorPA0 Acción puertoB
0 0000 0000
1 1111 1111
Tabla 3.1 Control de salidas controladas por un bit
2.Realizarunprograma,elcuálrealicelassiguientesaccionesdecontrol,paralocuálrequieretrabajarun
puertodeentradayotropuertodesalida,usarlossugeridosenelejercicioanterior;generarretardosde½
segundoenlassecuenciasquelorequieran.
2
Puertos paralelos II (Control de acciones)
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 Todoslosledsapagados 0000 0000
$01 Todoslosledsencendidos 1111 1111
$02 Corrimientodelbitmássignificativo
hacialaderecha
1000 0000
0100 0000
0010 0000
.. . . . . . .
0000 0001
$03 Corrimientodelbitmenossignificativo
hacialaizquierda
0000 0001
00000010
0000 0100
. . . . . . . .
1000 0000
$04 Corrimientodelbitmássignificativo
hacialaderechayalaizquierda
1000 0000
0100 0000
. . . . . . . .
0000 0001
0000 0010
. . . . . . . .
1000 0000
$05 Apagaryencendertodoslosbits 0000 0000
1111 1111
3
Puertos paralelos II (Control de acciones)
processor16f877
include<p16f877.inc>
; Variables para el DELAY
valor1equh'21'
valor2equh'22'
valor3equh'23'
cte1 equ20h
cte2 equ50h
cte3 equ60h
; Definición de variables a utilizar para
; comparar las entradas a través del puerto A
v0 equh'24'
v1equh'25'
v2equh'26'
v3equh'27'
v4equh'29'
v5equh'30'
c0equ0h
c1equ1h
c2equ2h
c3equ3h
c4equ4h
c5equ5h
org0
gotoBEGIN
org5
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, entonvesv0 != 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
4
Puertos paralelos II (Control de acciones)
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
Conclusiones
LasentradasysalidasdelospuertossonconfiguradasusandolosregistrosTrisAyTrisB,enelcual1equivaleaentraday
0asalida.Paralaentradaqueutilizauninterruptor,podemosutilizarlibrementecualquierpin,exceptolosquetienen
etiquetasAN.EstospinesanalógicosqueincluyentodoslospinesPORTAyPORTEestándiseñadosparalaconversiónde
analógicoadigitalynecesitanunpocodecódigoadicionalparahacerlosdigitales.Paraconvertirestospinesanalógicosa
digitales,debemosescribir0x07o0x06enelregistroADCON1.
5
Puertos Paralelos II (Control de acciones)
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 ; Loopque 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