Ejercicios Resueltos de Microcontrolador
Ejercicios Resueltos de Microcontrolador
Ejercicios Resueltos de Microcontrolador
Nota: Para todos los ejercicios, realizar su diagrama de flujo, simularlo en Proteus con el
PIC16F84A.
1. Hacer un programa en Assembler para encender y apagar un led conectado al pin RA0
del Microcontrolador 16F84A.
Solución:
LIST P=16F84A
C1
INCLUDE <P16F84A.INC>
CONT1 EQU 0X20 1nF
CONT2 EQU 0X21 X1 U1
ORG 0x00 16 17
C2 OSC1/CLKIN RA0
15 18
GOTO INICIO OSC2/CLKOUT RA1
1
ORG 0x05 RA2
4 2
MCLR RA3
INICIO bsf STATUS, RP0 1nF
RA4/T0CKI
3 R2
clrf TRISA 330
6
bcf STATUS,RP0 RB0/INT
ENCLED bsf PORTA, 0
R1 RB1
7
10k 8
RB2
call RETARDO RB3
9
bcf PORTA,0 RB4
10 D1
11
call RETARDO RB5
12
GOTO ENCLED RB6
13
RB7
RETARDO movlw 0xff
movwf CONT1 PIC16F84A
REP1 movlw 0xff
movwf CONT2
REP2 decfsz CONT2, 1 OUTPUT (0)
GOTO REP2
decfsz CONT1,1
GOTO REP1
RETURN
END
2. Hacer un programa en Assembler de tal manera que por el puerto B se obtenga el dato
complementado del dato que ingresa por el puerto A del Microcontrolador PIC 16f84A.
Solución
LIST P=16f84A 0
INCLUDE "P16F84A.INC" 1
COMPLEMENTO EQU 0X0C 0
ORG 0X00 C1 1
GOTO INICIO 0
ORG 0X05 1nF
X1 U1
INICIO bsf STATUS,5 C2
16
15
OSC1/CLKIN RA0
17
18
OSC2/CLKOUT RA1
Movlw 0XFF 4
RA2
1
2
MCLR RA3
Movwf TRISA 1nF
RA4/T0CKI
3
3. Hacer un código en Assembler para obtener por el puerto B el dato del puerto A
multiplicado por tres
Solución:
LIST P=16F84A
INCLUDE "P16F84A.INC"
SUMA1 EQU 0X0C
0
0
0
1
1
SUMA2 EQU 0X0D
ORG 0X00
GOTO INICIO
ORG 0X05
INICIO bsf STATUS,5
movlw 0XFF U1
16 17
movwf TRISA 15
OSC1/CLKIN
OSC2/CLKOUT
RA0
RA1
18
1
clrf TRISB 4
MCLR
RA2
RA3
2
3
bcf STATUS,5 RA4/T0CKI
6
RB0/INT
7
RB1
clrf PORTA R1 RB2
8
9
10k
clrf PORTB RB3
RB4
10
11
;……………………………………. RB5
RB6
12
BUCLE movf PORTA,0 RB7
13
movwf SUMA1
movf PORTA,0
addwf SUMA1,0
movwf PORTB
GOTO BUCLE
0
0
0
0
1
0
0
1
END
4. Hacer un código en Assembler para obtener por el puerto B el dato del puerto A
intercambiado los nibles alto y bajo.
Solución:
R2 R3 R4 R5 R6
10k 10k 10k 10k 10k
LIST P=16F84A
INCLUDE <P16F84A.INC> U1
;……………………………………... 16
15
OSC1/CLKIN
OSC2/CLKOUT
RA0
RA1
17
18
1
INTERCAMB EQU 0X0C 4
MCLR
RA2
RA3
RA4/T0CKI
2
3
GOTO INICIO
RB1
R1 RB2
8
10k 9
RB3
10
ORG 0X05 RB4
RB5
RB6
11
12
;…………………………………..... PIC16F84A
RB7
13
bcf STATUS,5
;………………………………………
BUCLE movf PORTA,0
movwf INTERCAMB
swapf INTERCAMB,0
movwf PORTB
GOTO BUCLE
END
5. Hacer un código en Assembler para obtener por el puerto B el dato del puerto A
desplazando un bit hacia la izquierda, por la derecha entra un “1” ejemplo A= xxx11001
entonces B=xx110011.
Solución:
LIST P=16F84A
INCLUDE <P16F84A.INC> R2 R3 R4 R5 R6
AUX EQU 0X0C 10k 10k 10k 10k 10k
ORG 0X00
GOTO INICIO
U1
ORG 0X05 16
15
OSC1/CLKIN RA0
17
18
INICIO bsf STATUS,5 4
OSC2/CLKOUT
MCLR
RA1
RA2
RA3
1
2
6
movwf TRISA R1
RB0/INT
RB1
7
8
RB2
clrf TRISB 10k RB3
RB4
9
10
bcf STATUS,5
11
RB5
12
RB6
13
clrf PORTB PIC16F84A
RB7
movf AUX,0
movwf PORTB
GOTO BUCLE
END
6. Hacer un código en Assembler para rotar hacia la izquierda un bit activado en “1”
visualizara por el puerto B.
Solución:
U1
LIST P=16F84A 16
15
OSC1/CLKIN RA0
17
18
INCLUDE <P16F84A.INC> 4
OSC2/CLKOUT RA1
RA2
1
2
MCLR RA3
CONTA1 EQU 0X0C RA4/T0CKI
3
bcf STATUS,5
movlw 0x01
movwf PORTB R7 R8 R9 R10R11R12R13R14
BUCLE call RETARDO 330 330 330 330 330 330 330 330
rlf PORTB,1
GOTO BUCLE
RETARDO movlw 0xff
movwf CONTA1
r1 movlw 0xff
movwf CONTA2
r2 decfsz CONTA2,1
GOTO r2
decfsz CONTA1,1
GOTO r1
return
END
7. Hacer un código en Assembler para rotar hacia la derecha dos bits activados en “11”
visualizar por el puerto B.
Solución:
END RB0/INT
6
7
RB1
R1 RB2
8
8. Hacer un código en Assembler 10k RB3
9
10
RB4
para un contador binario RB5
11
12
ascendente visualizar por el RB6
13
RB7
puerto B. PIC16F84A
Solución:
; Inicio del programa
LIST P=16F84A
INCLUDE <P16F84A.INC>
R7 R8 R9 R10R11R12R13R14
; Declaración de registros de 330 330 330 330 330 330 330 330
propósito general
CONTA1 EQU 0X0F
CONTA2 EQU 0X10
; Ubicación en la memoria de programa
ORG 0x00
GOTO INICIO
ORG 0x05
; Configuración de puertos
INICIO bsf STATUS,5
clrf TRISB
bcf STATUS,5
; Poner a cero el puerto B
clrf PORTB
CALL RETARDO
; Incrementar puerto B
BUCLE incf PORTB,1
CALL RETARDO
GOTO BUCLE
; Retardo para conteo ascendente
RETARDO clrf CONTA1
REP1 clrf CONTA2
REP2 incfsz CONTA2,1
GOTO REP2
incfsz CONTA1,1
GOTO REP1
RETURN
END
U1
16 17
OSC1/CLKIN RA0
15 18
OSC2/CLKOUT RA1
1
RA2
9. Hacer un código en Assembler 4
MCLR RA3
2
3
RA4/T0CKI
para un contador binario 6
RB0/INT
descendente visualizar por el RB1
7
R1 RB2
8
puerto B. 10k RB3
9
10
RB4
Solución: RB5
11
12
RB6
13
; Inicio del p´rograma RB7
PIC16F84A
LIST P=16F84A
INCLUDE <P16F84A.INC>
; Declaración de registros de
propósito general
CONTA1 EQU 0X0F R7 R8 R9 R10R11R12R13R14
CONTA2 EQU 0X10 330 330 330 330 330 330 330 330
; Ubicación en la memoria de
programa
ORG 0x00
GOTO INICIO
ORG 0x05
; Configuración de puertos
INICIO bsf STATUS,5
clrf TRISB
bcf STATUS,5
; Cargar datos al puerto B
movlw 0xff
movwf PORTB
CALL RETARDO
; Inicio del bucle infinito
BUCLE decf PORTB,1
CALL RETARDO
GOTO BUCLE
; Retardo para conteo descendente
RETARDO clrf CONTA1
REP1 clrf CONTA2
REP2 incfsz CONTA2,1
GOTO REP2
incfsz CONTA1,1
GOTO REP1
RETURN
END
U1
10. Hacer un código en Assembler 16 17
OSC1/CLKIN RA0
para luces secuenciales llamado 15 18
OSC2/CLKOUT RA1
desde una tabla mostrar por el 1
RA2
puerto B. 4 2
MCLR RA3
Solución: 3
RA4/T0CKI
LIST P=16F84A 6
RB0/INT
INCLUDE <P16F84A.INC> 7
CONTA1 EQU 0X0C RB1
8
CONTA2 EQU 0X0D RB2
9
CONTA3 EQU 0X0E RB3
10
BYTE EQU 0X0F RB4
11
ORG 0X00 RB5
12
GOTO INICIO RB6
13
ORG 0X05 RB7
INICIO bsf STATUS,5 PIC16F84A
clrf PORTB
0
0
1
1
0
0
1
1
bcf STATUS,5
clrf PORTB
clrf BYTE
BUCLE btfsc BYTE,4
clrf BYTE
movf BYTE,0
call TABLA
movwf PORTB
; Rutina del retardo
movlw D'20
movwf CONTA1
LOOP1 movwf D'20
movwf CONTA2
LOOP2 movlw D'50
movwf CONTA3
LOOP3 decfsz CONTA3,1
GOTO LOOP3
decfsz CONTA2,1
GOTO LOOP2
decfsz CONTA1,1
GOTO LOOP1
incf BYTE,1
GOTO BUCLE
; Retorno de w con el valor binario correspondiente.
TABLA addwf PCL,1
retlw B'10000001'
retlw B'01000010'
retlw B'00100100'
retlw B'00011000'
retlw B'00100100'
retlw B'01000010'
retlw B'10000001'
retlw B'11111111'
retlw B'00000000'
retlw B'11111111'
retlw B'00000000'
retlw B'11111111'
retlw B'11001100'
retlw B'00110011'
retlw B'10101010'
retlw B'01010101'
END
Nivel 1
1. Mediante un display alfanumérico mostrar en forma descendente las letras del
alfabeto de Z a A.
Solución:
LIST P=16F877A
INCLUDE <P16F877A.INC>
AUX1 EQU 0X22
AUX2 EQU 0X23
ORG 0X00
GOTO INICIO
ORG 0X05
INICIO bsf STATUS,5
clrf TRISB
clrf TRISC
bcf STATUS,5
movlw b'00101101' ;S
movwf PORTB
movlw b'00100010'
movwf PORTC
CALL RETARDO
movlw b'00110011' ;R
movwf PORTB
movlw b'00100110'
movwf PORTC
CALL RETARDO
movlw b'00100111' ;Q
movwf PORTB
movlw b'00100010'
movwf PORTC
CALL RETARDO
movlw b'00110011' ;P
movwf PORTB U3
movlw b'00100010' 13
OSC1/CLKIN RB0/INT
33
14 34
movwf PORTC OSC2/CLKOUT RB1
RB2
35
2 36
CALL RETARDO 3
RA0/AN0
RA1/AN1
RB3/PGM
RB4
37
4 38
movlw b'00111111' ;O 5
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RB5
RB6/PGC
39
6 40
movwf PORTB 7
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RB7/PGD
15
movlw b'00000000' 8
RE0/AN5/RD
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
16
9 17
movwf PORTC 10
RE1/AN6/WR
RE2/AN7/CS
RC2/CCP1
RC3/SCK/SCL
18
23
CALL RETARDO 1
MCLR/Vpp/THV
RC4/SDI/SDA
RC5/SDO
24
25
movlw b'01110110' ;N RC6/TX/CK
RC7/RX/DT
26
movlw b'00000001'
movwf PORTC
CALL RETARDO
movlw b'00111000' ;L
movwf PORTB
movlw b'00000000'
movwf PORTC
CALL RETARDO
movlw b'00110000' ;K
movwf PORTB
movlw b'00100101'
movwf PORTC
CALL RETARDO
movlw b'00011110' ;J
movwf PORTB
movlw b'00000000'
movwf PORTC
CALL RETARDO
movlw b'10001001' ;I
movwf PORTB
movlw b'00001000'
movwf PORTC
CALL RETARDO
movlw b'00110110' ;H
movwf PORTB
movlw b'00100010' U3
13 33
OSC1/CLKIN RB0/INT
movwf PORTC 14
OSC2/CLKOUT RB1
34
35
CALL RETARDO 2
RA0/AN0
RB2
RB3/PGM
36
3 37
movlw b'00111101' ;G 4
RA1/AN1
RA2/AN2/VREF-/CVREF
RB4
RB5
38
5 39
movwf PORTB 6
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RB6/PGC
RB7/PGD
40
movlw b'00000010' 7
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
movwf PORTC 8
9
RE0/AN5/RD RC1/T1OSI/CCP2
16
17
RE1/AN6/WR RC2/CCP1
CALL RETARDO 10
RE2/AN7/CS RC3/SCK/SCL
18
23
movlw b'00110001' ;F 1
MCLR/Vpp/THV
RC4/SDI/SDA
RC5/SDO
24
25
movwf PORTB RC6/TX/CK
RC7/RX/DT
26
LIST P=16F877
INCLUDE "P16F877.INC"
BIT0 EQU 0X20
BIT1 EQU 0X21
BIT2 EQU 0X22
ORG 0X00
GOTO INICIO
ORG 0X05
INICIO bsf STATUS,5
movlw b'11111111'
movwf TRISC
clrf TRISB
bcf STATUS,5
movfw PORTC
movwf BIT0
movwf BIT1
movwf BIT2
movlw b'00000011'
andwf BIT0,1
movlw b'00000011'
subwf BIT0,0
U1
btfss STATUS,2 13 33
GOTO PUERTOB0 14
OSC1/CLKIN
OSC2/CLKOUT
RB0/INT
RB1
34 0 AND
bsf PORTB,0 RB2
35
1 OR
2 36
GOTO ORRR 3
RA0/AN0 RB3/PGM
37
PUERTOB0 bcf PORTB,0 4
RA1/AN1
RA2/AN2/VREF-/CVREF
RB4
RB5
38 1 XOR
GOTO ORRR 5 39
RA3/AN3/VREF+ RB6/PGC
6 40
ORRR movlw b'00001100' 7
RA4/T0CKI/C1OUT RB7/PGD 5 4 3 2 1 0
RA5/AN4/SS/C2OUT
andwf BIT1,1 15
1
0
1
0
0
1
RC0/T1OSO/T1CKI
8 16
movlw b'00000000' 9
RE0/AN5/RD RC1/T1OSI/CCP2
17
subwf BIT1,1 10
RE1/AN6/WR RC2/CCP1
18
RE2/AN7/CS RC3/SCK/SCL
btfss STATUS,2 RC4/SDI/SDA
23
1 24
GOTO PUERTOB1 MCLR/Vpp/THV RC5/SDO
25
bcf PORTB,1 RC6/TX/CK
26
RC7/RX/DT
GOTO XORRR
19
PUERTOB1 bsf PORTB,1 RD0/PSP0
20
RD1/PSP1
GOTO XORRR RD2/PSP2
21
XORRR movlw b'00110000' RD3/PSP3
22
27
andwf BIT2,1 RD4/PSP4
28
RD5/PSP5
movlw b'00000000' RD6/PSP6
29
subwf BIT2,0 30
RD7/PSP7
btfss STATUS,2 PIC16F877A
GOTO MAYOR
GOTO IGUAL
IGUAL bcf PORTB,2
GOTO INICIO
MAYOR movlw b'00110000'
subwf BIT2,0
btfss STATUS,2
GOTO DIFERENTECERO
GOTO IGUAL
DIFERENTECERO bsf PORTB,2
GOTO INICIO
END
3. Según el estado de los interruptores RA0 y RA1, activar los leds RB0-RB7
conectados a la puerta B, conforme a la siguiente tabla de la verdad:
Solución:
LIST P=16F84A
INCLUDE "P16F84A.INC"
ORG 0X00
GOTO INICIO
ORG 0X05 U1
16 17
OSC1/CLKIN RA0
15 18
INICIO bsf STATUS,5 OSC2/CLKOUT RA1
RA2
1
movlw 0xff 4
MCLR RA3
2
3
movwf TRISA RA4/T0CKI
6
clrf TRISB RB0/INT
7
RB1
bcf STATUS,5 RB2
8
9
movlw b'00000000' RB3
10
RB4
subwf PORTA,0 RB5
11
12
btfss STATUS,2 RB6
13
RB7
GOTO UNO
PIC16F84A
GOTO IMPRIME1
IMPRIME1 movlw b'10101010'
movwf PORTB
GOTO INICIO
UNO movlw b'00000001'
subwf PORTA,0
btfss STATUS,2
GOTO DOS
GOTO IMPRIME2
IMPRIME2 movlw b'01010101'
movwf PORTB
GOTO INICIO
DOS movlw b'00000010'
subwf PORTA,0
btfss STATUS,2
GOTO TRES
GOTO IMPRIME3
IMPRIME3 movlw b'00001111'
movwf PORTB
GOTO INICIO
TRES movlw b'11110000'
movwf PORTB
GOTO INICIO
END
Solución:
List P=16F84
INCLUDE "P16F84.INC"
bsf STATUS,5
clrf TRISB
movlw b'00000011' U1
movwf TRISA 16
OSC1/CLKIN RA0
17
bcf STATUS,5 15
OSC2/CLKOUT RA1
18
1
RA2
4 2
MCLR RA3
3
clrf TEMP RA4/T0CKI
6
RB0/INT
7
LOOP movf PORTA,W RB1
8
RB2
andlw b'00000011' RB3
9
10
movwf TEMP RB4
11
RB5
btfsc STATUS,Z RB6
12
13
GOTO APAGAR RB7
PIC16F84A
movlw b'00000001'
subwf TEMP,0
btfsc STATUS,2
GOTO ENCENDER
movlw b'00000010'
subwf TEMP,W
btfsc STATUS,2
GOTO ENCENDER
END
6. Efecto de luces tipo Auto Fantástico con un 16F84A por el puerto b, RB0 a RB7
Solución:
LIST P=16F84A
INCLUDE "P16F84A.INC"
CONTA1 EQU 0X0C
U1
16 17
CONTA2 EQU 0X0D 15
OSC1/CLKIN RA0
18
OSC2/CLKOUT RA1
ORG 0X00 1
RA2
GOTO INICIO 4
MCLR RA3
2
INICIO bsf STATUS,5 3
RA4/T0CKI
clrf TRISB 6
bcf STATUS,5 RB0/INT
7
RB1
movlw b'10000000' RB2
8
movwf PORTB 9
RB3
10
CALL RETARDO RB4
11
movlw b'01000000' RB5
12
RB6
movwf PORTB RB7
13
CALL RETARDO
PIC16F84A
movlw b'00100000'
movwf PORTB
CALL RETARDO
movlw b'00010000'
movwf PORTB
CALL RETARDO
movlw b'00001000'
movwf PORTB
CALL RETARDO
movlw b'00000100'
movwf PORTB
CALL RETARDO
movlw b'00000010'
movwf PORTB
CALL RETARDO
movlw b'00000001'
movwf PORTB
CALL RETARDO
movlw b'00000010'
movwf PORTB
CALL RETARDO
movlw b'00000100'
movwf PORTB
CALL RETARDO
movlw b'00001000'
movwf PORTB
CALL RETARDO
7. Diseñe un contador de 8 bits, que se incrementa cada vez que se pulsa “P” (RA0).
Visualice el resultado por el puerto B. Activar un led (RA1), cuando el contador llegue
a D’120’ y apagarlo cuando llegue a D’200’. Repetir el ciclo.
Solución:
List P=16F84A
INCLUDE "P16F84A.INC"
CONTA1 EQU 0X0C
CONTA2 EQU 0X0D
CONTADOR EQU 0X0E
ORG 0x00
GOTO INICIO
ORG 0x05
Solución:
LIST P=16F84A
INCLUDE <P16F84A.INC>
AUX1 EQU 0X0C
AUX2 EQU 0X0D
CONTA1 EQU 0X0E
CONTA2 EQU 0X0F
ORG 0X00
GOTO INICIO
ORG 0X05
INICIO bsf STATUS,5
clrf TRISB
bsf TRISA,0
bcf STATUS,5
clrf PORTB
BUCLE1 btfss PORTA,0
GOTO BUCLE1
clrf PORTB
clrf AUX1
clrf AUX2
bsf PORTB,0
BUCLE2 CALL RETARDO
rlf PORTB,1
btfss PORTB,0
GOTO BUCLE2
BUCLE4 rrf PORTB,1
CALL RETARDO
btfss PORTB,0
GOTO BUCLE4
incf AUX1
movlw 0x07
subwf AUX1,0
btfss STATUS,2
GOTO BUCLE2
BUCLE3 clrf PORTB
incf AUX2
bsf PORTB,0
CALL RETARDO
bsf PORTB,1
CALL RETARDO
bsf PORTB,2
CALL RETARDO
bsf PORTB,3
CALL RETARDO
bsf PORTB,4
CALL RETARDO
bsf PORTB,5
CALL RETARDO
bsf PORTB,6
CALL RETARDO
bsf PORTB,7
CALL RETARDO
movlw 0x05
subwf AUX2,0
btfss STATUS,2
GOTO BUCLE3
clrf PORTB
GOTO BUCLE1
RETARDO movlw 0xff
movwf CONTA1;CONTADOR1 = 0XFF
REP1 movlw 0xff
movwf CONTA2;CONTADOR2 = 0XFF
REP2 decfsz CONTA2,1
GOTO REP2
decfsz CONTA1,1
GOTO REP1
RETURN
END
U1
16 17
OSC1/CLKIN RA0
15 18
OSC2/CLKOUT RA1
1
RA2
4 2
MCLR RA3
3
RA4/T0CKI
6
RB0/INT
7
RB1
8
RB2
9
RB3
10
RB4
11
RB5
12
RB6
13
RB7
PIC16F84A
LIST P=16f84A
INCLUDE "P16f84A.INC"
addwf PORTB,1
CALL RETARDO
movf PORTB,0
sublw .40
btfss STATUS,Z
GOTO VUELTA
VOLVER CALL RETARDO
bsf PORTA,4
movlw .4
subwf PORTB,1
CALL RETARDO
movf PORTB,0
sublw .4
btfss STATUS,Z
GOTO VOLVER
bcf PORTA,4
GOTO VUELTA
Solución: NUMERO 1
LIST P=16F877
INCLUDE "P16f877.INC"
NUMERO1 EQU 0X20 U1
NUMERO2 EQU 0X21 13
14
OSC1/CLKIN RB0/INT
33
34
OSC2/CLKOUT RB1
1
1
0
0
RE2/AN7/CS RC4/SDI/SDA
24
RC5/SDO
25
bcf TRISA,0 RC6/TX/CK
RC7/RX/DT
26
27
RD4/PSP4
andwf PORTB,0 RD5/PSP5
28
29
RD6/PSP6
movwf NUMERO1 RD7/PSP7
30
andwf PORTB,0
movwf NUMERO2
swapf NUMERO2,1
movfw NUMERO1 subwf NUMERO2,0
btfss STATUS,0
GOTO MAYOR
GOTO MENOR
GOTO BUCLE
MAYOR movfw NUMERO1
addwf NUMERO2,0
movwf PORTC
INCRE CALL RETARDO
incfsz PORTC
GOTO INCRE
GOTO FINAL
RETARDO movlw 0xff
movwf CONTA1
REP1 movlw 0xff
movwf CONTA2
REP2 decfsz CONTA2,1
GOTO REP2
decfsz CONTA1,1
GOTO REP1
RETURN
IMPRIME bsf PORTA,0'
GOTO BUCLE
MENOR movfw NUMERO1
subwf NUMERO2,0
btfsc STATUS,2
GOTO IMPRIME
comf NUMERO2,0
movwf PORTC
GOTO BUCLE
FINAL movlw b'00000000'
movwf PORTC
GOTO BUCLEL
END
11. Utilizando un PIC16F84, realice un contador binario de 5 a 55 por medio de leds, en
bucle infinito.
Solución:
LIST P=16F84A
INCLUDE "P16F84A.INC"
U1
16 17
CONTA1 EQU 0X0C OSC1/CLKIN RA0
15 18
OSC2/CLKOUT RA1
CONTA2 EQU 0X0D RA2
1
4 2
MCLR RA3
3
ORG 0x00 RA4/T0CKI
GOTO INICIO RB0/INT
6
ORG 0X05 7
RB1
8
RB2
9
RB3
INICIO bsf STATUS,5 RB4
10
movlw .0 RB5
11
12
movwf PORTB RB6
13
bcf STATUS,5 RB7
BUCLE movlw .5
0
0
0
1
1
1
1
0
movwf PORTB
movlw .55
subwf PORTB,0
btfss STATUS,Z
GOTO BUCLE1
CALL RETARDO
GOTO BUCLE
decfsz CONTA1,1
GOTO REP1
RETURN
END
Solución:
LIST P = 16F84A
INCLUDE "P16F84A.INC"
CONTA1 EQU 0X0C
CONTA2 EQU 0X0D
R2
ORG 0X00 R11 10k
GOTO INICIO
10k
IZQUIERDA A DERECHA
ORG 0X05 U1
INICIO bsf STATUS,5 16
15
OSC1/CLKIN
OSC2/CLKOUT
RA0
RA1
17
18
1
clrf TRISB 4
MCLR
RA2
RA3
2
GOTO BUCLE3
BUCLE2 btfsc PORTA,1 D1 D2
LED-GREEN
D3
LED-GREEN
LED-GREEN
D4
LED-GREEN
D5 D6
LED-GREEN
D7
LED-GREEN
D8
LED-GREEN
LED-GREEN
GOTO BUCLE3
GOTO DERECHA
BUCLE3 clrf PORTB
GOTO BUCLE
RETARDO movlw 0xff
movwf CONTA1
REP1 movlw 0xff
movwf CONTA2
REP2 decfsz CONTA2,1
GOTO REP2
decfsz CONTA1,1
GOTO REP1
RETURN
DERECHA movlw B'00000000'
movwf PORTB
CALL RETARDO
movlw B'11100000'
movwf PORTB
CALL RETARDO
movlw B'01110000'
movwf PORTB
CALL RETARDO
movlw B'00111000'
movwf PORTB
CALL RETARDO
movlw B'00011100'
movwf PORTB
CALL RETARDO
movlw B'00001110'
movwf PORTB
CALL RETARDO
movlw B'00000111'
movwf PORTB
CALL RETARDO
movlw B'00000000'
movwf PORTB
CALL RETARDO
GOTO BUCLE
IZQUIERDA movlw B'00000000'
movwf PORTB
CALL RETARDO
movlw B'00000111'
movwf PORTB
CALL RETARDO
movlw B'00001110'
movwf PORTB
CALL RETARDO
movlw B'00011100'
movwf PORTB
CALL RETARDO
movlw B'00111000'
movwf PORTB
CALL RETARDO
movlw B'01110000'
movwf PORTB
CALL RETARDO
movlw B'11100000'
movwf PORTB
CALL RETARDO
movlw B'00000000'
movwf PORTB
CALL RETARDO
GOTO BUCLE
END
13. Se tienen 2 switch que de acuerdo a las combinaciones de estos se realizaran uno
de los siguientes procesos:
Si el SW1 = 1 y SW2 =0 se realiza la intermitencia de 8 leds 10 veces.
Si el SW1=0 y el SW2=1 encender 8 leds de 2 en 2 de adentro hacia fuera y de
afuera hacia adentro. Este proceso se debe ejecutar 5 veces.
Si el SW1=0 y el SW2=0 el valor actual del puerto debe mantenerse.
Si el SW1=1 y el SW2=1 se realizara un contador de 6 en 6 hasta 36.
Solución:
LIST P=16F84A
INCLUDE "P16F84A.INC"
DIEZ EQU 0X0C
CONTA1 EQU 0X0D
CONTA2 EQU 0X0E U1
CINCO EQU 0X0F 16 17
SEIS EQU 0X10 OSC1/CLKIN RA0
15 18
OSC2/CLKOUT RA1
ORG 0X00 RA2
1
GOTO INICIO 4 2
MCLR RA3
3
INICIO bsf STATUS,5 RA4/T0CKI
movlw 0XFF 6
RB0/INT
movwf TRISA RB1
7
clrf TRISB 8
RB2
9
bcf STATUS,5 RB3
10
movlw D'10 RB4
11
RB5
movwf DIEZ RB6
12
movlw D'5 13
RB7
movwf CINCO PIC16F84A
movlw D'6
movwf SEIS
BUCLE movlw b'01'
0
1
0
0
0
0
1
0
subwf PORTA,0
btfss STATUS,2
GOTO DOS
IMPRIME movlw b'11111111'
movwf PORTB
CALL RETARDO
clrf PORTB
CALL RETARDO
decfsz DIEZ
GOTO IMPRIME
GOTO BUCLE
DOS movlw b'10'
subwf PORTA,0
btfss STATUS,2
GOTO TRES
GOTO IMPRIME1
IMPRIME1 movlw b'00011000'
movwf PORTB
call RETARDO
movlw b'00100100'
movwf PORTB
call RETARDO
movlw b'01000010'
movwf PORTB
call RETARDO
movlw b'10000001'
movwf PORTB
call RETARDO
movlw b'01000010'
movwf PORTB
call RETARDO
movlw b'00100100'
movwf PORTB
call RETARDO
movlw b'00011000'
movwf PORTB
call RETARDO
decfsz CINCO
GOTO IMPRIME1
GOTO BUCLE
TRES movlw b'00'
subwf PORTA,0
btfss STATUS,2
GOTO IMPRIME2
GOTO BUCLE
IMPRIME2 clrf PORTB
IMPRIME3 movlw D'6
addwf PORTB,1
call RETARDO
decfsz SEIS,1
GOTO IMPRIME3
GOTO BUCLE
RETARDO movlw 0xff
movwf CONTA1
REP1 movlw 0xff
movwf CONTA2
REP2 decfsz CONTA2,1
goto REP2
decfsz CONTA1,1
goto REP1
RETURN
END
14. Por medio de la activación de 1 de 4 suitch, realizara lo siguiente: Si RA0=1 rota a la
izquierda con solo 1 led encendido. Si RA1=1 rota a la derecha con solo 1 led
encendido. Si RA2=1 rota a la izquierda dejando encendido cada led. Si RA3=1 rota
a la derecha dejando encendido cada led La muestra se realiza por el puerto B.
Solución:
LIST P=16F84A
INCLUDE "P16F84A.INC"
CONTA1 EQU 0X0C
CONTA2 EQU 0X0D
ORG 0X00
ORG 0X05
bsf STATUS,5
movlw 0xFF
movwf TRISA
clrf TRISB
bcf STATUS,5
BUCLE movlw b'0001'
subwf PORTA,0
btfss STATUS,2
GOTO SEGUNDO
movlw b'00000001'
movwf PORTB
IMPRIMIR1 CALL RETARDO
rlf PORTB,1
btfss STATUS,0
GOTO IMPRIMIR1
GOTO BUCLE
SEGUNDO movlw b'0010'
subwf PORTA,0
btfss STATUS,2
GOTO TERCERO
movlw b'10000000'
movwf PORTB
IMPRIMIR2 CALL RETARDO
rrf PORTB,1
btfss STATUS,0
GOTO IMPRIMIR2
GOTO BUCLE
TERCERO movlw b'0100'
subwf PORTA,0
btfss STATUS,2
GOTO CUARTO
movlw b'00000000'
movwf PORTB U1
16 17
CALL RETARDO 15
OSC1/CLKIN RA0
18
OSC2/CLKOUT RA1
movlw b'00000001' RA2
1
4 2
movwf PORTB MCLR RA3
3
RA4/T0CKI
CALL RETARDO
6
movlw b'00000011' R5
RB0/INT
7
RB1
movwf PORTB 10k RB2
8
9
CALL RETARDO RB3
10
RB4
movlw b'00000111' RB5
11
12
movwf PORTB RB6
13
RB7
CALL RETARDO
PIC16F84A
movlw b'00001111'
movwf PORTB
1
1
1
1
1
1
0
0
CALL RETARDO
movlw b'00011111'
movwf PORTB
CALL RETARDO
movlw b'00111111'
movwf PORTB
CALL RETARDO
movlw b'01111111'
movwf PORTB
CALL RETARDO
movlw b'11111111'
movwf PORTB
CALL RETARDO
GOTO BUCLE
CUARTO movlw b'1000'
subwf PORTA,0
btfss STATUS,2
GOTO BUCLE
movlw b'00000000'
movwf PORTB
CALL RETARDO
movlw b'10000000'
movwf PORTB
CALL RETARDO
movlw b'11000000'
movwf PORTB
CALL RETARDO
movlw b'11100000'
movwf PORTB
CALL RETARDO
movlw b'11110000'
movwf PORTB
CALL RETARDO
movlw b'11111000'
movwf PORTB
CALL RETARDO
movlw b'11111100'
movwf PORTB
CALL RETARDO
movlw b'11111110'
movwf PORTB
CALL RETARDO
movlw b'11111111'
movwf PORTB
CALL RETARDO
GOTO BUCLE
RETARDO movlw 0xff
movwf CONTA1
REP1 movlw 0xff
movwf CONTA2
REP2 decfsz CONTA2,1
goto REP2
decfsz CONTA1,1
goto REP1
RETURN
END
15. Leer las tres líneas más bajas del puerto A, que fijan el número de leds que se
iluminan en la salida. A si por ejemplo si lee el dato “xx101” (cinco) en los leds
conectados al puerto B se iluminara el código “00011111” encendiéndose cinco leds.
Solución:
LIST P=16F84A
INCLUDE "P16F84A.INC"
CONTA1 EQU 0X0C
CONTA2 EQU 0X0D
AUX EQU 0X0E
ORG 0x00
GOTO INICIO
ORG 0X05
INICIO bsf STATUS,5
bsf TRISA,0
bsf TRISA,1
bsf TRISA,2
clrf TRISB
bcf STATUS,5
clrf PORTA
clrf PORTB
BUCLEmovf PORTA,0
movwf AUX
btfsc STATUS,Z
GOTO CERO
Movlw b'00000001'
Subwf AUX,0
btfsc STATUS,Z
GOTO UNO
Movlw b'00000010'
subwf AUX,0
btfsc STATUS,Z
GOTO DOS
Movlw b'00000011'
Subwf AUX,0
btfsc STATUS,Z
GOTO TRES
movlw b'00000100'
subwf AUX,0
btfsc STATUS,Z
GOTO CUATRO
movlw b'00000101'
subwf AUX,0
btfsc STATUS,Z
GOTO CINCO
Movlw b'00000110'
subwf AUX,0
btfsc STATUS,Z
GOTO SEIS
;******* SIETE
movlw b'01111111'
movwf PORTB
GOTO BUCLE
1
0
1
RB2
9
RB3
10
RB4
11
RB5
12
RB6
13
RB7
PIC16F84A
0
0
0
1
1
1
1
1
16. Hacer un programa para 16F84 de tal manera que a través de dos displays pueda
visualizarse un contador decimal de 0 – 99 ascendentes.
Solución:
ORG 0X00
GOTO INICIO
ORG 0X05
U1
INICIO bsf STATUS,5 16
OSC1/CLKIN RA0
17
15 18
clrf TRISA OSC2/CLKOUT RA1
1
RA2
clrf TRISB 4
MCLR RA3
2
3
bcf STATUS,5 RA4/T0CKI
6
RB0/INT
7
clrf PORTA RB1
8
RB2
clrf PORTB RB3
9
10
RB4
11
RB5
BUCLE RB6
12
13
RB7
call RETARDO
movf PORTB,0
sublw 0X09
btfss STATUS,Z
GOTO AUMENTO
incf PORTA
clrf PORTB
movf PORTA,0
sublw 0x0A
btfss STATUS,Z
GOTO AUMENTO
clrf PORTA
GOTO BUCLE