Está en la página 1de 29

Ejercicios resueltos de Microcontroladores

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

addwf PORTA,0 PIC16F84A

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

movwf TRISA PIC16F84A

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

movlw 0xff RA4/T0CKI


3

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

BUCLE movf PORTA,0


movwf AUX
rlf AUX,1 R7 R8 R9 R10R11R12R13R14
bsf AUX,0 330 330 330 330 330 330 330 330

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

bcf STATUS,5 R1 RB2


8
10k 9
RB3
movlw 0x01 RB4
RB5
10
11
movwf PORTB RB6
RB7
12
13
BUCLE call RETARDO PIC16F84A
rlf PORTB,1
GOTO BUCLE
RETARDO movlw 0xff
movwf CONTA1 R7 R8 R9 R10R11R12R13R14
r1 movlw 0xff 330 330 330 330 330 330 330 330

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:

; inicio del programa


LIST P=16F84A
INCLUDE <P16F84A.INC>
; Declaración de registros de
propósito general
CONTA1 EQU 0X0C
U1
CONTA2 EQU 0X0D 16 17
OSC1/CLKIN RA0
; Ubicación en la memoria de 15
OSC2/CLKOUT RA1
18
1
programa 4
MCLR
RA2
RA3
2
ORG 0X00 RA4/T0CKI
3

GOTO INICIO RB0/INT


6
7
ORG 0X05 R1
RB1
RB2
8
; Configuración de puertos 10k RB3
9
10
RB4
INICIO bsf STATUS,5 RB5
11
12
clrf TRISB RB6
RB7
13
bcf STATUS,5 PIC16F84A
; Carga de dato al puerto B
clrf PORTB
movlw 0xc0
movwf PORTB
R7 R8 R9 R10R11R12R13R14
; inicio del bucle infinito 330 330 330 330 330 330 330 330
BUCLE call RETARDO
rrf PORTB,1
GOTO BUCLE
; retardo para desplazamiento a la
derecha
RETARDO movlw 0xff
movwf CONTA1
r1 movlw 0xff
movwf CONTA2
r2 decfsz CONTA2,1
GOTO r2
decfsz CONTA1,1
GOTO r1
return
END
8. Hacer un código en Assembler para un contador binario ascendente visualizar por el
puerto B.

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

ORG 0x05 R1 RB2


8
10k 9
RB3
; Configuración de puertos RB4
10
11
INICIO bsf STATUS,5 RB5
12
RB6
clrf TRISB RB7
13

bcf STATUS,5 PIC16F84A


; Poner a cero el puerto B
clrf PORTB
CALL RETARDO
; Incrementar puerto B
BUCLE incf PORTB,1 R7 R8 R9 R10R11R12R13R14
CALL RETARDO 330 330 330 330 330 330 330 330

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:

; Inicio del p´rograma


LIST P=16F84A
INCLUDE <P16F84A.INC>
; Declaración de registros de
propósito general U1
CONTA1 EQU 0X0F 16
15
OSC1/CLKIN RA0
17
18
CONTA2 EQU 0X10 OSC2/CLKOUT RA1
RA2
1
; Ubicación en la memoria de 4
MCLR RA3
2
3
RA4/T0CKI
programa 6
ORG 0x00 RB0/INT
RB1
7
GOTO INICIO R1 RB2
8
9
10k RB3
ORG 0x05 RB4
10
11
; Configuración de puertos RB5
RB6
12
INICIO bsf STATUS,5 RB7
13

clrf TRISB PIC16F84A

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

; 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
10. Hacer un código en Assembler para luces secuenciales llamado desde una tabla
mostrar por el puerto B.
Solución:

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

INICIO bsf STATUS,5


clrf TRISB
clrf TRISC
bcf STATUS,5

BUCLE clrf PORTB


clrf PORTC
movlw b'00001001' ;Z U3
movwf PORTB 13
14
OSC1/CLKIN RB0/INT
33
34
movlw b'00010001' OSC2/CLKOUT RB1
RB2
35
2 36
movwf PORTC 3
RA0/AN0
RA1/AN1
RB3/PGM
RB4
37
CALL RETARDO 4
5
RA2/AN2/VREF-/CVREF RB5
38
39
RA3/AN3/VREF+ RB6/PGC
movlw b'01000000' ;Y 6
7
RA4/T0CKI/C1OUT RB7/PGD
40

movwf PORTB RA5/AN4/SS/C2OUT


RC0/T1OSO/T1CKI
15
8 16
movlw b'00001001' 9
RE0/AN5/RD
RE1/AN6/WR
RC1/T1OSI/CCP2
RC2/CCP1
17
movwf PORTC 10
RE2/AN7/CS RC3/SCK/SCL
18
23
RC4/SDI/SDA
CALL RETARDO 1
MCLR/Vpp/THV RC5/SDO
24
25
movlw b'01000000' ;X RC6/TX/CK
RC7/RX/DT
26

movwf PORTB RD0/PSP0


19

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 PORTB PIC16F877A


movlw b'00010100' SRCFILE=..\ejem1.hex

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

movlw b'00000100' RD1/PSP1


RD2/PSP2
20
21

movwf PORTC RD3/PSP3


RD4/PSP4
22
27

CALL RETARDO RD5/PSP5


RD6/PSP6
28
29

movlw b'01110110' ;M RD7/PSP7


30

movwf PORTB PIC16F877A


SRCFILE=..\ejem1.hex
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'
movwf PORTC
CALL RETARDO
movlw b'00111101' ;G
movwf PORTB
movlw b'00000010'
movwf PORTC
CALL RETARDO U3
movlw b'00110001' ;F 13
14
OSC1/CLKIN RB0/INT
33
34
OSC2/CLKOUT RB1
movwf PORTB 2
RB2
35
36
movlw b'00100010' 3
RA0/AN0
RA1/AN1
RB3/PGM
RB4
37
4 38
movwf PORTC 5
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RB5
RB6/PGC
39

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 RD2/PSP2


RD3/PSP3
21
22
movlw b'00100010' RD4/PSP4
27
28
RD5/PSP5
movwf PORTC RD6/PSP6
29
30
CALL RETARDO
RD7/PSP7
PIC16F877A
movlw b'00111001' ;C SRCFILE=..\ejem1.hex

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

; Retardo para visualizar el zyx…


RETARDO clrf AUX1
REP1 clrf AUX2
REP2 incfsz AUX2,1
GOTO REP2
decfsz AUX1,1
GOTO REP1
return
END
2. Por el puerto B mostrar las siguientes operaciones: portB.0 = portC.0 and
portC.1, portB.1= portC.2 or portC.3, portB.2 = portC.4 xor portC.5.
Solución:

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

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

INICIO bsf STATUS,5


movlw 0xff
movwf TRISA
clrf TRISB
bcf STATUS,5
movlw b'00000000'
subwf PORTA,0 U1
btfss STATUS,2 16
15
OSC1/CLKIN RA0
17
18
GOTO UNO OSC2/CLKOUT RA1
RA2
1
GOTO IMPRIME1 4
MCLR RA3
2
3
RA4/T0CKI
IMPRIME1 movlw b'10101010'
6
movwf PORTB RB0/INT
7
RB1
GOTO INICIO RB2
8
9
UNO movlw b'00000001' RB3
10
RB4
subwf PORTA,0 RB5
11
12
btfss STATUS,2 RB6
RB7
13
GOTO DOS PIC16F84A
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
4. Una lámpara conectada en RB0 se controla mediante dos interruptores conectados
en RA1 y RA2. Cuando cualquiera de los interruptores cambie de estado, la lámpara
también lo hará.

Solución:

List P=16F84
INCLUDE "P16F84.INC"

TEMP equ 0x0c


ORG 0x00
GOTO INICIO
ORG 0x05

INICIO clrf PORTB

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

APAGAR bcf PORTB,0


GOTO LOOP

ENCENDER bsf PORTB,0


GOTO LOOP
end
5. Una lámpara conectada en RB1 se controla mediante 3 interruptores conectados en
RA1, RA2 y RA3. Cuando 2 interruptores están en estado alto se activara la salida
RB1, en otra condición la salida estará apagado
Solución:
RA1 RA2 RA3 RB0
;
; 0 0 0 0
; 0 0 1 0
; 0 1 0 0
; 0 1 1 1
; 1 0 0 0
; 1 0 1 1
; 1 1 0 1
; 1 1 1 0
;
;
; ZONA DE DATOS

__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC; configuración para el


; Grabador
LIST p=16F84A ; Procesador
INCLUDE <P16F84A.INC> ; definición de los operando utilizados
NUM EQU d'1'
; ZONA DE CODIGOS
ORG 0 ; el programa comienza en la dirección 0 de memoria de programa

INICIO bsf STATUS,RP0


movlw b'00000000'
movwf TRISB
movlw b'00000111'
movwf TRISA
bcf STATUS,RP0

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

RETARDO clrf CONTA1


REP1 clrf CONTA2
REP2 incfsz CONTA2,1
GOTO REP2
incfsz CONTA1,1
GOTO REP1
RETURN
END
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

INICIO bsf STATUS,5


bsf TRISA,0
bcf TRISA,1
clrf TRISB
bcf STATUS,5 U1
16 17
clrf CONTADOR 15
OSC1/CLKIN RA0
18
clrf PORTB OSC2/CLKOUT RA1
1
1
RA2
movf CONTADOR,0 4
MCLR RA3
2
3
movwf PORTB RA4/T0CKI
6
RB0/INT
EXPLORA btfsc PORTA,0 RB1
7
8
goto EXPLORA RB2
9
goto SI RB3
RB4
10
SI incf CONTADOR,1 RB5
11
12
Call RETARDO RB6
13
movf CONTADOR,0 RB7
PIC16F84A
movwf PORTB
sublw .120
btfss STATUS,Z
goto VALOR2
bsf PORTA,1
goto EXPLORA
VALOR2 movf CONTADOR
sublw .200
btfss STATUS,Z
goto EXPLORA
bcf PORTA,1
clrf CONTADOR
clrf PORTB
goto EXPLORA
RETARDO movlw 0xff
movwf CONTA1
REP1 movlw 0xff
movwf CONTA2
REP2 decfsz CONTA2,1
GOTO REP2
decfsz CONTA1,1
GOTO REP1
RETURN
End
8. Utilizando un PIC16F84 realice un Juego de Luces de 8 leds, donde por medio de un
Pulsador de Inicio el Juego se coloque en funcionamiento. El Juego se comportara de
la siguiente manera:
Los leds inicialmente se encenderán solo uno a la vez en secuencia, de DERECHA a
IZQUIERDA y de IZQUIERDA a DERECHA; Este proceso lo realizara 7 veces, donde
al terminar pasara a la siguiente secuencia que se comportara de la siguiente manera:
El secuenciador será de 8 leds donde encenderán uno por uno, y al estar todos
encendidos se apagaran; Este Proceso se realizara 5 veces. Luego todo este proceso
se realizara nuevamente. Nota: Utilice las instrucciones RLF y RRF.

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"

CONTADOR1 EQU 0X20


CONTADOR2 EQU 0X21
AUX1 EQU 0X22
AUX2 EQU 0X23

ORG 0X00
GOTO INICIO
ORG 0X05

INICIO bsf STATUS,RP0


bcf TRISA,4
clrf TRISB
bcf STATUS,RP0
clrf PORTB

VUELTA clrf STATUS


movlw .4
addwf PORTB,1
U1
16 17
CALL RETARDO 15
OSC1/CLKIN RA0
18
OSC2/CLKOUT RA1
movf PORTB,0 1
RA2
sublw .40 4
MCLR RA3
2
3
RA4/T0CKI 0
btfss STATUS,Z 6
RB0/INT
GOTO VUELTA 7
RB1
VOLVER CALL RETARDO RB2
8
bsf PORTA,4 9
RB3
10
movlw .4 RB4
11
RB5
subwf PORTB,1 RB6
12
CALL RETARDO RB7
13
movf PORTB,0
PIC16F84A
sublw .4

btfss STATUS,Z
0
0
0
1
1
0
0
0

GOTO VOLVER
bcf PORTA,4
GOTO VUELTA

RETARDO movlw 0xff


movwf AUX1
REP1 movlw 0xff
movwf AUX2
REP2 decfsz AUX2,1
goto REP2
decfsz AUX1,1
GOTO REP1
RETURN
END
10. Utilizando un PIC16F877 realice la captación de dos números de 4 bits, los cuales
ambos son suministrados por el Puerto B. Estos números deben de ser comparados
para lo siguiente:
Si N1=N2 encender una alarma. (Por RA0)
Si N1>N2 realizar la suma de estos números para luego realizar un contador desde
este valor hasta su desbordamiento. (Mostrar por el Puerto A)
Si N1<N2 realizar el complemento a 1 del númeroN2. (Mostrar por el Puerto A)
El número N1 son los 4 bits menos significativos del Puerto B y el numero N2 son los
4 bits más significativos del Puerto B.

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

INCRE CALL RETARDO PIC16F877


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 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

BUCLE1 CALL RETARDO


incf PORTB

movlw .55
subwf PORTB,0

btfss STATUS,Z
GOTO BUCLE1
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
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

movwf CONTA1 PIC16F84A


REP1 movlw 0xff R3 R4 R5 R6 R7 R8 R9 R10
330 330 330 330 330 330 330 330
movwf CONTA2
REP2 decfsz CONTA2,1
GOTO REP2 D1 D2 D3 D4 D5 D6 D7 D8
decfsz CONTA1,1 LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN

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

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
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:

;INICIO DEL PROGRAMA


list p = 16F84A
INCLUDE <P16F84A.INC>

CONTA1 EQU 0X0C


CONTA2 EQU 0X0D
AUX EQU 0X0E

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

AUMENTO incf PORTB PIC16F84A

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

RETARDO clrf CONTA1


REP1 clrf CONTA2
REP2 incfsz CONTA2,1
GOTO REP2
decfsz CONTA1,1
GOTO REP1
return
END

También podría gustarte