Está en la página 1de 9

ETN 801 – MICROPROCESADORES Semestre II/2023

Ing. Marcelo Ramírez M. 06/11/2023


Univ. Daniel Villca A.
Microsex N° 18 – Programación de
microcontroladores en lenguaje C.

OBJETIVOS.

 Segunda experiencia de manejo del computador entrenador de laboratorio de


microcontroladores QL200 – H-DRAGON.
 Programación del Dragón en lenguaje C.

COMPETENCIAS.

A la conclusión satisfactoria de la práctica, el estudiante estará familiarizado con:

 el manejo del Dragón y


 el uso del lenguaje C con el microcontrolador PIC16F877.

INTRODUCCIÓN.

1. ESTRUCTURA DE UN PROGRAMA EN LENGUAJE C PARA PROGRAMACION EN PIC

ENCABEZADO

FUNCIONES (si son requeridas)

1
Microsex N° 18 – Programación de Microcontroladores en Lenguaje C.

FUNCION PRINCIPAL (MAIN): La función por la cual el programa inicia su ejecución.

2. FUNCIONES BASICAS A UTILIZAR

Lectura y escritura de puertos. Puede usarse los puertos como salida o entrada o usar ciertos
bits de un puerto como entrada y los demás como salida. Deben definirse previamente la forma
de uso de un puerto (entrada o salida) antes de utilizarse.

Conversión analógica - digital

El entrenador usa 2 puertos del PIC para la conversión analógica digital (RA0 y RA1).
En el encabezado del programa debe añadirse la siguiente línea para el uso del ADC.

En el programa principal van las siguientes sentencias.

2
Microsex N° 18 – Programación de Microcontroladores en Lenguaje C.

ACTIVIDADES.

 Recopile la documentación y las herramientas señaladas.

BIBLIOGRAFÍA:
o Manual de usuario - QL200 PIC DEVELOPMENT BOARD
o Curso de microcontroladores con PIC CCS C - https://youtube.com/playlist?list=PLF-
qcfymUY4VvPaoquGoQ5auW_n968P4N

ENLACES:
o Enlace para la instalación de PIC C compiler - https://www.youtube.com/watch?v=7tGDmYwoYPE
o Archivos de código fuente, simulaciones y hoja de datos del entrenador QL200 -
https://drive.google.com/file/d/160NwAUDS9rNmYBi03ZBYhiqkV8HhQzcx/view?usp=share_link
o Los programas tienen la extensión “.c” y las simulaciones en Proteus “.pdsprj”.

 Emplee la documentación publicada en el tablón de la clase.


 Estudie la documentación.
 Tome apuntes prácticos para el trabajo.

LABORATORIO.

PRÁCTICAS DE EJEMPLO PARA EL ENTRENADOR QL 200

1. CONTADOR DE PULSACIONES DE 2 DIGITOS EN DISPLAYS 7 SEGMENTOS.

Se realizará un contador en decimal de 2 dígitos usando los visores de 7 segmentos del entrenador
y pulsadores para controlar subir o disminuir la cuenta.

Los visores de 7 segmentos se encuentran conectados al puerto D, con entradas de control


conectadas al puerto A, de acuerdo con el diagrama esquemático del entrenador (Figura 1).

Cada entrada de control habilita (con un cero lógico) el despliegue del dato en el puerto D en el
visor correspondiente, por lo que debe usarse multicanalización para desplegar un digito en un visor
a la vez a gran velocidad para lograr retención en el ojo humano.

Se usará los 2 primeros visores con sus señales de control en los bits RA0 y RA1 del puerto A.

Figura 1 – Visores de 7 segmentos

3
Microsex N° 18 – Programación de Microcontroladores en Lenguaje C.

El diagrama esquemático (Figura 2) del módulo de pulsadores muestra que 4 de ellos están
conectados al puerto B (RB0 a RB3) y los otros 4 al puerto A (RA0 a RA3). Se usarán los 2 pulsadores
conectados a RB0 Y RB1 con lógica positiva.

Figura 2 - Pulsadores

El programa de control en código fuente, a continuación, con los comentarios necesarios.

//***CONTADOR DE PULSACIONES EN DISP 7 SEG****


//****ENCABEZADO****
#INCLUDE <16F877a.h>
#use delay(clock=4000000,crystal)//Crystal Externo 4MHz
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP

//puertos a usar
#BYTE PORTA= 5
#BYTE PORTB= 6
#BYTE PORTD= 8

//nombrando a los puertos a usar


#DEFINE TUNI PORTA,0 //bit de control del transistor para el visor de unidades
#DEFINE TDEC PORTA,1 //bit de control del transistor para el visor de decenas
#DEFINE icr PORTB,0 //bit del puerto B donde está el pulsador para incremento
#DEFINE decr PORTB,1//bit del puerto B donde está el pulsador para decremento

//vector de bytes para dibujar los caracteres del 0 al 9 en 7 segmentos


Byte CONST display[10]= {0xc0,0xf9,0xa4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x98};

INT CONT; //Declarar la variable CONT como


//un entero, es decir de 8 bits

4
Microsex N° 18 – Programación de Microcontroladores en Lenguaje C.

//*********FUNCIONES AUXILIARES**************
VOID MOSTRAR( ) //FUNCION mostrar el valor del contador en los 2 visores
{
INT UNI,DEC; //Declarar las variables UNIDADES, DECENAS
//como un entero, es decir de 8bits
DEC=CONT/10;
UNI=CONT%10;
PORTD=(DISPLAY[UNI]); //Muestra lo que hay en unidades
//en el display
BIT_CLEAR(TUNI); //Enciende el display de unidades
DELAY_MS(20); //Retardo de 1 milisegundos
BIT_SET(TUNI); //Apaga el display de unidades
PORTD=(DISPLAY[DEC]); //Muestra lo que hay en decenas
//en el display
BIT_CLEAR(TDEC); //Enciende el display de decenas
DELAY_MS(20); //Retardo de 1 milisegundos
BIT_SET(TDEC); //Apaga el display de decenas
}

//********PROGRAMA PRINCIPAL**************
void MAIN()
{
SET_TRIS_A(0); //El puerto A esta configurado como salida
SET_TRIS_D(0); // El puerto D está configurado como salida
SET_TRIS_B(0x03); //Los bits RB0 y RB1 del puerto B como entrada

CONT=0; //la variable CONT se inicializa con cero

BIT_SET(TUNI);//inicializamos los displays para que estén apagados


BIT_SET(TDEC);

WHILE(TRUE) //Haga por siempre


{
if(BIT_TEST(icr)) //si el pulsador de incremento está presionado
{
DELAY_MS(100); //esperar que siga presionado
CONT++; //incrementa en 1
}
if(BIT_TEST(decr)) // pulsador de decremento presionado
{
DELAY_MS(100);
CONT--;
}
MOSTRAR();
}
}

5
Microsex N° 18 – Programación de Microcontroladores en Lenguaje C.

En el entorno del compilador PIC C compiler, una vez terminado y guardado el código del programa,
se compila dando clic en el ícono “Compile” (Figura 3). En el directorio de trabajo se generará en
archivo “.hex” (Figura 4) el cual se utiliza para cargar el programa en el PIC del entrenador
(mediante el software QL-PROG) o para simulación en Proteus.

Figura 3 - Comando de compilación

Figura 4 - Archivo de código objeto (hex)

6
Microsex N° 18 – Programación de Microcontroladores en Lenguaje C.

Diagrama esquemático de la simulación realizada en Proteus, donde se verifica el funcionamiento.

RB0

RB1

R3 R4
10k 10k
U1
13 33
OSC1/CLKIN RB0/INT RB0
14 34
OSC2/CLKOUT RB1 RB1
35
RB2
2 36
C1 RA0 RA0/AN0 RB3/PGM
3 37
RA1 RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC Q2
22pF 6 40
RA4/T0CKI/C1OUT RB7/PGD
X1 7
RA5/AN4/SS/C2OUT R1 Q1
15
C2 CRYSTAL
8
RC0/T1OSO/T1CKI
16
RA1 BC478 R2
RE0/AN5/RD RC1/T1OSI/CCP2 10k RA0
9 17 10k
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
22pF 23
RC4/SDI/SDA
1 24 BC478
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0 RD0 RD0 RD0
20
RD1/PSP1 RD1 RD1 RD1
21
RD2/PSP2 RD2 RD2 RD2
22
RD3/PSP3 RD3 RD3 RD3
27
RD4/PSP4 RD4 RD4 RD4
28
RD5/PSP5 RD5 RD5 RD5
29
RD6/PSP6 RD6 RD6 RD6
30
RD7/PSP7 RD7
PIC16F877A

Figura 5 - Diagrama de simulación en Proteus

2. MEDIDOR DE TEMPERATURA EN DISPLAY LCD

Se usará el pin RA0 del puerto A como una entrada analógica para la conversión A/D. El pin RA0 se
conecta a un sensor de temperatura LM35.

El display LCD normalmente suele usarse en el puerto D, pero en el entrenador QL200 se encuentra
conectado a dos puertos, el puerto A para las señales de control y el puerto D para datos.

A continuación, el diagrama esquemático (Figura 6) de la conexión del display LCD, que es útil para
definir la conexión de pines a la pantalla LCD en el programa.

Figura 6 - Conexión a pantalla LCD

7
Microsex N° 18 – Programación de Microcontroladores en Lenguaje C.

El código fuente del programa, con los comentarios complementarios.

//MEDIDOR DE TEMPERATURA EN DISPLAY LCD


//Encabezado
#INCLUDE <16F877A.H>
#device adc=10 //CONVERSION ANALOGICA DIGITAL DE 10 BITS
#USE DELAY(CLOCK=4000000) //frecuencia de oscilador
#FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,NOPUT,NOLVP

//#DEFINE USE_PORTB_LCD TRUE


//redefiniendo los pines de los puertos a usar para las terminales del LCD
#define LCD_ENABLE_PIN PIN_A3 ////
#define LCD_RS_PIN PIN_A1 ////
#define LCD_RW_PIN PIN_A2 ////
#define LCD_DATA4 PIN_D4 ////
#define LCD_DATA5 PIN_D5 ////
#define LCD_DATA6 PIN_D6 ////
#define LCD_DATA7 PIN_D7 ////
#INCLUDE <lcd.C> //driver del display LCD

#use standard_io(b)

#BYTE PORTA= 5 //puertos a usar


#BYTE PORTD= 8

long bits; //Variable almacena los bits de la conversion A/D


float tem; //Almacena la temperatura

//*******PROGRAMA PRINCIPAL**********

VOID MAIN()
{

set_tris_a(0b00000001); //Pongo el RA0 como entrada


setup_adc_ports(AN0); //Pongo RA0 como análogo
setup_adc(adc_clock_internal); //Selecciono reloj interno para conversión

LCD_INIT(); //Inicializar el driver del lcd


LCD_PUTC("\f"); //Limpia el LCD

WHILE(1)
{
//Lectura ADC
set_adc_channel(0); //Selecciono el canal 0 (RA0)
delay_ms(1); //llamo retardo de 1 ms
bits=read_adc(); //Guarde el dato del LM en bits

tem=bits*0.4882; //Conversión de bits a temperatura


lcd_gotoxy(1,1); //Ubíquese en la posición 2,2
printf(lcd_putc,"Temp= %f ",tem); //Muestra el valor numérico de la conversión
}
}

8
Microsex N° 18 – Programación de Microcontroladores en Lenguaje C.

E la figura 7 se muestra el diagrama esquemático de la simulación en Proteus, donde se verifica el


funcionamiento.

LCD1
LM016L

RV1
1 U2

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
49%

E
71.0

1
2
3

4
5
6

7
8
9
10
11
12
13
14
1k
2
VOUT

3 LM35

RA1
RA2
RA3

RD4
RD5
RD6
RD7
U3
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
C1 RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
22pF 5 39
RA3/AN3/VREF+ RB6/PGC
X1 6
RA4/T0CKI/C1OUT RB7/PGD
40
CRYSTAL 7
C2 RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
22pF 10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
25
RA1 RC6/TX/CK
26
RA2 RC7/RX/DT
RA3
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4 RD4
28
RD5/PSP5 RD5
29
RD6/PSP6 RD6
30
RD7/PSP7 RD7
PIC16F877A

Figura 7 - Simulación en Proteus

INFORME.

 Establezca conclusiones.

Las tareas y prácticas de especialidad en una carrera universitaria se comparan a tener un


trabajo en la vida profesional. Resuelve las tareas y prácticas como asignaciones de trabajos de
ingeniería y hazlo con mucho gusto y total dedicación. Piensa que es una situación difícil cuando
un profesional no tiene trabajo y, por el contrario, cuando lo tiene, es una bendición.
MR

También podría gustarte