Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NIVEL 0
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 C2
16
OSC1/CLKIN RA0
17
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
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 de 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
GOTO INICIO C1 1
ORG 0X05 0
1nF
INICIO bsf STATUS,5 X1 U1
Movlw 0XFF C2
16
15
OSC1/CLKIN RA0
17
18
OSC2/CLKOUT RA1
Movwf TRISA 4
RA2
1
2
Clrf TRISB 1nF
MCLR RA3
RA4/T0CKI
3
Bcf STATUS,5 6 1
RB0/INT
BUCLE movf PORTA,0 R1 RB1
7
8
0
Movwf COMPLEMENTO
10k RB2
RB3
9 1
10
Comf COMPLEMENTO,0 RB4
RB5
11 0
Movwf PORTB RB6
12
13 1
RB7
GOTO BUCLE PIC16F84A
END
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 16
U1
17
movwf TRISA 15
OSC1/CLKIN
OSC2/CLKOUT
RA0
RA1
18
1
clrf TRISB 4
MCLR
RA2
RA3
2
bcf STATUS,5 RA4/T0CKI
3
6
RB0/INT
7
clrf PORTA R1
RB1
RB2
8
9
clrf PORTB 10k 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:
LIST P=16F84A R2 R3 R4 R5 R6
INCLUDE <P16F84A.INC>
10k 10k 10k 10k 10k
;……………………………………...
INTERCAMB EQU 0X0C U1
ORG 0X00 16
15
OSC1/CLKIN
OSC2/CLKOUT
RA0
RA1
17
18
GOTO INICIO
1
RA2
4 2
MCLR RA3
3
ORG 0X05
RA4/T0CKI
6
RB0/INT
;…………………………………..... R1
RB1
RB2
7
8
9
INICIO bsf STATUS,5 10k RB3
RB4
10
11
RB5
movlw 0xff RB6
RB7
12
13
clrf TRISB
bcf STATUS,5
;……………………………………… R7 R8 R9 R10R11R12R13R14
330 330 330 330 330 330 330 330
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
movwf TRISA
6
RB0/INT
7
RB1
R1 8
clrf TRISB
RB2
10k 9
RB3
10
RB4
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:
LIST P=16F84A
INCLUDE <P16F84A.INC>
CONTA1 EQU 0X0C
CONTA2 EQU 0X0D 16
U1
17
ORG 0X00 15
OSC1/CLKIN
OSC2/CLKOUT
RA0
RA1
18
1
GOTO INICIO 4
MCLR
RA2
RA3
2
3
INICIO bsf STATUS,5 RA4/T0CKI
6
clrf TRISB RB0/INT
RB1
7
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:
Solución:
; Inicio del programa
LIST P=16F84A
INCLUDE <P16F84A.INC>
; Declaración de registros de
propósito general U1
CONTA1 EQU 0X0F 16 17
OSC1/CLKIN RA0
CONTA2 EQU 0X10 15
OSC2/CLKOUT RA1
18
1
; Ubicación en la memoria de 4
RA2
2
MCLR RA3
programa RA4/T0CKI
3
ORG 0x00 6
RB0/INT
GOTO INICIO RB1
7
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
9. Hacer un código en Assembler para un contador binario descendente visualizar por el
puerto B.
Solución:
bcf STATUS,5
; Cargar datos al puerto B
movlw 0xff
movwf PORTB R7 R8 R9 R10R11R12R13R14
CALL RETARDO 330 330 330 330 330 330 330 330
LIST P=16F84A
INCLUDE <P16F84A.INC>
CONTA1 EQU 0X0C
CONTA2 EQU 0X0D
CONTA3 EQU 0X0E
BYTE EQU 0X0F
ORG 0X00 U1
GOTO INICIO 16 17
ORG 0X05 OSC1/CLKIN RA0
15 18
INICIO bsf STATUS,5 OSC2/CLKOUT RA1
1
clrf PORTB RA2
4 2
bcf STATUS,5 MCLR RA3
3
clrf PORTB RA4/T0CKI
clrf BYTE 6
BUCLE btfsc BYTE,4 RB0/INT
7
clrf BYTE RB1
8
movf BYTE,0 RB2
9
call TABLA RB3
10
movwf PORTB RB4
; Rutina del retardo
11
RB5
movlw D'20 12
RB6
movwf CONTA1 13
RB7
LOOP1 movwf D'20
movwf CONTA2 PIC16F84A
0
0
1
1
0
0
1
1
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
movlw b'00010101'
20
RD1/PSP1
21
RD2/PSP2
movwf PORTC RD3/PSP3
22
27
RD4/PSP4
CALL RETARDO RD5/PSP5
28
29
movlw b'00110110' ;W RD6/PSP6
RD7/PSP7
30
movwf PORTC
CALL RETARDO
movlw b'00110000' ;V
movwf PORTB
movlw b'00010001'
movwf PORTC
CALL RETARDO
movlw b'00111110' ;U
movwf PORTB
movlw b'00000000'
movwf PORTC
CALL RETARDO
movlw b'10000001' ;T
movwf PORTB
movlw b'00001000'
movwf PORTC
CALL RETARDO
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
movwf PORTC
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
CALL RETARDO
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
movlw b'01110110' ;N
25
RC6/TX/CK
26
RC7/RX/DT
movwf PORTB RD0/PSP0
19
CALL RETARDO
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
movlw b'00111001' ;E 8
RE0/AN5/RD
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
15
16
movwf PORTB 9
10
RE1/AN6/WR RC2/CCP1
17
18
RE2/AN7/CS RC3/SCK/SCL
movlw b'00100010' 1
RC4/SDI/SDA
23
24
movwf PORTC MCLR/Vpp/THV RC5/SDO
RC6/TX/CK
25
26
CALL RETARDO RC7/RX/DT
19
movlw b'00011110' ;D RD0/PSP0
RD1/PSP1
20
movwf PORTB
movlw b'00000000'
movwf PORTC
CALL RETARDO
movlw b'00111100' ;B
movwf PORTB
movlw b'00100010'
movwf PORTC
CALL RETARDO
movlw b'00110111' ;A
movwf PORTB
movlw b'00100010'
movwf PORTC
CALL RETARDO
GOTO BUCLE
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
RA3/AN3/VREF+ RB6/PGC
39
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
1
0
1
0
0
1
15
RC0/T1OSO/T1CKI
movlw b'00000000' 8
RE0/AN5/RD RC1/T1OSI/CCP2
16
9 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 RD7/PSP7
30
Solución:
LIST P=16F84A
INCLUDE "P16F84A.INC"
ORG 0X00
GOTO INICIO
ORG 0X05
Solución:
List P=16F84
INCLUDE "P16F84.INC"
bsf STATUS,5
clrf TRISB
movlw b'00000011' U1
movwf TRISA 16 17
OSC1/CLKIN RA0
bcf STATUS,5 15
OSC2/CLKOUT RA1
18
1
RA2
4 2
MCLR RA3
clrf TEMP RA4/T0CKI
3
6
RB0/INT
LOOP movf PORTA,W RB1
7
8
andlw b'00000011' RB2
9
RB3
movwf TEMP RB4
10
11
btfsc STATUS,Z RB5
12
RB6
GOTO APAGAR RB7
13
PIC16F84A
movlw b'00000001'
subwf TEMP,0
btfsc STATUS,2
GOTO ENCENDER
movlw b'00000010'
subwf TEMP,W
btfsc STATUS,2
GOTO ENCENDER
PRINCIPAL
movf PORTA,W
andlw b'000000111'
call salida
movwf PORTB
U1
goto PRINCIPAL 16 17
OSC1/CLKIN RA0
15 18
OSC2/CLKOUT RA1
1
RA2
4 2
salida addwf PCL,F MCLR RA3
3
retlw b'0' RA4/T0CKI
retlw b'0' RB0/INT
6
7
retlw b'0' RB1
8
retlw b'1' RB2
9
RB3
retlw b'0' RB4
10
retlw b'1' RB5
11
12
retlw b'1' RB6
13
RB7
retlw b'0'
PIC16F84A
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
ORG 0X00 OSC2/CLKOUT RA1
1
RA2
GOTO INICIO 4
MCLR RA3
2
INICIO bsf STATUS,5 RA4/T0CKI
3
clrf TRISB 6
bcf STATUS,5 RB0/INT
7
RB1
movlw b'10000000' RB2
8
movwf PORTB RB3
9
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
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
9. Utilizando un PIC16F84 realice un Contador de 4 en 4 que cuando llegue a 40 realice
el encendido de una alarma por medio del Pin RA4, luego de ello se debe realizar el
contador de 4 en 4 de forma descendente y al terminar se debe realizar todo el proceso
nuevamente
Solución:
LIST P=16f84A
INCLUDE "P16f84A.INC"
ORG 0X00
GOTO INICIO
ORG 0X05
btfss STATUS,Z
0
0
0
1
1
0
0
0
GOTO VOLVER
bcf PORTA,4
GOTO VUELTA
Solución:
LIST P=16F877
INCLUDE "P16f877.INC"
NUMERO1 EQU 0X20
NUMERO2 EQU 0X21
CONTA1 EQU 0X23
CONTA2 EQU 0X24
ORG 0X00
INICIO bsf STATUS,5
movlw 0xFF NUMERO 1
movwf TRISB
clrf TRISC
bcf TRISA,0
bcf STATUS,5 U1
BUCLE clrf PORTA 13
OSC1/CLKIN RB0/INT
33
14 34
movlw 0x0F
1
1
0
0
OSC2/CLKOUT RB1
1 35
MCLR/Vpp/THV RB2
andwf PORTB,0 0 2
RB3/PGM
36
37 NUMERO2
movwf NUMERO1 3
RA0/AN0
RA1/AN1
RB4
RB5
38
movlw 0xF0 4
5
RA2/AN2/VREF- RB6/PGC
39
40
andwf PORTB,0 6
RA3/AN3/VREF+
RA4/T0CKI
RB7/PGD
movwf NUMERO2 7
RA5/AN4/SS RC0/T1OSO/T1CKI
15
16
RC1/T1OSI/CCP2
swapf NUMERO2,1 8
RE0/AN5/RD RC2/CCP1
17
9 18
movfw NUMERO1 RE1/AN6/WR RC3/SCK/SCL
1
1
1
0
10 23
RE2/AN7/CS RC4/SDI/SDA
subwf NUMERO2,0 RC5/SDO
24
25
btfss STATUS,0 RC6/TX/CK
RC7/RX/DT
26
GOTO MAYOR 19
GOTO MENOR RD0/PSP0
RD1/PSP1
20
GOTO BUCLE RD2/PSP2
21
22
1
1
1
1
0
0
0
MAYOR movfw NUMERO1
RD3/PSP3
27 1
RD4/PSP4
28
addwf NUMERO2,0 RD5/PSP5
29
RD6/PSP6
movwf PORTC RD7/PSP7
30
Solución:
LIST P=16F84A
INCLUDE "P16F84A.INC"
U1
16 17
CONTA1 EQU 0X0C 15
OSC1/CLKIN RA0
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 RB1
7
8
RB2
9
RB3
INICIO bsf STATUS,5 RB4
10
movlw .0 RB5
11
12
movwf PORTB RB6
13
bcf STATUS,5 RB7
clrf PORTB PIC16F84A
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
12. Utilizando un PIC16F84 realice un secuenciador de 8 leds de izquierda a derecha y de
derecha a izquierda por el Puerto B. Se deben ir encendiendo los leds de 3 en 3 en
forma secuencial. (Mientras tres leds estén encendidos todos los demás están
apagados). El secuenciador a la izquierda se realiza por medio de la activación de un
switch colocado en RA0 en activo bajo. El secuenciador a la derecha se realiza por la
activación de un switch colocado en RA1 en activo bajo. En otros estados de la entrada
la salida será apagado.
Solución:
LIST P = 16F84A
INCLUDE "P16F84A.INC"
CONTA1 EQU 0X0C
CONTA2 EQU 0X0D
ORG 0X00
GOTO INICIO
ORG 0X05
INICIO bsf STATUS,5
clrf TRISB
movlw 0XFF
movwf TRISA
bcf STATUS,5 R2
BUCLE btfsc PORTA,0 R11 10k
GOTO BUCLE2
10k
IZQUIERDA A DERECHA
btfsc PORTA,1 U1
GOTO IZQUIERDA 16
15
OSC1/CLKIN RA0
17
18
GOTO BUCLE3 OSC2/CLKOUT RA1
RA2
1
4 2
BUCLE2 btfsc PORTA,1 MCLR RA3
3
GOTO BUCLE3
RA4/T0CKI DERECHA A IZQUIERDA
6
RB0/INT
GOTO DERECHA RB1
7
8
RB2
BUCLE3 clrf PORTB RB3
9
10
GOTO BUCLE RB4
RB5
11
12
RETARDO movlw 0xff RB6
RB7
13
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
CINCO EQU 0X0F
SEIS EQU 0X10
ORG 0X00
GOTO INICIO
INICIO bsf STATUS,5
movlw 0XFF
movwf TRISA
clrf TRISB
bcf STATUS,5
movlw D'10
movwf DIEZ
movlw D'5
movwf CINCO
movlw D'6
movwf SEIS
BUCLE movlw b'01'
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 U1
movlw b'10000001' 16 17
movwf PORTB OSC1/CLKIN RA0
15 18
OSC2/CLKOUT RA1
call RETARDO RA2
1
movlw b'01000010' 4
MCLR RA3
2
movwf PORTB RA4/T0CKI
3
call RETARDO
6
movlw b'00100100' RB0/INT
7
movwf PORTB RB1
8
call RETARDO RB2
9
RB3
movlw b'00011000' 10
RB4
movwf PORTB RB5
11
call RETARDO RB6
12
decfsz CINCO 13
RB7
GOTO IMPRIME1
PIC16F84A
GOTO BUCLE
TRES movlw b'00'
subwf PORTA,0
0
1
0
0
0
0
1
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
CALL RETARDO
movlw b'00000001'
movwf PORTB
CALL RETARDO
movlw b'00000011'
movwf PORTB
CALL RETARDO
movlw b'00000111'
movwf PORTB
CALL RETARDO
movlw b'00001111'
movwf PORTB
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 U1
16 17
CALL RETARDO 15
OSC1/CLKIN RA0
18
OSC2/CLKOUT RA1
movlw b'10000000' RA2
1
4 2
movwf PORTB MCLR RA3
3
RA4/T0CKI
CALL RETARDO
6
movlw b'11000000' R5
RB0/INT
7
RB1
movwf PORTB 10k RB2
8
9
CALL RETARDO RB3
10
RB4
movlw b'11100000' RB5
11
12
movwf PORTB RB6
13
RB7
CALL RETARDO
PIC16F84A
movlw b'11110000'
movwf PORTB
1
1
1
1
1
1
0
0
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
CERO movlw b'0000000'
movwf PORTB
GOTO BUCLE
UNO movlw b'00000001'
movwf PORTB
GOTO BUCLE
DOS movlw b'00000011'
movwf PORTB
GOTO BUCLE
TRES movlw b'00000111'
movwf PORTB
GOTO BUCLE
CUATRO movlw b'00001111'
movwf PORTB
GOTO BUCLE
CINCO movlw b'00011111'
movwf PORTB
GOTO BUCLE
SEIS movlw b'00111111'
movwf PORTB
GOTO BUCLE
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
1
0
1
8
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
clrf TRISA 15
OSC2/CLKOUT RA1
18
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