Está en la página 1de 6

UG

Arquitectura de Microprocesadores y Microcontroladores

JDM

Esquemtico para la prctica12

+
R12
10k

U1

R2

R3

R4

10k

10k

10k

8
R5 9
10k 10
1

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

15 10
16 9
17 8
18 7
23 6
24 5
25 4
26 3
2
19 1
20
21
22
27
28
29
30

8
7
6
5
4
3
2
1

U2

9
10
11
12
13
14
15
16
ON

2
3
4
5
6
7

OSC1/CLKIN
OSC2/CLKOUT

DSW1
33
34
35
36
37
38
39
40

11
12
13
14
15
16
17
18
19
20

OFF

13
14

9
8
7
6
5
4
3
2
1
RESPACK-8

PIC16F877A

Materiales
4 Push button normalmente abierto
12 Resistencias de 10K
1 DipSwitch o 2 pequeos de 4 para nibble alto y bajo
8 Resistencias de 330 para los leds
P.D: Conectar los pines de alimentacin conforme indique el datasheet de PIC16F877A
Nota:
Suma
R = OP2+OP1
Resta
R=OP2-OP1
Multiplicacin
for (Aux = OP1; Aux >= 0; Aux--)
R += OP2
Divisin
R = -1
Aux = OP2
do{
R++
}while( (Aux-OP1) >= 0)

UG

Arquitectura de Microprocesadores y Microcontroladores

JDM

Cdigo para la prctica 12


; Escuela: DCI UG
; Nombre: Yo
; Programa: Practica12_Calculator_Code.asm
; Fecha: Hoy
; Version: V1.0
; Descripcion: El programa realiza las funciones de una calculadora basica
;
de 4 bits. El primer y segundo operando son los nibbles bajo y alto
;
del PORTB. El nibble bajo del PORTA es para seleccionar la operacion
;
a realizar (suma, resta, multiplicacion y division).
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC ; Palabra de configuracion
LIST P=16F877A
INCLUDE <P16F877A.INC>
RADIX DEC
CBLOCK 020h
OPER1
OPER2
RESULT
AUX
K
ENDC

; Variable para el retardo

ORG 00h
goto INICIO

; Se posiciona en la direccion 00h, Vector de reset


; Salta a la etiqueta INICIO

ORG 05h

; Se posiciona en la direccion 05h, memoria de programa

bsf STATUS,RP0
bcf STATUS,RP1
movlw b'00001111'
movwf TRISA
movlw b'11111111'

; Acceso al banco 1
; Acceso al banco 1
; RA3...RA0 Entrada
; Configura el puerto A
; RB7...RB0 Entrada

INICIO:

UG

Arquitectura de Microprocesadores y Microcontroladores

movwf TRISB
clrf TRISC
movlw b'00000110'
movwf ADCON1
bcf OPTION_REG,7
bcf STATUS,RP0
bcf STATUS,RP1
clrf PORTA
clrf PORTB
clrf PORTC
clrf OPER1
clrf OPER2
clrf RESULT
clrf AUX

JDM

; Configura el puerto B
; Configura el puerto C como salida
; Configura entrada digital
; Activa las resistencias de Pull-up
; Acceso al banco 0
; Acceso al banco 0
; Limpia el puerto A
; Limpia el puerto B
; Limpia el puerto C

PRINCIPAL:
movf PORTB,W
andlw 0Fh
movwf OPER2
movf PORTB,W
andlw 0F0h
movwf OPER1
swapf OPER1,F
; Boton suma
btfss PORTA,0
goto RESTA
S1:
call RETARDO
btfsc PORTA,0
goto S1
;SUMAR
clrf RESULT
movf OPER1,W
addwf OPER2,W

; Cambio de nibble
; Verifica si RA0 == 1
; Si no es 1
; Si es 1
; Llama retardo
; Verifica si RA0 == 0, Anti-rebote
; Si es 1

UG

Arquitectura de Microprocesadores y Microcontroladores

JDM

movwf RESULT
goto MOSTRAR
RESTA:
; Boton resta
btfss PORTA,1
goto MULTIPLICA
R1:
call RETARDO
btfsc PORTA,1
goto R1
;RESTAR
clrf RESULT
movf OPER1,W
subwf OPER2,W
movwf RESULT
goto MOSTRAR

; Verifica si RA1 == 1
; Si no es 1
; Si es 1
; Llama retardo
; Verifica si RA1 == 0, Anti-rebote
; Si es 1

MULTIPLICA:
; Boton multiplica
btfss PORTA,2
goto DIVIDIR
M1:
call RETARDO
btfsc PORTA,2
goto M1
;MULTIPLICAR
clrf RESULT
clrf AUX
movf OPER1,W
movwf AUX

; Verifica si RA2 == 1
; Si no es 1
; Si es 1
; Llama retardo
; Verifica si RA2 == 0, Anti-rebote
; Si es 1

MULTI:
movf OPER2,W
addwf RESULT,F

UG

Arquitectura de Microprocesadores y Microcontroladores

JDM

decfsz AUX,F
goto MULTI
goto MOSTRAR
DIVIDIR:
; Boton divide
btfss PORTA,3
goto MOSTRAR
D1:
call RETARDO
btfsc PORTA,3
goto D1
;DIVIDIR
movlw 255
movwf RESULT
clrf AUX
movf OPER2,W
movwf AUX

; Verifica si RA3 == 1
; Si no es 1
; Si es 1
; Llama retardo
; Verifica si RA3 == 0, Anti-rebote
; Si es 1

bcf STATUS,C
DIVID:
incf RESULT,F
movf OPER1,W
subwf AUX,F
btfsc STATUS,C
goto DIVID
MOSTRAR:
movf RESULT,W
movwf PORTC
goto PRINCIPAL

; Salta a etiqueta PRINCIPAL

UG

Arquitectura de Microprocesadores y Microcontroladores

;-------------- Sub-rutinas -------------RETARDO


movlw 249
movwf K
CICLO1: nop
decfsz K,F
goto CICLO1
return
;---------------------------------------END

JDM

; Llamada call aporta 2 ciclos maquina (cm)


; Aporta 1 cm. K
; Aporta 1 cm
; Aporta K*1 cm
; (k-1)*1 cm cuando no salta + 2 cuando salta
; Aporta (k-1)*2 cm
; Aporta 2 cm
; Fin del programa

También podría gustarte