Anda di halaman 1dari 8

ESCUELA SUPERIOR POLITCNICA DEL LITO

Facultad de Ingeniera en Electricidad y Computacin

Proyecto Parcial
Laboratorio de Microcontroladores

Integrantes
Alexander Edward Merejildo Tomal

Paralelo
8

2013-2do
Trmino

#Matrcula 201020500

1. Enunciado del proyecto


Implementar un contador BCD de dos dgitos en el PORTC que
incrementa su valor con la interrupcin externa (conectar tecla
en patita RB0). El contador avanza desde 00 hasta su valor
mximo 99. Se crear una variable dentro del programa, que
comparar su valor con el del contador, y dependiendo de ello
ocurrir lo siguiente:
Se tendr un banco de 8 LEDs de los cuales
Contador<Variable: Parpadean los 4 primeros LEDs.
Contador = Variable: Parpadean los 8 LEDs
Contador>Variable: Parpadean los 4 ltimos LEDs
2. Diagrama de Bloques
3.

Dia
gra
ma
de

Flujo funcional del Programa principal y de las subrutinas


Programa Principal

4. Descripcin del algoritmo o estrategia utilizada.


1. Configuracin de parmetros del dispositivo
2. Seleccin de los puertos A, C, D como salidas digitales y el
pin Rbo como entrada digita.
3. Se inicializa la variable comp con el valor 23(este valor
puede ser cambiado para realizar una diferente
comparacin).
4. Mientras no se realice una interrupcin los leds y los display
permanecern pagados
5. Si Z=1 llamara a la subrutina aigualb, caso contrario
preguntara por el bit C del registro estatus.
6. Si C=1 llamara a la subrutina amayorb, caso contrario
llamar a la subrutina amenorb
7. Cuando se halla efectuado Rb0 halla cambiado de estado se
llamara a la subrutina interrupcion
5. Listado del programa fuente en lenguaje ensamblador
;*********************************************************************
;
NOMBRE:
project_1er_parc_microcon.asm
;
FECHA:
10/12/2013
;
VERSION:
1.00
;
PROGRAMADOR:
Alexander Merejildo
;*********************************************************************
;
DESCRIPCION:
;Implementar un contador BCD de dos dgitos en el PORTC que incrementa
su valor con la ;interrupcin externa (conectar tecla en patita RB0). El
contador avanza desde 00 hasta su ;valor mximo 99. Se crear una
variable dentro del programa, que comparar su valor con el ;del
contador, y dependiendo de ello ocurrir lo siguiente:
;Se tendr un banco de 8 LEDs de los cuales
;Contador<Variable: Parpadean los 4 primeros LEDs.
;Contador = Variable: Parpadean los 8 LEDs
;Contador>Variable: Parpadean los 4 ltimos LEDs.
;*********************************************************************
;DIRECTIVAS

LIST
INCLUDE

p=16F887
P16F887.INC

;Tipo de microcontrolador
;Define los SFRs y bits del P16F887

__CONFIG _CONFIG1, _CP_OFF&_WDT_OFF&_INTRC_OSC_NOCLKOUT


errorlevel
-302
;Deshabilita mensajes de
;advertencia por cambio bancos
CBLOCK 0X020
unidades
uni_cod
decenas
dec_cod
contador
counter
comp
contb
ENDC
;**********************************************************
;PROGRAMA
ORG
0x00
;Vector de RESET
GOTO
MAIN
ORG
0x04
;Vector de interrupcin
GOTO
Interrupcion ;Va a rutina de interrupcin

Interrupcion
dig1
movf
call
movwf
movf
movwf
dig2
movf
call
movwf
movf
movwf

unidades,w
tabla
uni_cod
uni_cod,w
PORTC
decenas,w
tabla
dec_cod
dec_cod,w
PORTD

dec
btfss
goto
INCF
incf
movlw
subwf
btfss
goto
clrf
incf
movlw
subwf
btfss
goto
clrf
clrf

INTCON,1
cl
unidades,f
contador,f
.10
unidades,w
STATUS,2
cl
unidades
decenas,f
.10
decenas,w
STATUS,2
cl
decenas
contador

cl
bcf INTCON,1
retfie
MAIN
banksel
bcf
bcf
bcf
bsf

OSCCON
OSCCON,6
OSCCON,5
OSCCON,4
OSCCON,0

;SETEO DE PUERTOS
BANKSEL
CLRF
CLRF
BANKSEL
BANKSEL
clrf
bsf
CLRF
CLRF
;INICIALIZACION
BANKSEL
CLRF
CLRF
CLRF
clrf
clrf
clrf
clrf
clrf
movlw
movwf
clrw
incf

; Selects internal oscillator LFINTOSC with


; the frequency of 31KHz
; Microcontroller uses internal oscillator

ANSEL
ANSEL
ANSELH
TRISC
TRISA
TRISA
TRISB,0
TRISC
TRISD

;Selecciona el Bank3

PORTC
PORTC
PORTD
PORTA
unidades
decenas
contador
counter
contb
.23
comp

;Selecciona el Bank0
;Borra latch de salida de PORTA
;Borra latch de salida de PORTC

comp,f

;Selecciona el Bank1

;PORTA configurado como salida


;PORTC configurado como salida

;PROGRAMACION DE INTERRUPCION
movlw b'10010000'
movwf INTCON
;Activa la interrupcin del externa
Loop
Nop
movf
contador,w
subwf
contb,w
btfsc
STATUS,C
GOTO Loop
movf
contador,w
subwf
comp,0
btfsc
STATUS,Z
goto
aigualb
btfsc
STATUS,C
goto
amayorb
goto
amenorb
goto Loop
aigualb
movlw
B'11111111' ;
movwf
PORTA
; Number is moved to PORTB
movlw
h'FF'
; Number hFF is moved to W
movwf
counter
; Number is moved to variable "counter"
call
retardo
movlw
B'00000000' ;
movwf
PORTA
; Number is moved to PORTB
movlw
h'FF'
; Number hFF is moved to W
movwf
counter
; Number is moved to variable "counter"
call
retardo
clrf
PORTA
goto Loop
amayorb
movlw
B'00001111'
movwf
PORTA
; Number is moved to PORTB
movlw
h'FF'
; Number hFF is moved to W
movwf
counter
; Number is moved to variable "counter"
call
retardo
movlw B'00000000' ; Binary number 10101010 is moved to W
movwf PORTA
; Number is moved to PORTB
movlw h'FF'
; Number hFF is moved to W
movwf counter
; Number is moved to variable "counter"
call
retardo
clrf
PORTA
goto Loop
amenorb
movlw
B'11110000' ; Binary number 01010101 is written to W
movwf
PORTA
; Number is moved to PORTB
movlw
h'FF'
; Number hFF is moved to W
movwf
counter
; Number is moved to variable "counter"
call
retardo
movlw
B'00000000' ;
movwf
PORTA
movlw
h'FF'
movwf
counter
call
retardo
clrf
PORTA
goto Loop
retardo
decfsz
counter
goto
retardo
return

Binary number 10101010 is moved to W


; Number is moved to PORTB
; Number hFF is moved to W
; Number is moved to variable "counter"

; Variable "counter1" is decremented by 1


; remains in loop retardo

;
TABLA
CONVERSION---------------------------------------------------------

DE

tabla
ADDWF

PCL,F

RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
END

0x3F
0x06
0x5B
0x4F
0x66
0x6D
0x7D
0x07
0x7F
0x67

;
;
;
;
;
;
;
;
;
;
;
;
;
;

PCL + W -> PCL


El PCL se incrementa con el
valor de W proporcionando un
salto
Retorna con el cdigo del 0
Retorna con el cdigo del 1
Retorna con el cdigo del 2
Retorna con el cdigo del 3
Retorna con el cdigo del 4
Retorna con el cdigo del 5
Retorna con el cdigo del 6
Retorna con el cdigo del 7
Retorna con el cdigo del 8
Retorna con el cdigo del 9

; Fin del programa fuente

6. Copia impresa del circuito armado en PROTEUS

U1
U2
U3
U4

D7

D6

D5

D4

a0

a2

a3

a4

a1

D8

D3

D2

LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED

d0
d1
d2
d3
d4
d5
d6
d7

D1

LED-RED

LED-RED

R9

R6

R7

RC

R5

R4

RB

RA

300R

300R

300R

300R

300R

100R

300R

100R

a2

300R

19
20
21
22
27
28
29
30

a3

R8
R1
R2
R3

c0
c1
c2
c3
c4
c5
c6
c7

a4

33
34
35
36
37
38
39
40

15
16
17
18
23
24
25
26

a5

RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RA0/AN0/ULPWU/C12IN0RC2/P1A/CCP1
RA1/AN1/C12IN1RC3/SCK/SCL
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
RA3/AN3/VREF+/C1IN+
RC5/SDO
RA4/T0CKI/C1OUT
RC6/TX/CK
RA5/AN4/SS/C2OUT
RC7/RX/DT
RA6/OSC2/CLKOUT
RA7/OSC1/CLKIN
RD0
RD1
RB0/AN12/INT
RD2
RB1/AN10/C12IN3RD3
RB2/AN8
RD4
RB3/AN9/PGM/C12IN2RD5/P1B
RB4/AN11
RD6/P1C
RB5/AN13/T1G
RD7/P1D
RB6/ICSPCLK
RB7/ICSPDAT
RE0/AN5
RE1/AN6
RE2/AN7

a6

RE3/MCLR/VPP

2
3
4
5
6
7
14
13

a7

1
a0
a1
a2
a3
a4
a5
a6
a7

8
9
10

PIC16F887

d0
d1
d2
d3
d4
d5
d6

c0
c1
c2
c3
c4
c5
c6

R8
R1
R2
R3
300R

33
34
35
36
37
38
39
40

c0
c1
c2
c3
c4
c5
c6
c7

19
20
21
22
27
28
29
30

d0
d1
d2
d3
d4
d5
d6
d7

8
9
10

PIC16F887

d0
d1
d2
d3
d4
d5
d6

c0
c1
c2
c3
c4
c5
c6

D8

D7

D6

D5

D4

a0

15
16
17
18
23
24
25
26

a5

RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RA0/AN0/ULPW U/C12IN0RC2/P1A/CCP1
RA1/AN1/C12IN1RC3/SCK/SCL
RA2/AN2/VREF-/CVREF/C2IN+
RC4/SDI/SDA
RA3/AN3/VREF+/C1IN+
RC5/SDO
RA4/T0CKI/C1OUT
RC6/TX/CK
RA5/AN4/SS/C2OUT
RC7/RX/DT
RA6/OSC2/CLKOUT
RA7/OSC1/CLKIN
RD0
RD1
RB0/AN12/INT
RD2
RB1/AN10/C12IN3RD3
RB2/AN8
RD4
RB3/AN9/PGM/C12IN2RD5/P1B
RB4/AN11
RD6/P1C
RB5/AN13/T1G
RD7/P1D
RB6/ICSPCLK
RB7/ICSPDAT
RE0/AN5
RE1/AN6
RE2/AN7

a6

RE3/MCLR/VPP

a7

2
3
4
5
6
7
14
13

a1

U1
U2
U3
U4
1
a0
a1
a2
a3
a4
a5
a6
a7

D3

LED-RED LED-RED LED-RED LED-RED LED-RED LED-RED

D2

D1

LED-RED

LED-RED

R9

R6

R7

RC

R5

R4

RB

RA

300R

300R

300R

300R

300R

100R

300R

100R

7. Conclusiones
1. Se utiliz los cambios de estado en RB0 para realizar
interrupciones
en
el
programa
principal
del
microcontrolador.
2. No es posible utilizar la tcnica de multiplexacin ya que
el contador estaba controlado por el usuario y los dos
display iban estar variando de encendido y apagado por
lo que no daba buena presentacin.
3. Las interrupciones externas son muy importates para
atender eventos externos en tiempo real. Cuando la lnea
RB0 se hace una peticin de interrupcin el bit INF del
registro INTCON se pone en 1 de forma automtica.
8. Recomendaciones
1. Fue necesario aadir en la configuracin del dispositivo lo
siguiente _INTRC_OSC_NOCLKOUT para que los pines RA6 y RA7
funcionen correctamente ya que por defecto estn
configurados como entradas para el uso de un oscilador
externo.
2. El
programa de atencin a la interrupcin antes de
regresar al programa principal debe borrar la bandera
INTF, puesto que en caso contrario al ejecutar la
instruccin de retorno de interrupcin RETFIE se volver a
desarrollar el mismo proceso de interrupcin.