Upload
jhon-pichihua-h
View
847
Download
12
Embed Size (px)
Citation preview
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=16F84AINCLUDE <P16F84A.INC>CONT1 EQU 0X20CONT2 EQU 0X21ORG 0x00GOTO INICIOORG 0x05INICIO bsf STATUS,RP0
clrf TRISAbcf STATUS,RP0
ENCLED bsf PORTA,0call RETARDObcf PORTA,0call RETARDOGOTO ENCLED
RETARDO movlw 0xffmovwf CONT1
REP1 movlw 0xffmovwf CONT2
REP2 decfsz CONT2,1GOTO REP2decfsz CONT1,1GOTO REP1RETURNEND
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=16f84AINCLUDE "P16F84A.INC"COMPLEMENTO EQU 0X0CORG 0X00GOTO INICIOORG 0X05INICIO bsf STATUS,5
Movlw 0XFFMovwf TRISAClrf TRISBBcf STATUS,5
BUCLE movf PORTA,0Movwf COMPLEMENTOComf COMPLEMENTO,0Movwf PORTBGOTO BUCLEEND
OSC1/CLKIN16
RB0/INT 6
RB1 7
RB2 8
RB3 9
RB4 10
RB5 11
RB6 12
RB7 13
RA0 17
RA1 18
RA2 1
RA3 2
RA4/T0CKI 3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
R110k
X1
C1
1nF
C2
1nF
D1
R2330
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
R110k
X1
C1
1nF
C2
1nF
10
1010
0
101
3. Hacer un código en Assembler para obtener por el puerto B el dato del puerto A multiplicado por tresSolución:
LIST P=16F84AINCLUDE "P16F84A.INC"SUMA1 EQU 0X0CSUMA2 EQU 0X0DORG 0X00GOTO INICIOORG 0X05INICIO bsf STATUS,5
movlw 0XFFmovwf TRISAclrf TRISBbcf STATUS,5
clrf PORTAclrf PORTB
;…………………………………….BUCLE movf PORTA,0
addwf PORTA,0movwf SUMA1
movf PORTA,0addwf SUMA1,0movwf PORTBGOTO BUCLEEND
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=16F84AINCLUDE <P16F84A.INC>;……………………………………...INTERCAMB EQU 0X0CORG 0X00GOTO INICIOORG 0X05;………………………………….....INICIO bsf STATUS,5
movlw 0xffmovwf TRISAclrf TRISBbcf STATUS,5
;………………………………………BUCLE movf PORTA,0
movwf INTERCAMBswapf INTERCAMB,0movwf PORTBGOTO BUCLEEND
OSC1/CLKIN16
RB0/INT6
RB17
RB2 8
RB3 9
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
0 0 0 1 1
10010000
R110k
OSC1/CLKIN16
RB0/INT 6
RB1 7
RB2 8
RB3 9
RB4 10
RB5 11
RB6 12
RB7 13
RA0 17
RA1 18
RA2 1
RA3 2
RA4/T0CKI 3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
R110k
R210k
R310k
R410k
R510k
R610k
R7330
R8330
R9330
R10330
R11330
R12330
R13330
R14330
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=16F84AINCLUDE <P16F84A.INC>AUX EQU 0X0CORG 0X00GOTO INICIOORG 0X05INICIO bsf STATUS,5
movlw 0xffmovwf TRISAclrf TRISBbcf STATUS,5clrf PORTB
BUCLE movf PORTA,0movwf AUXrlf AUX,1bsf AUX,0movf AUX,0movwf PORTBGOTO BUCLEEND
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=16F84AINCLUDE <P16F84A.INC>CONTA1 EQU 0X0CCONTA2 EQU 0X0DORG 0X00GOTO INICIOINICIO bsf STATUS,5
clrf TRISBbcf STATUS,5movlw 0x01movwf PORTB
BUCLE call RETARDOrlf PORTB,1GOTO BUCLE
RETARDO movlw 0xffmovwf CONTA1
r1 movlw 0xffmovwf CONTA2
r2 decfsz CONTA2,1GOTO r2decfsz CONTA1,1GOTO r1returnEND
OSC1/CLKIN16
RB0/INT 6
RB1 7
RB2 8
RB3 9
RB4 10
RB5 11
RB6 12
RB7 13
RA0 17
RA1 18
RA2 1
RA3 2
RA4/T0CKI 3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
R110k
R210k
R310k
R410k
R510k
R610k
R7330
R8330
R9330
R10330
R11330
R12330
R13330
R14330
OSC1/CLKIN16
RB0/INT 6
RB1 7
RB2 8
RB3 9
RB4 10
RB5 11
RB6 12
RB7 13
RA0 17
RA1 18
RA2 1
RA3 2
RA4/T0CKI 3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
R110k
R7330
R8330
R9330
R10330
R11330
R12330
R13330
R14330
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 programaLIST P=16F84AINCLUDE <P16F84A.INC>; Declaración de registros de propósito generalCONTA1 EQU 0X0CCONTA2 EQU 0X0D; Ubicación en la memoria de programaORG 0X00GOTO INICIOORG 0X05; Configuración de puertosINICIO bsf STATUS,5
clrf TRISBbcf STATUS,5
; Carga de dato al puerto Bclrf PORTBmovlw 0xc0movwf PORTB
; inicio del bucle infinitoBUCLE call RETARDO
rrf PORTB,1GOTO BUCLE
; retardo para desplazamiento a la derechaRETARDO movlw 0xff
movwf CONTA1r1 movlw 0xff
movwf CONTA2r2 decfsz CONTA2,1
GOTO r2decfsz CONTA1,1GOTO r1returnEND
OSC1/CLKIN16
RB0/INT 6
RB1 7
RB2 8
RB3 9
RB4 10
RB5 11
RB6 12
RB7 13
RA0 17
RA1 18
RA2 1
RA3 2
RA4/T0CKI 3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
R110k
R7330
R8330
R9330
R10330
R11330
R12330
R13330
R14330
8. Hacer un código en Assembler para un contador binario ascendente visualizar por el puerto B.
Solución:; Inicio del programaLIST P=16F84AINCLUDE <P16F84A.INC>; Declaración de registros de propósito generalCONTA1 EQU 0X0FCONTA2 EQU 0X10; Ubicación en la memoria de programaORG 0x00GOTO INICIOORG 0x05; Configuración de puertosINICIO bsf STATUS,5
clrf TRISBbcf STATUS,5
; Poner a cero el puerto Bclrf PORTBCALL RETARDO
; Incrementar puerto BBUCLE incf PORTB,1
CALL RETARDOGOTO BUCLE
; Retardo para conteo ascendenteRETARDO clrf CONTA1REP1 clrf CONTA2REP2 incfsz CONTA2,1
GOTO REP2incfsz CONTA1,1GOTO REP1RETURNEND
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
R110k
R7330
R8330
R9330
R10330
R11330
R12330
R13330
R14330
9. Hacer un código en Assembler para un contador binario descendente visualizar por el puerto B.Solución:
; Inicio del p´rogramaLIST P=16F84AINCLUDE <P16F84A.INC>; Declaración de registros de propósito generalCONTA1 EQU 0X0FCONTA2 EQU 0X10; Ubicación en la memoria de programaORG 0x00GOTO INICIOORG 0x05; Configuración de puertosINICIO bsf STATUS,5
clrf TRISBbcf STATUS,5
; Cargar datos al puerto Bmovlw 0xffmovwf PORTBCALL RETARDO
; Inicio del bucle infinitoBUCLE decf PORTB,1
CALL RETARDOGOTO BUCLE
; Retardo para conteo descendenteRETARDO clrf CONTA1REP1 clrf CONTA2REP2 incfsz CONTA2,1
GOTO REP2incfsz CONTA1,1GOTO REP1RETURNEND
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
R110k
R7330
R8330
R9330
R10330
R11330
R12330
R13330
R14330
10. Hacer un código en Assembler para luces secuenciales llamado desde una tabla mostrar por el puerto B.Solución:
LIST P=16F84AINCLUDE <P16F84A.INC>CONTA1 EQU 0X0CCONTA2 EQU 0X0DCONTA3 EQU 0X0EBYTE EQU 0X0FORG 0X00GOTO INICIOORG 0X05INICIO bsf STATUS,5
clrf PORTBbcf STATUS,5clrf PORTBclrf BYTE
BUCLE btfsc BYTE,4clrf BYTEmovf BYTE,0call TABLAmovwf PORTB
; Rutina del retardomovlw D'20movwf CONTA1
LOOP1 movwf D'20movwf CONTA2
LOOP2 movlw D'50movwf CONTA3
LOOP3 decfsz CONTA3,1GOTO LOOP3decfsz CONTA2,1GOTO LOOP2decfsz CONTA1,1GOTO LOOP1incf BYTE,1GOTO BUCLE
; Retorno de w con el valor binario correspondiente.TABLAaddwf 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
11001100
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
Nivel 11. Mediante un display alfanumérico mostrar en forma descendente las letras del
alfabeto de Z a A.
Solución:
LIST P=16F877AINCLUDE <P16F877A.INC>AUX1 EQU 0X22AUX2 EQU 0X23 ORG 0X00GOTO INICIOORG 0X05
INICIO bsf STATUS,5clrf TRISBclrf TRISCbcf STATUS,5
BUCLE clrf PORTB clrf PORTC movlw b'00001001' ;Z movwf PORTB movlw b'00010001' movwf PORTC CALL RETARDO movlw b'01000000' ;Y movwf PORTB movlw b'00001001' movwf PORTC CALL RETARDO movlw b'01000000' ;X movwf PORTB movlw b'00010101' movwf PORTC CALL RETARDO movlw b'00110110' ;W movwf PORTB 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
RA0/AN02
RA1/AN13
RA2/AN2/VREF-/CVREF4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RE0/AN5/RD8
RE1/AN6/WR9
RE2/AN7/CS10
OSC1/CLKIN13
OSC2/CLKOUT14
RC1/T1OSI/CCP216
RC2/CCP117
RC3/SCK/SCL18
RD0/PSP019
RD1/PSP120
RB7/PGD40
RB6/PGC39
RB538
RB437
RB3/PGM36
RB235
RB134
RB0/INT33
RD7/PSP730
RD6/PSP629
RD5/PSP528
RD4/PSP427
RD3/PSP322
RD2/PSP221
RC7/RX/DT26
RC6/TX/CK25
RC5/SDO24
RC4/SDI/SDA23
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI15
MCLR/Vpp/THV1
U3
PIC16F877ASRCFILE=..\ejem1.hex
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 movlw b'00100010' movwf PORTC CALL RETARDO movlw b'00111111' ;O movwf PORTB movlw b'00000000' movwf PORTC CALL RETARDO movlw b'01110110' ;N movwf PORTB movlw b'00000100' movwf PORTC CALL RETARDO movlw b'01110110' ;M movwf PORTB 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
RA0/AN02
RA1/AN13
RA2/AN2/VREF-/CVREF4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RE0/AN5/RD8
RE1/AN6/WR9
RE2/AN7/CS10
OSC1/CLKIN13
OSC2/CLKOUT14
RC1/T1OSI/CCP216
RC2/CCP117
RC3/SCK/SCL18
RD0/PSP019
RD1/PSP120
RB7/PGD40
RB6/PGC39
RB538
RB437
RB3/PGM36
RB235
RB134
RB0/INT33
RD7/PSP730
RD6/PSP629
RD5/PSP528
RD4/PSP427
RD3/PSP322
RD2/PSP221
RC7/RX/DT26
RC6/TX/CK25
RC5/SDO24
RC4/SDI/SDA23
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI15
MCLR/Vpp/THV1
U3
PIC16F877ASRCFILE=..\ejem1.hex
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 movlw b'00110001' ;F movwf PORTB movlw b'00100010' movwf PORTC CALL RETARDO 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 AUX1REP1 clrf AUX2REP2 incfsz AUX2,1 GOTO REP2 decfsz AUX1,1 GOTO REP1 return END
RA0/AN02
RA1/AN13
RA2/AN2/VREF-/CVREF4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RE0/AN5/RD8
RE1/AN6/WR9
RE2/AN7/CS10
OSC1/CLKIN13
OSC2/CLKOUT14
RC1/T1OSI/CCP216
RC2/CCP117
RC3/SCK/SCL18
RD0/PSP019
RD1/PSP120
RB7/PGD40
RB6/PGC39
RB538
RB437
RB3/PGM36
RB235
RB134
RB0/INT33
RD7/PSP730
RD6/PSP629
RD5/PSP528
RD4/PSP427
RD3/PSP322
RD2/PSP221
RC7/RX/DT26
RC6/TX/CK25
RC5/SDO24
RC4/SDI/SDA23
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI15
MCLR/Vpp/THV1
U3
PIC16F877ASRCFILE=..\ejem1.hex
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=16F877INCLUDE "P16F877.INC"BIT0 EQU 0X20BIT1 EQU 0X21BIT2 EQU 0X22ORG 0X00GOTO INICIOORG 0X05INICIO bsf STATUS,5
movlw b'11111111'movwf TRISCclrf TRISBbcf STATUS,5movfw PORTCmovwf BIT0movwf BIT1movwf BIT2movlw b'00000011'andwf BIT0,1movlw b'00000011'subwf BIT0,0btfss STATUS,2GOTO PUERTOB0bsf PORTB,0GOTO ORRR
PUERTOB0 bcf PORTB,0GOTO ORRR
ORRR movlw b'00001100'andwf BIT1,1movlw b'00000000'subwf BIT1,1btfss STATUS,2GOTO PUERTOB1bcf PORTB,1GOTO XORRR
PUERTOB1 bsf PORTB,1GOTO XORRR
XORRR movlw b'00110000'andwf BIT2,1movlw b'00000000'subwf BIT2,0btfss STATUS,2GOTO MAYORGOTO IGUAL
IGUAL bcf PORTB,2GOTO INICIO
MAYOR movlw b'00110000'subwf BIT2,0btfss STATUS,2GOTO DIFERENTECEROGOTO IGUAL
DIFERENTECERO bsf PORTB,2GOTO INICIOEND
RA0/AN02
RA1/AN13
RA2/AN2/VREF-/CVREF4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RE0/AN5/RD8
RE1/AN6/WR9
RE2/AN7/CS10
OSC1/CLKIN13
OSC2/CLKOUT14
RC1/T1OSI/CCP216
RC2/CCP117
RC3/SCK/SCL18
RD0/PSP019
RD1/PSP120
RB7/PGD40
RB6/PGC39
RB538
RB437
RB3/PGM36
RB235
RB134
RB0/INT33
RD7/PSP730
RD6/PSP629
RD5/PSP528
RD4/PSP427
RD3/PSP322
RD2/PSP221
RC7/RX/DT26
RC6/TX/CK25
RC5/SDO24
RC4/SDI/SDA23
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI15
MCLR/Vpp/THV1
U1
PIC16F877A
AND
OR
XOR
012345
011
1 0 1 0 0 1
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=16F84AINCLUDE "P16F84A.INC"ORG 0X00GOTO INICIOORG 0X05
INICIO bsf STATUS,5movlw 0xffmovwf TRISAclrf TRISBbcf STATUS,5movlw b'00000000'subwf PORTA,0btfss STATUS,2GOTO UNOGOTO IMPRIME1
IMPRIME1 movlw b'10101010'movwf PORTBGOTO INICIO
UNO movlw b'00000001'subwf PORTA,0btfss STATUS,2GOTO DOSGOTO IMPRIME2
IMPRIME2 movlw b'01010101'movwf PORTBGOTO INICIO
DOS movlw b'00000010'subwf PORTA,0btfss STATUS,2GOTO TRESGOTO IMPRIME3
IMPRIME3 movlw b'00001111'movwf PORTBGOTO INICIO
TRES movlw b'11110000'movwf PORTBGOTO INICIOEND
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
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 0x0cORG 0x00 GOTO INICIOORG 0x05
INICIO clrf PORTB
bsf STATUS,5clrf TRISBmovlw b'00000011'movwf TRISA bcf STATUS,5
clrf TEMP
LOOP movf PORTA,W andlw b'00000011' movwf TEMP btfsc STATUS,Z GOTO APAGAR
movlw b'00000001'subwf TEMP,0btfsc STATUS,2 GOTO ENCENDER
movlw b'00000010'subwf TEMP,Wbtfsc STATUS,2 GOTO ENCENDER
APAGAR bcf PORTB,0 GOTO LOOP
ENCENDER bsf PORTB,0 GOTO LOOPend
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
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á apagadoSolució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 ; ProcesadorINCLUDE <P16F84A.INC> ; definición de los operando utilizados
NUM EQU d'1'; ZONA DE CODIGOSORG 0 ; el programa comienza en la dirección 0 de memoria de programa
INICIO bsf STATUS,RP0movlw b'00000000'movwf TRISBmovlw b'00000111'movwf TRISAbcf STATUS,RP0
PRINCIPALmovf PORTA,Wandlw b'000000111'call salidamovwf PORTBgoto PRINCIPAL
salida addwf PCL,Fretlw b'0'retlw b'0'retlw b'0'retlw b'1'retlw b'0'retlw b'1'retlw b'1'retlw b'0'
END
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
6. Efecto de luces tipo Auto Fantástico con un 16F84A por el puerto b, RB0 a RB7Solución:
LIST P=16F84AINCLUDE "P16F84A.INC"CONTA1 EQU 0X0CCONTA2 EQU 0X0DORG 0X00GOTO INICIOINICIO bsf STATUS,5
clrf TRISBbcf STATUS,5movlw b'10000000'movwf PORTBCALL RETARDOmovlw b'01000000'movwf PORTBCALL RETARDOmovlw b'00100000'movwf PORTBCALL RETARDOmovlw b'00010000'movwf PORTBCALL RETARDOmovlw b'00001000'movwf PORTBCALL RETARDOmovlw b'00000100'movwf PORTBCALL RETARDOmovlw b'00000010'movwf PORTBCALL RETARDOmovlw b'00000001'movwf PORTBCALL RETARDOmovlw b'00000010'movwf PORTBCALL RETARDOmovlw b'00000100'movwf PORTBCALL RETARDOmovlw b'00001000'movwf PORTBCALL RETARDO
RETARDO clrf CONTA1REP1 clrf CONTA2REP2 incfsz CONTA2,1GOTO REP2incfsz CONTA1,1GOTO REP1RETURNEND
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA2 1
RA3 2
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
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 0X0CCONTA2 EQU 0X0DCONTADOR EQU 0X0E ORG 0x00 GOTO INICIO ORG 0x05
INICIO bsf STATUS,5 bsf TRISA,0 bcf TRISA,1 clrf TRISB bcf STATUS,5 clrf CONTADOR clrf PORTB movf CONTADOR,0 movwf PORTB
EXPLORA btfsc PORTA,0 goto EXPLORA goto SI
SI incf CONTADOR,1 Call RETARDOmovf CONTADOR,0
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 CONTADORclrf PORTBgoto EXPLORA
RETARDO movlw 0xffmovwf CONTA1
REP1 movlw 0xffmovwf CONTA2
REP2 decfsz CONTA2,1GOTO REP2decfsz CONTA1,1GOTO REP1RETURN
End
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA0 17
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
1
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=16F84AINCLUDE <P16F84A.INC>AUX1 EQU 0X0CAUX2 EQU 0X0DCONTA1 EQU 0X0ECONTA2 EQU 0X0FORG 0X00GOTO INICIOORG 0X05INICIO bsf STATUS,5
clrf TRISBbsf TRISA,0bcf STATUS,5clrf PORTB
BUCLE1 btfss PORTA,0GOTO BUCLE1clrf PORTBclrf AUX1clrf AUX2bsf PORTB,0
BUCLE2 CALL RETARDOrlf PORTB,1btfss PORTB,0GOTO BUCLE2
BUCLE4 rrf PORTB,1CALL RETARDObtfss PORTB,0GOTO BUCLE4incf AUX1movlw 0x07subwf AUX1,0btfss STATUS,2GOTO BUCLE2
BUCLE3 clrf PORTBincf AUX2bsf PORTB,0CALL RETARDO
bsf PORTB,1CALL RETARDO
bsf PORTB,2CALL RETARDO
bsf PORTB,3CALL RETARDO
bsf PORTB,4CALL RETARDO
bsf PORTB,5CALL RETARDO
bsf PORTB,6CALL RETARDO
bsf PORTB,7CALL RETARDO
movlw 0x05subwf AUX2,0btfss STATUS,2GOTO BUCLE3
clrf PORTB GOTO BUCLE1RETARDO movlw 0xff
movwf CONTA1;CONTADOR1 = 0XFFREP1 movlw 0xff
movwf CONTA2;CONTADOR2 = 0XFFREP2 decfsz CONTA2,1
GOTO REP2decfsz CONTA1,1GOTO REP1RETURN
END
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
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 nuevamenteSolución:
LIST P=16f84AINCLUDE "P16f84A.INC"
CONTADOR1 EQU 0X20CONTADOR2 EQU 0X21AUX1 EQU 0X22AUX2 EQU 0X23
ORG 0X00GOTO INICIOORG 0X05
INICIO bsf STATUS,RP0bcf TRISA,4clrf TRISBbcf STATUS,RP0clrf PORTB
VUELTA clrf STATUSmovlw .4addwf PORTB,1CALL RETARDOmovf PORTB,0sublw .40
btfss STATUS,ZGOTO VUELTA
VOLVER CALL RETARDObsf PORTA,4movlw .4subwf PORTB,1CALL RETARDOmovf PORTB,0sublw .4
btfss STATUS,ZGOTO VOLVERbcf PORTA,4GOTO VUELTA
RETARDO movlw 0xffmovwf AUX1
REP1 movlw 0xffmovwf AUX2
REP2 decfsz AUX2,1goto REP2decfsz AUX1,1GOTO REP1RETURNEND
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
0
00011000
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=16F877INCLUDE "P16f877.INC"NUMERO1 EQU 0X20NUMERO2 EQU 0X21CONTA1 EQU 0X23CONTA2 EQU 0X24ORG 0X00INICIO bsf STATUS,5
movlw 0xFFmovwf TRISBclrf TRISCbcf TRISA,0bcf STATUS,5
BUCLE clrf PORTAmovlw 0x0Fandwf PORTB,0movwf NUMERO1movlw 0xF0andwf PORTB,0movwf NUMERO2swapf NUMERO2,1movfw NUMERO1subwf NUMERO2,0btfss STATUS,0GOTO MAYORGOTO MENORGOTO BUCLE
MAYOR movfw NUMERO1addwf NUMERO2,0movwf PORTC
INCRE CALL RETARDOincfsz PORTCGOTO INCREGOTO FINAL
RETARDO movlw 0xffmovwf CONTA1
REP1 movlw 0xffmovwf CONTA2
REP2 decfsz CONTA2,1GOTO REP2decfsz CONTA1,1GOTO REP1RETURN
IMPRIME bsf PORTA,0'GOTO BUCLE
MENOR movfw NUMERO1subwf NUMERO2,0btfsc STATUS,2GOTO IMPRIMEcomf NUMERO2,0movwf PORTCGOTO BUCLE
FINAL movlw b'00000000'movwf PORTCGOTO BUCLELEND
RA0/AN02
RA1/AN13
RA2/AN2/VREF-4
RA4/T0CKI6
RA5/AN4/SS7
RE0/AN5/RD8
RE1/AN6/WR9
RE2/AN7/CS10
OSC1/CLKIN13
OSC2/CLKOUT14
RC1/T1OSI/CCP216
RC2/CCP117
RC3/SCK/SCL 18
RD0/PSP019
RD1/PSP120
RB7/PGD40
RB6/PGC39
RB538
RB437
RB3/PGM36
RB235
RB134
RB0/INT33
RD7/PSP730
RD6/PSP629
RD5/PSP528
RD4/PSP427
RD3/PSP322
RD2/PSP221
RC7/RX/DT26
RC6/TX/CK25
RC5/SDO24
RC4/SDI/SDA 23
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI15
MCLR/Vpp/THV1
U1
PIC16F877
0011
111 0
NUMERO 1
NUMERO2
10001111
0
11. Utilizando un PIC16F84, realice un contador binario de 5 a 55 por medio de leds, en bucle infinito.
Solución:
LIST P=16F84AINCLUDE "P16F84A.INC"
CONTA1 EQU 0X0CCONTA2 EQU 0X0D
ORG 0x00 GOTO INICIOORG 0X05
INICIO bsf STATUS,5 movlw .0 movwf PORTB bcf STATUS,5 clrf PORTB
BUCLE movlw .5movwf PORTB
BUCLE1 CALL RETARDOincf PORTB
movlw .55subwf PORTB,0
btfss STATUS,ZGOTO BUCLE1CALL RETARDOGOTO BUCLE
RETARDO movlw 0xffmovwf CONTA1
REP1 movlw 0xffmovwf CONTA2
REP2 decfsz CONTA2,1GOTO REP2
decfsz CONTA1,1GOTO REP1RETURNEND
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA2 1
RA3 2
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
01111000
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 = 16F84AINCLUDE "P16F84A.INC"CONTA1 EQU 0X0CCONTA2 EQU 0X0DORG 0X00GOTO INICIOORG 0X05INICIO bsf STATUS,5
clrf TRISBmovlw 0XFFmovwf TRISAbcf STATUS,5
BUCLE btfsc PORTA,0GOTO BUCLE2btfsc PORTA,1GOTO IZQUIERDAGOTO BUCLE3
BUCLE2 btfsc PORTA,1GOTO BUCLE3GOTO DERECHA
BUCLE3 clrf PORTBGOTO BUCLE
RETARDO movlw 0xffmovwf CONTA1
REP1 movlw 0xffmovwf CONTA2
REP2 decfsz CONTA2,1GOTO REP2decfsz CONTA1,1GOTO REP1RETURN
DERECHA movlw B'00000000'movwf PORTBCALL RETARDOmovlw B'11100000'movwf PORTBCALL RETARDOmovlw B'01110000'movwf PORTBCALL RETARDOmovlw B'00111000'movwf PORTBCALL RETARDOmovlw B'00011100'movwf PORTBCALL RETARDOmovlw B'00001110'movwf PORTBCALL RETARDOmovlw B'00000111'movwf PORTB
OSC1/CLKIN16
RB0/INT6
RB1 7
RB2 8
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
R210k
R3330
R4330
R5330
R6330
R7330
R8330
R9330
R10330
D1LED-GREEN
D2LED-GREEN
D3LED-GREEN
D4LED-GREEN
D5LED-GREEN
D6LED-GREEN
D7LED-GREEN
D8LED-GREEN
R1110k
DERECHA A IZQUIERDA
IZQUIERDA A DERECHA
CALL RETARDOmovlw B'00000000'movwf PORTBCALL RETARDOGOTO BUCLE
IZQUIERDA movlw B'00000000'movwf PORTBCALL RETARDOmovlw B'00000111'movwf PORTBCALL RETARDOmovlw B'00001110'movwf PORTBCALL RETARDOmovlw B'00011100'movwf PORTBCALL RETARDOmovlw B'00111000'movwf PORTBCALL RETARDOmovlw B'01110000'movwf PORTBCALL RETARDOmovlw B'11100000'movwf PORTBCALL RETARDOmovlw B'00000000'movwf PORTBCALL RETARDOGOTO BUCLEEND
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=16F84AINCLUDE "P16F84A.INC"DIEZ EQU 0X0CCONTA1 EQU 0X0DCONTA2 EQU 0X0ECINCO EQU 0X0FSEIS EQU 0X10 ORG 0X00GOTO INICIOINICIO bsf STATUS,5
movlw 0XFFmovwf TRISAclrf TRISBbcf STATUS,5movlw D'10movwf DIEZmovlw D'5movwf CINCOmovlw D'6movwf SEIS
BUCLE movlw b'01'subwf PORTA,0btfss STATUS,2GOTO DOS
IMPRIME movlw b'11111111'movwf PORTBCALL RETARDOclrf PORTBCALL RETARDOdecfsz DIEZGOTO IMPRIMEGOTO BUCLE
DOS movlw b'10'subwf PORTA,0btfss STATUS,2GOTO TRESGOTO IMPRIME1
IMPRIME1 movlw b'00011000'movwf PORTBcall RETARDOmovlw b'00100100'movwf PORTBcall RETARDOmovlw b'01000010'movwf PORTBcall RETARDOmovlw b'10000001'movwf PORTBcall RETARDOmovlw b'01000010'movwf PORTBcall RETARDOmovlw b'00100100'movwf PORTBcall RETARDOmovlw b'00011000'movwf PORTBcall RETARDOdecfsz CINCOGOTO IMPRIME1GOTO BUCLE
TRES movlw b'00'subwf PORTA,0btfss STATUS,2GOTO IMPRIME2GOTO BUCLE
IMPRIME2 clrf PORTBIMPRIME3 movlw D'6
addwf PORTB,1call RETARDOdecfsz SEIS,1GOTO IMPRIME3GOTO BUCLE
RETARDO movlw 0xffmovwf CONTA1
REP1 movlw 0xffmovwf CONTA2
REP2 decfsz CONTA2,1goto REP2decfsz CONTA1,1goto REP1RETURNEND
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
01000010
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=16F84AINCLUDE "P16F84A.INC"CONTA1 EQU 0X0CCONTA2 EQU 0X0D ORG 0X00ORG 0X05
bsf STATUS,5movlw 0xFFmovwf TRISAclrf TRISBbcf STATUS,5
BUCLE movlw b'0001'subwf PORTA,0btfss STATUS,2GOTO SEGUNDOmovlw b'00000001'movwf PORTB
IMPRIMIR1 CALL RETARDOrlf PORTB,1btfss STATUS,0GOTO IMPRIMIR1GOTO BUCLE
SEGUNDO movlw b'0010'subwf PORTA,0btfss STATUS,2GOTO TERCEROmovlw b'10000000'movwf PORTB
IMPRIMIR2 CALL RETARDOrrf PORTB,1btfss STATUS,0GOTO IMPRIMIR2GOTO BUCLE
TERCERO movlw b'0100'subwf PORTA,0btfss STATUS,2GOTO CUARTOmovlw b'00000000'movwf PORTBCALL RETARDOmovlw b'00000001'movwf PORTBCALL RETARDOmovlw b'00000011'movwf PORTBCALL RETARDOmovlw b'00000111'movwf PORTBCALL RETARDOmovlw b'00001111'
movwf PORTBCALL RETARDOmovlw b'00011111'movwf PORTBCALL RETARDOmovlw b'00111111'movwf PORTBCALL RETARDOmovlw b'01111111'movwf PORTBCALL RETARDOmovlw b'11111111'movwf PORTBCALL RETARDOGOTO BUCLE
CUARTO movlw b'1000'subwf PORTA,0btfss STATUS,2GOTO BUCLEmovlw b'00000000'movwf PORTBCALL RETARDOmovlw b'10000000'movwf PORTBCALL RETARDOmovlw b'11000000'movwf PORTBCALL RETARDOmovlw b'11100000'movwf PORTBCALL RETARDOmovlw b'11110000'movwf PORTBCALL RETARDOmovlw b'11111000'movwf PORTBCALL RETARDOmovlw b'11111100'movwf PORTBCALL RETARDOmovlw b'11111110'movwf PORTBCALL RETARDOmovlw b'11111111'movwf PORTBCALL RETARDOGOTO BUCLE
RETARDO movlw 0xffmovwf CONTA1
REP1 movlw 0xffmovwf CONTA2
REP2 decfsz CONTA2,1goto REP2decfsz CONTA1,1goto REP1RETURNEND
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB7 13
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
1 1 1 1 1 1 0 0
R510k
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=16F84AINCLUDE "P16F84A.INC" CONTA1 EQU 0X0CCONTA2 EQU 0X0DAUX EQU 0X0EORG 0x00 GOTO INICIOORG 0X05 INICIO bsf STATUS,5
bsf TRISA,0bsf TRISA,1bsf TRISA,2clrf TRISBbcf STATUS,5 clrf PORTA clrf PORTB
BUCLEmovf PORTA,0movwf AUXbtfsc STATUS,ZGOTO CEROMovlw b'00000001'Subwf AUX,0btfsc STATUS,ZGOTO UNOMovlw b'00000010'subwf AUX,0btfsc STATUS,ZGOTO DOSMovlw b'00000011'Subwf AUX,0btfsc STATUS,ZGOTO TRESmovlw b'00000100'subwf AUX,0btfsc STATUS,ZGOTO CUATROmovlw b'00000101'subwf AUX,0btfsc STATUS,ZGOTO CINCOMovlw b'00000110'subwf AUX,0btfsc STATUS,ZGOTO SEIS
;******* SIETEmovlw b'01111111'movwf PORTBGOTO BUCLE
CERO movlw b'0000000'movwf PORTBGOTO BUCLE
UNO movlw b'00000001'movwf PORTBGOTO BUCLE
DOS movlw b'00000011'movwf PORTBGOTO BUCLE
TRES movlw b'00000111'movwf PORTBGOTO BUCLE
CUATRO movlw b'00001111'movwf PORTBGOTO BUCLE
CINCO movlw b'00011111'movwf PORTBGOTO BUCLE
SEIS movlw b'00111111'movwf PORTBGOTO BUCLE
RETARDO movlw 0xffmovwf CONTA1;CONTADOR1 = 0XFF
REP1 movlw 0xffmovwf CONTA2;CONTADOR2 = 0XFF
REP2 decfsz CONTA2,1GOTO REP2decfsz CONTA1,1GOTO REP1RETURNEND
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA2 1
RA3 2
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A
101
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 PROGRAMAlist p = 16F84AINCLUDE <P16F84A.INC>
CONTA1 EQU 0X0CCONTA2 EQU 0X0DAUX EQU 0X0E
ORG 0X00GOTO INICIOORG 0X05
INICIO bsf STATUS,5 clrf TRISA clrf TRISB bcf STATUS,5
clrf PORTA clrf PORTB
BUCLE AUMENTO incf PORTB call RETARDO
movf PORTB,0sublw 0X09btfss STATUS,ZGOTO AUMENTOincf PORTAclrf PORTBmovf PORTA,0sublw 0x0Abtfss STATUS,Z
GOTO AUMENTOclrf PORTAGOTO BUCLE
RETARDO clrf CONTA1REP1 clrf CONTA2REP2 incfsz CONTA2,1 GOTO REP2 decfsz CONTA1,1 GOTO REP1 return END
OSC1/CLKIN16
RB0/INT6
RB17
RB28
RB39
RB410
RB511
RB612
RB713
RA017
RA118
RA21
RA32
RA4/T0CKI3
OSC2/CLKOUT15
MCLR4
U1
PIC16F84A