Está en la página 1de 7

C3

C2
C1

3
F1 A
1 2 3
F2 B
4 5 6

C2
F3 C
7 8 9
22pF
F4 D
0 #
X1 U1
CRYSTAL
C3 13 33
OSC1/CLKIN RB0/INT C1
14 34
OSC2/CLKOUT RB1 C2
35
RB2 C3
22pF 2 36
S0 RA0/AN0 RB3/PGM
3 37
S1 RA1/AN1 RB4 F1
4 38
RA2/AN2/VREF-/CVREF RB5 F2
5 39
RA3/AN3/VREF+ RB6/PGC F3
6 40
VCC RA4/T0CKI/C1OUT RB7/PGD F4 LCD2
7
RA5/AN4/SS/C2OUT LM016L
15
C1 RC0/T1OSO/T1CKI
8 16
Ena RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RS RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
1uF 23
R2 1
RC4/SDI/SDA
24
MCLR/Vpp/THV RC5/SDO
10k 25
RC6/TX/CK
26
S1
S0

RC7/RX/DT

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
E
19
RD0/PSP0 D0
20
VCC RD1/PSP1 D1 VCC

1
2
3

4
5
6

7
8
9
10
11
12
13
14
21
RD2/PSP2 D2
22
DSW2 R6 RD3/PSP3
27
D3
OFF ON RD4/PSP4 D4
4 1 220 28
RD5/PSP5 D5 RS
3 2 29
R14

D0
D1
D2
D3
D4
D5
D6
D7
RD6/PSP6 D6 Ena
30
RD7/PSP7 D7
DIPSW_2 220
PIC16F877A

Diagrama de Flujos

Este presenta nuestra main el incio del programa

INICIO

DATO_1 AH
DATO_2 H

INI_PUERTOS

INI_LCD

Como primer punto debemos indicar que vamos a realizar ya sea suma resta multiplicación o
división esto se lo realiza con ayuda de un dipsiwch mediante la siguiente tabla
A B Operación
0 0 Suma
0 1 Resta
1 0 Multiplicación
1 1 División

Iniciamos con la detección de las teclas se ingresará unidades y decenas y que mediante la
combinación asignada con anterioridad procedemos a ver qué operación realizara

A B

DECT_TECLA DECT_TECLA

NO NO
PRESS_TECLA PRESS_TECLA

Si Si

A TECLA B TECLA

DECT_TECLA DECT_TECLA

NO NO
PRESS_TECLA PRESS_TECLA

SI SI

A A*10+TECLA B B*10+TECLA

PRINT_A PRINT_B

B R
R

LEER_PUERTO_A

PUERTO_A NO PUERTO_A NO PUERTO_A NO PUERTO_A


00 01 10 11

Si SI SI SI

SUMA RESTA MULTI DIVISION

REST REST REST REST

Diagrama de flujo de las operaciones aritméticas

SUMA RESTA MULTIPLICACION DIVISION

RESUL= AUX=DATO_1
DATO_1+DATO_2 NO
DATO_1<DATO_2 RESUL=0 SI
DATO_2==0 PRINT_EROR

PRINT_C SI
RESUL= NO
RESUL+DATO_2 REST
RESTA CON SIGNO
REST AUX=DATO_1
RESUL=0
AUX=AUX-1
RESUL=
DATO_1-DATO_2

AUX=AUX-DATO_2
NO
AUX==0 RESUL=RESUL+1
PRINT_C

SI
NO
REST PRINT_C AUX<DATO_2

REST SI

PRINT_C

REST

Diagrama de flujo reset


REST

DECT_TECLA

NO PRESS_TECLA
NUMEROS

SI

CLEAR_LCD

Se muestran como es la configuración de los registros TRISA, TRISB, TRISD y TRISE


ubicados en el banco 1 para que el puerto A funcione como entrada digital y los
puertos B, D y E funcionen salida.

initABCD

STATUS ← 00H
STATUS(RP0) ← 1
W ← 06H
ADCON1 ← W
W ← 00H
TRISA ← W

STATUS ← 00H
PORTB ← 00H
STATUS(RP0) ← 1
W ← F0H
TRISB ← W
OPTION_REG(7) ←1

STATUS ← 00H
PORTD ← 00H
STATUS(RP0) ← 1
W ← 00H
TRISD ← W

STATUS ← 00H
STATUS(RP0) ← 1
TRISE(0) ← 0
TRISE(1) ← 0
STATUS(RP0) ← 0

Fin
INITLCD se encarga de configurar al LCD para recibir los datos que se envíe. Aquí se
muestra como se lo configura y las diferentes subrutinas empleadas

INITLCD Espera1ms CaracterLCD

W ComandoLCD BorradoLCD
espera20ms cont1 W RE1
PORTD W
RE RE1 W H
PORTD W
W H W RE0
PORTD W cont2 W
Espera1ms ComandoLCD

Espera1ms
espera20ms FIN
cont2=cont-1 R0

RE0
W H
PORTD W Espera1ms

NO
Z=1 FIN
FIN
Espera1ms

SI
W H
PORTD W cont1=cont-1
W FH
PORTD W
RE0
RE NO
Z=1

Fin
SI

FIN

La subrutina DETECTA_TECLA se utiliza para detectar si se presionó una tecla numérica en el


teclado

TESTEAR
DETECTA_TECLA

PORTB 00F
TESTEAR

W W xor 00H
NO NO
RB7 = 1 RB7 = 1

NO
Z=0 SI SI

SI NO NO
RB6 = 1 RB6 = 1
CODIGO

SI SI
TECLA W
NO NO
RB5 = 1 RB5 = 1
TESTEAR W FFH
TECLA W
SI SI
W W xor 00H
NO NO
RB4 = 1 RB4 = 1
NO
Z=1
SI SI

SI W 00H espera20ms W 00H W FFH

FIN
Fin Fin Fin
CODIGO
Espera20ms

W FEH W FDH W FBH


PORTB W PORTB <- W PORTB W W N
cont1 W

NO NO NO
W 0DH RB7 = 1 W 00H RB7 = 1 W 0EH RB7 = 1 W M
Cont2 W

SI SI SI SI

NO NO NO cont2 cont2 - 1
W 07H RB6 = 1 W 08H RB6 = 1 W 09H RB6 = 1

SI SI SI NO
Z=1
NO NO NO
W 04H RB5 = 1 W 05H RB5 = 1 W 06H RB5 = 1
SI

SI SI cont1 cont1 - 1
SI

NO NO
W 01H RB4 = 1 W 02H NO RB4 = 1 W 03H RB4 = 1 NO
Z=1
SI
SI
Fin W <- 00H
Fin

Y POR ULTIMO LA CONVERSION Y IMPRESIÓN DE DATOS


CONVBCD

W DIG1
DIVIDENDO
DIG1
W
DIVISOR

DIVISION

W RESIDUO
CONVUN W
W COCIENTE
DIVIDENDO W
W
DIVISOR W

DIVISION

W RESIDUO
CONVDE W
W DIG2
W W xor 00H

SI
Z=0

SI

W COCIENTE
DIG1 W

W COCIENTE
CONVCE W

Fin

También podría gustarte