Ejercicios Resueltos de Microcontrolador

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 29

Ejercicios resueltos de Microcontroladores

Lenguaje de programación Nivel 0

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

Clrf TRISB RB0/INT


6 1
R1 7 0
Bcf STATUS,5 10k
RB1
RB2
8
9 1
BUCLE movf PORTA,0 RB3
RB4
10
0
11
Movwf COMPLEMENTO RB5
RB6
12
1
13
Comf COMPLEMENTO,0 RB7
PIC16F84A
Movwf PORTB
GOTO BUCLE
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 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

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

ORG 0X00 RB0/INT


6
7

GOTO INICIO
RB1
R1 RB2
8
10k 9
RB3
10
ORG 0X05 RB4
RB5
RB6
11
12

;…………………………………..... PIC16F84A
RB7
13

INICIO bsf STATUS,5


movlw 0xff
movwf TRISA R7 R8 R9 R10R11R12R13R14
clrf TRISB 330 330 330 330 330 330 330 330

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

movlw 0xff RA4/T0CKI


3

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

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

CONTA2 EQU 0X0D RB0/INT


RB1
6
7
R1
ORG 0X00 10k
RB2
RB3
8
9
10
GOTO INICIO RB4
RB5
11
12
INICIO bsf STATUS,5 RB6
RB7
13

clrf TRISB PIC16F84A

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:

; 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
3
ORG 0X00 RA4/T0CKI

GOTO INICIO RB0/INT


6
7
ORG 0X05 R1
RB1
RB2
8
9
; Configuración de puertos 10k RB3
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 U1
GOTO r2 16
OSC1/CLKIN RA0
17
15 18
decfsz CONTA1,1 OSC2/CLKOUT RA1
1
RA2
GOTO r1 4
MCLR RA3
2
3
return RA4/T0CKI

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

BUCLE clrf PORTB U3


clrf PORTC 13
14
OSC1/CLKIN RB0/INT
33
34
movlw b'00001001' ;Z OSC2/CLKOUT RB1
RB2
35
2 36
movwf PORTB 3
RA0/AN0 RB3/PGM
37
RA1/AN1 RB4
movlw b'00010001' 4
RA2/AN2/VREF-/CVREF RB5
38
5 39
movwf PORTC 6
RA3/AN3/VREF+ RB6/PGC
40
RA4/T0CKI/C1OUT RB7/PGD
CALL RETARDO 7
RA5/AN4/SS/C2OUT
15
movlw b'01000000' ;Y 8
RE0/AN5/RD
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
16
movwf PORTB 9
10
RE1/AN6/WR RC2/CCP1
17
18
RE2/AN7/CS RC3/SCK/SCL
movlw b'00001001' RC4/SDI/SDA
23
1 24
movwf PORTC MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
CALL RETARDO RC7/RX/DT
26

movlw b'01000000' ;X RD0/PSP0


19
movwf PORTB RD1/PSP1
20
21
RD2/PSP2
movlw b'00010101' RD3/PSP3
22
27
movwf PORTC RD4/PSP4
28
RD5/PSP5
CALL RETARDO RD6/PSP6
29
30
movlw b'00110110' ;W RD7/PSP7

movwf PORTB PIC16F877A


SRCFILE=..\ejem1.hex
movlw b'00010100'
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
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

movwf PORTB RD0/PSP0


19
20
movlw b'00000100' RD1/PSP1
RD2/PSP2
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' 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

movlw b'00100010' RD0/PSP0


19

movwf PORTC RD1/PSP1


20
21
RD2/PSP2
CALL RETARDO RD3/PSP3
22
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A
SRCFILE=..\ejem1.hex
movlw b'00111001' ;E
movwf PORTB
movlw b'00100010'
movwf PORTC
CALL RETARDO
movlw b'00011110' ;D
movwf PORTB
movlw b'00100010'
movwf PORTC
CALL RETARDO
movlw b'00111001' ;C
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 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

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

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
U1
comienza en la dirección 0 de 16 17
memoria de programa OSC1/CLKIN RA0
15 18
OSC2/CLKOUT RA1
1
RA2
INICIO bsf STATUS,RP0 4 2
MCLR RA3
3
movlw b'00000000' RA4/T0CKI
movwf TRISB RB0/INT
6
movlw b'00000111' 7
RB1
8
movwf TRISA RB2
9
RB3
bcf STATUS,RP0 RB4
10
11
RB5
12
PRINCIPAL RB6
13
RB7
PIC16F84A
movf PORTA,W
andlw b'000000111'
call salida
movwf PORTB
goto PRINCIPAL

salida addwf PCL,F


retlw b'0'
retlw b'0'
retlw b'0'
retlw b'1'
retlw b'0'
retlw b'1'
retlw b'1'
retlw b'0'

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

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
RB3
goto SI RB4
10
SI incf CONTADOR,1 RB5
11
12
Call RETARDO RB6
13
RB7
movf CONTADOR,0
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 U1
16 17
OSC1/CLKIN RA0
15 18
ORG 0X00 OSC2/CLKOUT RA1
1
RA2
GOTO INICIO 4
MCLR RA3
2
3
ORG 0X05 RA4/T0CKI 0
6
RB0/INT
7
INICIO bsf STATUS,RP0 RB1
8
RB2
bcf TRISA,4 RB3
9
10
clrf TRISB RB4
RB5
11
bcf STATUS,RP0 RB6
12
13
RB7
clrf PORTB
PIC16F84A

VUELTA clrf STATUS


movlw .4
0
0
0
1
1
0
0
0

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

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

CONTA1 EQU 0X23 1


MCLR/Vpp/THV RB2
35
36
CONTA2 EQU 0X24 0 2
RB3/PGM
37 NUMERO2
RA0/AN0 RB4
3 38
RA1/AN1 RB5
ORG 0X00 4
5
RA2/AN2/VREF- RB6/PGC
39
40
INICIO bsf STATUS,5 6
7
RA3/AN3/VREF+
RA4/T0CKI
RB7/PGD
15
movlw 0xFF RA5/AN4/SS RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
16
8 17
movwf TRISB 9
RE0/AN5/RD
RE1/AN6/WR
RC2/CCP1
RC3/SCK/SCL
18
10 23
clrf TRISC
1
1
1
0

RE2/AN7/CS RC4/SDI/SDA
24
RC5/SDO
25
bcf TRISA,0 RC6/TX/CK
RC7/RX/DT
26

bcf STATUS,5 RD0/PSP0


19
BUCLE clrf PORTA RD1/PSP1
20
21
RD2/PSP2
movlw 0x0F RD3/PSP3
22
1
1
1
1
0
0
0
1

27
RD4/PSP4
andwf PORTB,0 RD5/PSP5
28
29
RD6/PSP6
movwf NUMERO1 RD7/PSP7
30

movlw 0xF0 PIC16F877

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

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

movlw 0XFF RA4/T0CKI


3
DERECHA A IZQUIERDA
6
movwf TRISA RB0/INT
RB1
7
8
RB2
bcf STATUS,5 RB3
9
10
RB4
BUCLE btfsc PORTA,0 RB5
RB6
11
12

GOTO BUCLE2 RB7


13

btfsc PORTA,1 PIC16F84A


R3 R4 R5 R6 R7 R8 R9 R10
GOTO IZQUIERDA 330 330 330 330 330 330 330 330

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

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
8

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:

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

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