ESCUELA POLITECNICA DEL EJERCITO
NOMBRE: LUIS AVILÉS TONATO
MATERIA: MICROCONTROLADORES
TEMA: PROGRAMACIÓN EN PIC C
Ejercicio 1
Escribir un programa que invierta todos los bits del puerto B, cada vez que un registro contadorllegue al valor máximo. El registro comienza la cuenta desde cero hasta llegar al valor máximoposible.Si el PIC trabaja a una frecuencia de 4MHz.
Diagrama de flujo:
Diagrama de bloque:
Pic16f877ALed
PORTD
Led
PORTB
Diseño electrónico:
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/CCP2 16
RC2/CCP1 17
RC3/SCK/SCL 18
RD0/PSP0 19
RD1/PSP1 20
RB7/PGD 40RB6/PGC 39
RB5 38RB4 37
RB3/PGM 36RB2 35RB1 34
RB0/INT 33
RD7/PSP7 30RD6/PSP6 29RD5/PSP5 28RD4/PSP4 27RD3/PSP3 22RD2/PSP2 21
RC7/RX/DT 26RC6/TX/CK 25RC5/SDO 24
RC4/SDI/SDA 23
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI 15
MCLR/Vpp/THV1
U1
PIC16F877A
D1
LED-RED
D2
LED-RED
D3
LED-RED
D4
LED-RED
D5
LED-RED
D6
LED-RED
D7
LED-RED
D8
LED-RED
D9LED-RED
D10LED-RED
D11LED-RED
D12LED-RED
D13LED-RED
D14LED-RED
D15LED-RED
D16LED-RED
Resultados:
Ejercicio 2
Realizar un juego de luces de una rotación secuencial en el encendido de cada led conectado alpuerto B. Si RA0 = 0 la rotación será de derecha a izquierda, y si RA0 = 1 la rotación será deizquierda a derecha.Si el PIC trabaja a una frecuencia de 4MHz, cada led permanece encendido 0.25 segundos (250ms).
Diagrama de flujo:
Diagrama de bloque:
Diseño electrónico:
Pic16f877ASwitchRA0
PORTBleds
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
D1LED-RED
D2LED-RED
D3LED-RED
D4LED-RED
D5LED-RED
D6LED-RED
D7LED-RED
D8LED-RED
R110k
R1(1)
Resultados:
Swicth =0
Rotacion a la izquierda
Swicth =1
Rotacion a la derecha
Ejercicio 3
Escribir un programa que cuente el número de veces que se pulsó la tecla conectada al terminal RA4 y que saque ese valor en binario natural por el Puerto B.Diagrama de flujo:
Diagrama de bloques:
Diagrama electrónico:
Pic16f877APulsadorRA4
PORTBleds
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
R110k
D1LED-RED
D2LED-RED
D3LED-RED
D4LED-RED
D5LED-RED
D6LED-RED
D7LED-RED
D8LED-RED
Resultados:
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/CCP2 16
RC2/CCP1 17
RC3/SCK/SCL 18
RD0/PSP0 19
RD1/PSP1 20
RB7/PGD 40RB6/PGC 39
RB5 38RB4 37
RB3/PGM 36RB2 35RB1 34
RB0/INT 33
RD7/PSP7 30RD6/PSP6 29RD5/PSP5 28RD4/PSP4 27RD3/PSP3 22RD2/PSP2 21
RC7/RX/DT 26RC6/TX/CK 25RC5/SDO 24
RC4/SDI/SDA 23
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI 15
MCLR/Vpp/THV1
U1
PIC16F877A
R110k
D1LED-RED
D2LED-RED
D3LED-RED
D4LED-RED
D5LED-RED
D6LED-RED
D7LED-RED
D8LED-RED
Ejercicio 4
Realizar un circuito que permita mostrar de acuerdo a la siguiente tabla:
Nota:1. Los números ingresados desde el teclado deben tener hasta de 3 dígitos, si ingresa
más dígitos serán considerados como error.
Diagrama de flujo:
Diagrama de bloque:
Diseño Electrónico:
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
D7
14D6
13D5
12D4
11D3
10D2
9D1
8D0
7E
6RW
5RS
4
VSS
1VDD
2VEE
3
LCD1LM016L
1 2 3
4 5 6
7 8 9
0 #
1 2 3
A
B
C
D
R5
10k
R6
10k
R5(1)
L2L1DCBA
C1C2C3C4
E1E2
C5C6C7
E3
Q12N3904
Q22N3904
Q32N3904
R2
1K
R3
1K
R4
1K
E1E2E3
A7
QA13
B1
QB12
C2
QC11
D6
QD10
BI/RBO4
QE9
RBI5
QF15
LT3
QG14
U2
74LS48
C7C6C5C4C3C2C1A
BCD
Q42N3904
D1LED-YELLOW
D2LED-YELLOW
D3LED-YELLOW
D4LED-YELLOW
D5LED-YELLOW
D6LED-YELLOW
R1
220E0
L2 L1 D C B A
E0
Conclusiones:
- Se verificó que el lenguaje C es un lenguaje de alto nivel , la programación en lenguaje C es mas sencilla que en lenguaje ensamblador.
- Se verificó que el software realizado en lenguaje C e implementado al hardware da los mismos resultados que los realizados en ensamblador.
- Se comprobó que las instrucciones que posee pic C nos ahorra tiempo durante la programación.Se comprobó que pic c es una herramienta muy útil y eficaz para realizar proyectos que impliquen mayor complejidad.
Recomendaciones:
- Revisar las diferentes instrucciones y estructura del compilador C para PICs .- Verificar la inicialización de las variables utilizadas y de los puertos.
Bibliografía:
Anexos:
- Manual de usuario ejercicio# 4
MANUAL DE USUARIO:
1) El diseño fue realizado con el pic16f877A.2) Adjuntamos el archivo generado .HEX generado por el compilador picc al circuitos realizado en
proteus.
3) Comenzamos a ejecutar la primera opción:Sw1= ra0Sw2= ra1
Sw1 y sw2 no se presionó. sw1=0; sw2=0
- Se habilita la opción de ingreso por teclado de la siguiente manera:- Para ingresar un numero de 3 dígitos se debe ingresar todos los dígitos por ejemplo:
Para visualizar y guardar los números como el ( 89 , 1 ,100) debemos ingresar por el teclado:089 001100
- Los números se van guardando secuencialmente como estemos ingresando solo digitamos el número completo de 3 dígitos y se guarda automáticamente.
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
D7
14D6
13D5
12D4
11D3
10D2
9D1
8D0
7
E6
RW
5RS
4
VSS
1
VDD
2
VEE
3
LCD1LM016L
1 2 3
4 5 6
7 8 9
0 #
1 2 3
A
B
C
D
R5
10k
R6
10k
R5(1)
L2L1DCBA
C1C2C3C4
E1E2
C5C6C7
E3
Q12N3904
Q22N3904
Q32N3904
R2
1K
R3
1K
R4
1K
E1E2E3
A7
QA13
B1
QB12
C2
QC11
D6
QD10
BI/RBO4
QE9
RBI5
QF15
LT3
QG14
U2
74LS48
C7C6C5C4C3C2C1A
BCD
Q42N3904
D1LED-YELLOW
D2LED-YELLOW
D3LED-YELLOW
D4LED-YELLOW
D5LED-YELLOW
D6LED-YELLOW
R1
220E0
L2 L1 D C B A
E0
- Para salir de la opción de ingreso y grabación de los números debemos cambiar el estado de los switch y presionar el ‘*’.
Sw1 no se presionó y sw2 se presionósw1=0; sw2=1
- Ingresamos a la opción de visualizar los datos en el lcd , de forma secuencial y repetitivamente.- Si se ingresa primero a la opción de ingreso y se quiere cambiar los switch , primero se debe
cambiar el estado de los switch y presionar ‘*’.
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/CCP2 16
RC2/CCP1 17
RC3/SCK/SCL 18
RD0/PSP0 19
RD1/PSP1 20
RB7/PGD 40RB6/PGC 39
RB5 38RB4 37
RB3/PGM 36RB2 35RB1 34
RB0/INT 33
RD7/PSP7 30RD6/PSP6 29RD5/PSP5 28RD4/PSP4 27RD3/PSP3 22RD2/PSP2 21
RC7/RX/DT 26RC6/TX/CK 25RC5/SDO 24
RC4/SDI/SDA 23
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI 15
MCLR/Vpp/THV1
U1
PIC16F877A
D7
14D6
13D5
12D4
11D3
10D2
9D1
8D0
7
E6
RW
5RS
4
VSS
1
VDD
2
VEE
3
LCD1LM016L
1 2 3
4 5 6
7 8 9
0 #
1 2 3
A
B
C
D
R5
10k
R6
10k
R5(1)
L2L1DCBA
C1C2C3C4
E1E2
C5C6C7
E3
Q12N3904
Q22N3904
Q32N3904
R2
1K
R3
1K
R4
1K
E1E2E3
A7 QA 13
B1 QB 12
C2 QC 11
D6 QD 10
BI/RBO4 QE 9
RBI5 QF 15
LT3 QG 14
U2
74LS48
C7C6C5C4C3C2C1A
BCD
Q42N3904
D1LED-YELLOW
D2LED-YELLOW
D3LED-YELLOW
D4LED-YELLOW
D5LED-YELLOW
D6LED-YELLOW
R1
220E0
L2 L1 D C B A
E0
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
D7
14D6
13D5
12D4
11D3
10D2
9D1
8D0
7
E6
RW
5RS
4
VSS
1
VDD
2
VEE
3
LCD1LM016L
1 2 3
4 5 6
7 8 9
0 #
1 2 3
A
B
C
D
R5
10k
R6
10k
R5(1)
L2L1DCBA
C1C2C3C4
E1E2
C5C6C7
E3
Q12N3904
Q22N3904
Q32N3904
R2
1K
R3
1K
R4
1K
E1E2E3
A7
QA13
B1
QB12
C2
QC11
D6
QD10
BI/RBO4
QE9
RBI5
QF15
LT3
QG14
U2
74LS48
C7C6C5C4C3C2C1A
BCD
Q42N3904
D1LED-YELLOW
D2LED-YELLOW
D3LED-YELLOW
D4LED-YELLOW
D5LED-YELLOW
D6LED-YELLOW
R1
220E0
L2 L1 D C B A
E0
Sw1 se presionó y sw2 no se presionó
sw1=1; sw2=0- Si se ingresa primero a la opción de ingreso y se quiere cambiar los switch , primero se debe
cambiar el estado de los switch y presionar ‘*’.
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
D7
14D6
13D5
12D4
11D3
10D2
9D1
8D0
7
E6
RW
5RS
4
VSS
1
VDD
2
VEE
3
LCD1LM016L
1 2 3
4 5 6
7 8 9
0 #
1 2 3
A
B
C
D
R5
10k
R6
10k
R5(1)
L2L1DCBA
C1C2C3C4
E1E2
C5C6C7
E3
Q12N3904
Q22N3904
Q32N3904
R2
1K
R3
1K
R4
1K
E1E2E3
A7
QA13
B1
QB12
C2
QC11
D6
QD10
BI/RBO4
QE9
RBI5
QF15
LT3
QG14
U2
74LS48
C7C6C5C4C3C2C1A
BCD
Q42N3904
D1LED-YELLOW
D2LED-YELLOW
D3LED-YELLOW
D4LED-YELLOW
D5LED-YELLOW
D6LED-YELLOW
R1
220E0
L2 L1 D C B A
E0
Sw1 y sw2 se presionó sw1=1; sw2=1
- Si se ingresa primero a la opción de ingreso y se quiere cambiar los switch , primero se debe cambiar el estado de los switch y presionar ‘*’.
- En las demás opciones se pude cambiar normalmente los switch sin presionar ninguna tecla.
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
D7
14D6
13D5
12D4
11D3
10D2
9D1
8D0
7
E6
RW
5RS
4
VSS
1
VDD
2
VEE
3
LCD1LM016L
1 2 3
4 5 6
7 8 9
0 #
1 2 3
A
B
C
D
R5
10k
R6
10k
R5(1)
L2L1DCBA
C1C2C3C4
E1E2
C5C6C7
E3
Q12N3904
Q22N3904
Q32N3904
R2
1K
R3
1K
R4
1K
E1E2E3
A7
QA13
B1
QB12
C2
QC11
D6
QD10
BI/RBO4
QE9
RBI5
QF15
LT3
QG14
U2
74LS48
C7C6C5C4C3C2C1A
BCD
Q42N3904
D1LED-YELLOW
D2LED-YELLOW
D3LED-YELLOW
D4LED-YELLOW
D5LED-YELLOW
D6LED-YELLOW
R1
220E0
L2 L1 D C B A
E0
Top Related