Universidad Politécnica de Chiapas
Materia:
Microcontroladores
Tema:
Practica 1 Sumador de 4 Bits
Catedrático:
Ing. José Luis López
Alumna:
Fátima Daniela González Mateo
No. de Control
093187
Tuxtla Gutiérrez, Chiapas 01 de Junio del
d el 2011
Contenido
Objetivos generales ........................................................................................................................ 3
Introducción................................................................................................................................... 4
Practica 1 Sumador de cuatro bits .................................................................................................. 5
Objetivo de la práctica ................................................................................................................ 5
Desarrollo de la práctica ............................................................................................................. 5
Simulación.................................................................................................................................. 6
Materiales para simulación ..................................................................................................... 6
Programa ................................................................................................................................... 7
Descripción del Programa ....................................................................................................... 7
Practica 2 Sumador y Restador de cuatro bits............................
........................................................
............................ ........................ 9
Objetivo de la práctica ................................................................................................................ 9
Desarrollo de la práctica ............................................................................................................. 9
Simulación................................................................................................................................ 10
Materiales para simulación ................................................................................................... 10
Programa ................................................................................................................................. 11
Descripción del Programa ..................................................................................................... 12
Practica 3 Retardo de 100ms ........................................................................................................ 13
Objetivo de la práctica .............................................................................................................. 13
Desarrollo de la práctica ........................................................................................................... 13
Simulación................................................................................................................................ 14
Materiales para simulación ................................................................................................... 14
Programa ................................................................................................................................. 15
Descripción del Programa ..................................................................................................... 16
Practica 4 Rotación de Leds .......................................................................................................... 17
Objetivo de la práctica .............................................................................................................. 17
Desarrollo de la práctica ........................................................................................................... 17
Simulación................................................................................................................................ 18
Materiales para simulación ................................................................................................... 18
Programa ................................................................................................................................. 19
Descripción del Programa ..................................................................................................... 21
2
Objetivos generales
Con
las siguientes prácticas se pretende realizar distintas prácticas utilizando el
PIC16F877A, esto implica que se aprenda a programar en lenguaje ensamblador utilizando las
distintas instrucciones que dicho PIC nos proporciona.
Así como también realizar la simulación de nuestro circuito para poder cargar el programa
en él y de esta forma
forma hacer visual lo que estamos realizando en nuestro programa.
programa.
3
Introducción
A través de programas realizados en lenguaje ensamblador y simulaciones se realizó
cuatro distintas practicas con el objetivo de aprender a utilizar las distintas instrucciones básicas
que se le pueden ordenar a un microcontrolador en este caso para todas las practicas se utilizó el
PIC16F877A.
Para la realización de estas prácticas primeramente fue de suma importancia aprender a
realizar la configuración de los puertos I/O. Así como también, como podemos declarar nuestras
variables y el tipo de PIC a utilizar. Otro factor que es indispensable para realizar las practicas es
conocer lo que realiza y la sintaxis de cada una de las instrucciones.
Las prácticasque se realizó son las siguientes:
y
Realizar la suma de dos números de 4 bits.
y
Realizar la suma o la resta de dos números de 4 bits, indicando el tipo de operación a
través de un selector.
y
Realizar un retardo de un total de 100ms.
y
A través de un selector de 4 opciones, indicar el desplazamiento del encendido de un led
con un retardo de 500ms.
4
Practica
1 Sumador de cuatro bits
Objetivo de la práctica
Esta práctica pretende realizar la suma de dos números de cuatro bits, introducidos por el
usuario a través de dos dip-switch y teniendo como salida el encendido de leds con el resultado de
la operación. Los datos tanto de entrada como los de salidas
s alidas serán en el sistema binario, los cuales
serán procesados por el programa previamente cargado al microcontrolador.
Desarrollo de la práctica
La suma se realiza por medio de un programa cargado previamente al PIC en la simulación.
El programa cuenta de varias etapas las cuales son las siguientes:
y
Se indica el tipo de PIC a utilizar
y
Se indica el tipo de cristal a utilizar
y
Se desactiva un error que aparece en la compilación
y
Se realiza la declaración de variables a utilizar y en el número de registro donde queda
almacenada.
y
Se realiza la configuración de los puertos en este caso en puerto B se configura como
entrada y el puerto D como salida.
y
Finalmente se realiza el programa que realizara la operación.
5
Simulación
Materiales para simulación
y
1
PIC16F87A
y
2
Dip-Switch de cuatro entradas
y
6
Leds
y
1
Resistencia de 1k
DSW1
8
7
6
5
2
3
4
5
6
7
8
9
10
1
OSC1/CLKIN
OSC2/CLKOUT
ON
1
2
3
4
DIPSW_4
U1
13
14
O FF
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RC0/T1OSO/T1CKI
RE0/AN5/RD
RC1/T1OSI/CCP2
RE1/AN6/WR
RC2/CCP1
RE2/AN7/CS
RC3/SCK/SCL
RC4/SDI/SDA
MCLR/Vpp/THV
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
R1
33
34
35
1k
36
37
38
39
40
DSW2
8
7
6
5
15
16
17
18
23
24
25
26
O FF
ON
1
2
3
4
DIPSW_4
D6
19
20
21
22
27
28
29
30
LED-BLUE
D5
LED-BLUE
D4
PIC16F877A
LED-BLUE
D3
LED-BLUE
D2
LED-BLUE
D1
LED-BLUE
6
Programa
;--------------------------------------------------includep16f877a.inc"
CLRF
PORTD
list p=16f877a
CLRF
PORTB
INICIO MOVF
errorlevel 1,-302
PORTB,0
__Config _XT_OSC &_WDT_OFF
MOVWF
VAR1
;-----------------------------------------------------------
ANDLW
0x0F
VAR1
EQU 0x20
MOVWF
VAR2
VAR2
EQU 0x21
MOVF
VAR1,0
VAR3
EQU 0x22
ANDLW
0xF0
RESUL EQU 0x23
MOVWF
VAR3
;-----------------------------------------------------------
SWAPF
VAR3,0
BSF
STATUS,5
ADDWF
VAR2,0
MOVLW
MOVWF
MOVLW
0x06
ADCON1
0xFF
MOVWF
RESUL
MOVWF
PORTD
MOVWF
TRISB
CLRF
TRISD
BCF
STATUS,5
GOTO INICIO
;-----------------------------------------------------------
END
Descripción del Programa
Para que el programa realice las operación en este caso la suma, primeramente los datos
introducidos en el puerto B se mueven al registro w, los datos almacenados en registro w se
mueven a una primera variable en este caso VAR1, de dicha variable se realiza un and con los
nibles bajos del puerto B y se almacena en el registro w, el cual posteriormente se envía a una
tercera variable en este caso VAR2.
Se carga nuevamente VAR1 al registro w y se realiza un and pero ahora con los nibles altos
y se almacena en VAR3. Los datos almacenados en la VAR3 quedan almacenados entonces en el
nible alto del puerto B , lo cual no nos sirve si es que queremos sumar dos números de 4 bits, por
7
lo tanto, con la instrucción SWAPF se realiza un cambio de los datos de la VAR3 de un nibles
nibles alto a
un nible bajo y los datos se almacenan en w.
Finalmente se realiza la suma de VAR2 con w y el resultado de la operación se mueven al
puerto B para que así podamos observarlo a través de los leds.
8
Practica
2 Sumador
Sumador y Restador de cuatro bits
bits
Objetivo de la práctica
Esta práctica pretende realizar la suma
suma o la resta
de dos números
números de cuatro bits,
introducidos por el usuario a través de dos dip-switch y teniendo como salida el encendido de leds
con el resultado de la operación. Los datos tanto de entrada como los de salidas serán en el
sistema binario, los cuales serán procesados por el programa previamente cargado al
microcontrolador. Para seleccionar el tipo de operación que realizara el PI C, se le debe indicar a
través de un dip-switch, si la entrada es un 1 se realizara la suma; si la entrada es un 0 se realizara
la resta.
Desarrollo de la práctica
La suma o la resta se realizan por medio de un programa cargado previamente al PI C en la
simulación. El programa cuenta de varias etapas las cuales son las siguientes:
y
Se indica el tipo de PIC a utilizar
Se indica el tipo de cristal a utilizar
y
Se desactiva un error que aparece en la compilación
y
Se realiza la declaración de variables a utilizar y en el número de registro donde queda
y
almacenada.
y
Se realiza la configuración de los puertos en este caso en puertoA y B se configura como
entrada y el puerto D como salida.
y
Finalmente se realiza el programa que realizara la operación.
9
Simulación
Materiales para simulación
y
1
PIC16F87A
y
2
Dip-Switch de cuatro entradas
y
6
Leds
y
2
Resistencias (1k y 220)
y
1
Dip-Switch de dos entradas
DSW1
8
7
6
5
13
14
R2
220
4
3
DOSW3
O
©
©

2
DIPSW_2
OS 1/ LKI
£
£
£
£
RB 0/I


¥
¤
¤
OS 2/ LKO
1
2
3
4
5
6
7
1
RB1
R B2
0
RB3/PG
RA1/A 1
RB4
RA2/A 2/V RE / V RE
RB5
RA3/A 3/V RE
RB6/PGC
RA4/ 0 KI/ 1O
RB7/PGD
RA5/A 4/SS/ 2O
RC0 /T1OSO/T1 CKI
RE0/A 5/RD
RC1/ 1OSI/ CCP2
RE1/A 6/W R
RC2 / CCP1
RE2/A 7/ S
RC3/S CK/SCL
RC4/S DI/S DA
RC5/S DO
CL R/Vpp/THV
RC6/ TX/ CK
RC7/ RX/ DT
RA0/A

¦

£

¡

¡
¡
§
£
£
¤
¥

8
9
10
£

¤
¥

33
34
35
36
37
38
39
40
¤
¤

¦
©
©
O
1

2
3
4
DIPSW_4
1
¨
O
£
RD0 /PSP0
RD1/PSP1
RD2 /PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
15
16
17
18
23
24
25
26
R1
1k
DSW2
8
7
6
5
O
©
©
O
1

2
3
4
DIPSW_4
D6
19
20
21
LE D-BL E
22
D5
27

28
29
30
LE
D D-BL E
4

PIC16 877A
¡
LE D-BL E

D3
LE
D- BL E
D2

LE D-BL E
D1

LE D-BL E

10
Programa
include"p16f877a.inc"
GOTO SUMA
list p=16f877a
GOTO RESTA
errorlevel 1,-302
SUMA
__Config _XT_OSC &_WDT_OFF
;---------------------------------
MOVF
PORTB,0
MOVWF
VAR1
ANDLW
0x0F
VAR1
EQU 0x20
MOVWF
VAR2
VAR2
EQU 0x21
MOVF
VAR1,0
VAR3
EQU 0x22
ANDLW
0xF0
MOVWF
VAR3
RESUL EQU 0x23
SWAPF
;--------------------------------BSF
STATUS,5
ADDWF
VAR2,0
MOVLW
0x06
MOVWF
PORTD
MOVWF
ADCON1
GOTO
SELECC
MOVLW
0xFF
MOVF
PORTB,0
MOVWF
TRISB
MOVWF
VAR1
MOVLW
0xFF
ANDLW
0x0F
MOVWF
TRISA
MOVWF
VAR2
CLRF
TRISD
MOVF
VAR1,0
B CF
STATUS,5
ANDLW
0xF0
MOVWF
VAR3
RESTA
;---------------------------------------------CLRF
PORTD
SWAPF
VAR3,0
CLRF
PORTB
SUBWF
VAR2,0
CLRF
PORTA
MOVWF
PORTD
GOTO SELECC
SELECC
VAR3,0
BTFSC PORTA,0
END
11
Descripción del Programa
Para que el programa realice las operación en este caso la suma o la resta, primeramente
los datos introducidos en el puerto B se mueven al registro w, los datos almacenados en registro w
se mueven a una primera variable en este caso VAR1, de dicha variable se realiza un and con los
nibles bajos del puerto B y se almacena en el registro w, el cual posteriormente se envía a una
tercera variable en este caso VAR2.
Se carga nuevamente VAR1 al registro w y se realiza un and pero ahora con los nibles altos
y se almacena en VAR3. Los datos almacenados en la VAR3 quedan almacenados entonces en el
nible alto del puerto B , lo cual no nos sirve si es que queremos sumar dos números de 4 bits, por
lo tanto, con la instrucción SWAPF se realiza un cambio de los datos de la VAR3 de un nibles
nibles alto a
un nible bajo y los datos se almacenan en w.
Finalmente se realiza la operación correspondiente, si es suma se utiliza la instrucción
ADDWF la cual suma la VAR2 con w; si la operación a realizar es resta se utiliza la instrucción
SUBWF la cual resta VAR2 con w. El resultado de la operación se mueven al puerto B para que así
podamos observarlo a través de los leds.
12
Practica
3 Retardo de 100ms
Objetivo de la práctica
Esta práctica pretende realizar el encendido de un led con un retardo de 100ms, esto
quiere decir que el led permanecerá encendido 100ms y posteriormente se apagara otros 100ms.
para ello se realiza un programa principal en el cual se mandara a llamar el retardo.
Desarrollo de la práctica
El retardo a se realiza por medio de un programa cargado previamente al PIC en la
simulación. El programa cuenta de varias etapas las cuales son las siguientes:
y
Se indica el tipo de PIC a utilizar
y
Se indica el tipo de cristal a utilizar
y
Se desactiva un error que aparece en la compilación
y
Se realiza la declaración de variables a utilizar y en el número de registro donde queda
almacenada.
y
Se realiza la configuración del puerto D como salida.
y
Finalmente se realiza el programa en el cual será llamado el retardo de 100ms.
13
Simulación
Materiales para simulación
y
1
PIC16F87A
y
1
Led
y
1
Osciloscopio
1
13
14






1/ L IN
T
2/ L


RB1


2
3
4
5
6
7
RB0/INT


RB2
RA0/AN0
RB3/PG
PGM
M
RA1/AN1
RB4
RA2/AN2/ REF
REF--/



REF
RB5
RA3/AN3/ REF+
RB6/PG
PGC
C
I/ 1
T
/ 2 T
RA5/AN4/
RB7/PG
PGD
D

RA4/T0








1
RC0/T1OSO/T1CKI
RE0/AN5/RD
RE1/AN6/
R

RE2/AN7/

RC1/T1


I/CCP2
RC2/CCP1
RC3/ CK/ CL



RC4/SDI/SDA
MCLR/

pp/T V

A
B
C
D


8
9
10
33
34
35
36
37
38
39
40
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
15
16
17
18
23
24
25
26
19
20
21
22
27
28
29
30
D1
LED
ED--BL E

PIC16F877A
14
Programa
include"p16f877a.inc"
CLRW
list p=16f877a
MOVWF
TRISD
errorlevel 1,-302
CALL
RETARDO
__Config _XT_OSC &_WDT_OFF
GOTO
PROGRAMA
;-----------------------------------------------------------
;-----------------------------------------------------------
VAR1
EQU
0x20
RETARDO
VAR2
EQU
0x21
;-------------------------------------------------------
MOVLW
d'130'
MOVWF
VAR2
MOVLW
d'255'
BSF
STATUS,5
DEC2
MOVWF
VAR1
MOVLW
0x06
DEC1
DECFSZ
VAR1,1
MOVWF
ADCON1
GOTO
DEC1
MOVLW
0xFF
DECFSZ
VAR2,1
MOVWF
TRISB
GOTO
DEC2
CLRF
TRISD
MOVLW
d'52'
BCF
STATUS,5
MOVWF
VAR1
DECFSZ
VAR1,1
GOTO
DEC3
;----------------------------------------------------------CLRF
DEC3
PORTD
PROGRAMA
MOVLW
0x01
NOP
MOVWF
TRISD
RETURN
CALL
RETARDO
END
15
Descripción del Programa
En el programa principal se carga a w el valor de 1, posteriormente ese valor se manda al
puerto D donde se podrá observar por medio del encendido y apagado del led el retardo de
100ms. Enseguida, se manda a llamar a la subrutina en este caso etiquetada como RETARDO (todo
esto es para que el led se logre encender los 100ms). Finalmente se borra los datos cargados a w y
se vuelven a enviar a w, posteriormente se manda a llamar a la subrutina RETARDO (esto realiza el
apagado del led). Por medio de la instrucción GOTO se regresa
re gresa a PROGRAMA.
Para realizar la subrutina de retardo se realizó operaciones de tal forma que al correr el
programa el retardo dure exactamente 100ms. para ello fue indispensable utilizar tres variables en
este caso DEC1, DEC2 y DEC3, las cuales son utilizadas como contadores. También la instrucción
DECFSZ para ir decrementando nuestras variables.
16
Practica
4 Rotación de Leds
Objetivo de la práctica
Esta práctica pretende realizar el encendido ocho leds cada uno con un retardo de 500ms,
el encendido de los leds se llevara acabo de tal forma que al observarlos cada led va encendiendo
rotando uno a uno. Para ellos tenemos cuatro forma en cómo se hará la rotación de los leds, dicha
forma será introducida por el usuario a través de un se lector. Las cuatro formas son las siguientes:
y
No enciende ningún led.
y
Rotación de izquierda a derecha.
y
Rotación de derecha a izquierda.
y
Rotación de izquierda a derecha y de derecha a izquierda.
Desarrollo de la práctica
La rotación del encendidos de los leds se realiza por medio de un programa cargado
previamente al PIC en la simulación. El programa cuenta de varias etapas las cuales son las
siguientes:
y
Se indica el tipo de PIC a utilizar
y
Se indica el tipo de cristal a utilizar
y
Se desactiva un error que aparece en la compilación
y
Se realiza la declaración de variables a utilizar y en el número de registro donde queda
almacenada.
y
Se realiza la configuración del puerto B como entrada y el puerto D como salida.
y
Finalmente se realiza el programa en el cual se indica la forma en que se rotara el
encendido de los leds.
17
Simulación
Materiales para simulación
y
1
PIC16F87A
y
8
Leds
y
1
Dip-Switch de dos entradas
y
2
Resistencias (1k y 330)
U1
13
14
%
&
%
&
D
C1/CL IN
C2/CL UT
R 0/INT
R 1
R 2
R 3/
R 4
R 5
R 6/ C
$
)
%
$
)
)
2
3
4
5
6
7
R
R
R
R




0/
1/
2/
3/




N0
N1
N2/ R
N3/ R
!
0
)
(
1
)
"
!
-/C R
#
!
"
#
)
0
"
#
3
)
(
)
(
0
%

$
R 4/T0C I/C1 UT
R 7/ D
R 5/ N4/ /C2 UT
/T1C I
RC0/T1
I/CC 2
R 0/ N5/RD
RC1/T1
R 1/ N6/ R
RC2/CC 1
R 2/ N7/C
RC3/ C / CL
RC4/ DI/ D
CLR/ pp/TH
RC5/ D
RC6/TX/C
RC7/R /DT


&
&
&
%
$
"

"

"

%
&
(
'
(
&
&
&
$
&
&

1
&
1
!
%
!
$
2
RD0/
RD1/
RD2/
RD3/
RD4/
RD5/
RD6/
RD7/
&
(
(
&
(
(
&
(
(
&
(
(
&
(
(
&
(
(
(
(
33
34
35
36
37
38
39
40
4
3
DI
7
(
&
(
&
(
0
1
2
3
4
5
6
7
15
16
17
18
23
24
25
26
ON
8
9
R1
1
2
1
4
_2
D1
19
20
21
22
27
28
29
30
L D-R D
@
@
D2
L D-R D
@
@
D3
IC16 877
#
6
%
%
8
9
10
1
5
OFF

L D-R D
@
@
D4
L D-R D
@
@
D5
L D-R D
@
@
D6
L D-R D
@
@
D7
L D-R
D8
@
@
D
L D-R D
@
18
R2
330
@
Programa
include"p16f877a.inc"
BTFSC
PORTB,0
list p=16f877a
p=16f877a
GOTO
SELEC2
errorlevel 1,-302
GOTO
SELEC1
BTFSS
PORTB,1
;--------------------------;---------------------------------------------------------------------------------------
GOTO
SELEC
VAR1
EQU 0x20
GOTO
IZQUIERDA
VAR2
EQU 0x21
BTFSC
PORTB,1
VAR3
EQU 0x22
GOTO
IDDI
VAR4
EQU 0x24
GOTO
DERECHA
VAR5
EQU0x25
MOVLW
d'8'
CONT1
EQU0x26
MOVWF
CONT1
CONT2
EQU0x27
BCF
STATUS,0
MOVLW
d'1'
MOVWF
PORTD
CALL
RETARDO
RLF
PORTD,0
SELEC
__Config _XT_OSC &_WDT_OFF
SELEC1
SELEC2
DERECHA
;--------------------------;--------------------------------------------------------------------------------------DER
BSF
STATUS,5
MOVLW
0x06
MOVWF
ADCON1
DECFSZ
CONT1,1
MOVLW
0xFF
GOTO
DER
MOVWF
TRISB
GOTO
CLRF
TRISD
BCF
STATUS,5
IZQUIERDA
;--------------------------;---------------------------------------------------------------------------CLRF
PORTD
CLRF
PORTB
IZQ
MOVLW
d'8'
MOVWF
CONT1
C
MOVWF
ONT2
19
S
ELEC
MOVLW
d'8'
MOVWF
CONT1
BCF
STATUS,0
MOVLW
d'128'
MOVWF
PORTD
CALL
RETARDO
RRF
PORTD,0
DECFSZ
CONT1,1
IDDI
IZQ1
DER1
GOTO
IZQ
GOTO
SELEC
MOVLW
MOVWF
VAR3
MOVLW
d'5'
d'8'
MOVWF
VAR2
MOVWF
CONT1
MOVLW
d'248'
MOVWF
CONT2
DEC2
MOVWF
VAR1
BCF
STATUS,0
DEC1
NOP
MOVLW
d'128'
DECFSZ
VAR1,1
MOVWF
PORTD
GOTO
DEC1
CALL
RETARDO
DECFSZ
VAR2,1
RRF
PORTD,0
GOTO
DEC2
DECFSZ
CONT1,1
DECFSZ
VAR3,1
GOTO
IZQ1
GOTO
DEC3
BCF
STATUS,0
MOVLW
d'248'
MOVLW
d'1'
MOVWF
VAR4
MOVWF
PORTD
CALL
RETARDO
DECFSZ
VAR4
RLF
PORTD,0
GOTO
DEC4
DECFSZ
CONT2,1
DECFSZ
VAR5
GOTO
DER1
GOTO
INIC
GOTO
SELEC
NOP
DEC3
INIC
DEC4
NOP
NOP
RETARDO
MOVLW
d'2'
NOP
MOVWF
VAR5
NOP
MOVLW
d'247'
RETURN
MOVWF
VAR4
END
MOVLW
d'100'
20
Descripción del Programa
En el programa primero entra el selector el cual dependiendo la entrada del usuario va
mandarlo a cuatro subrutinas diferentes los cuales son:
00 No enciende ningún led
01 Rotación del encendido de los leds de derecha a izquierda
10 Rotación del encendido de los leds de izquierda a derecha
d erecha
11 Rotación de los leds de derecha a izquierda y de derecha a izquierda
En el programa se utilizan las instrucciones DECFSZ para decrementar las variables, RRF y
RLF para rotar los bits hacia la derecha y hacia la izquierda respectivamente, BTFSS y BTFSC para
hacer las condicionales del selector. Así como también se aplica un retardo de 500ms, el cual es el
tiempo de encendido del led antes de que rote y encienda el siguiente led
21