Documentos de Académico
Documentos de Profesional
Documentos de Cultura
JDM
+
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
JDM
ORG 00h
goto INICIO
ORG 05h
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
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
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
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
UG
JDM