introduccion a la programacion en c 1

16
1.-Introduccion El Hi-Tech para PIC es un compilador profesional estándar que fue por una compañía muy bien establecida como un proveedor de desarrollo de sistemas de herramientas. Hi tech suministra compiladores en C para un gran rango de microcontroladores en el Mercado: PIC16,18,24,32 y dsPIC(Procesadores de señal digital) como también los microcontroladores de Motorola (freescale) 68000,ARM,derivados del 8051, Textas Instruments, Dispositivos MSP430, y otros productos. Las características notables son las siguientes: 1.-ANSI C – Completa característica y portable. 2.-Fiable 3.-Multiple niveles de optimizaciones en C 4.-Un optimización por ensamblador 5.-Relocaliza las variables locales para disminuir el uso de la RAM. 6.-Una buena librería en C. La optimización lleva a la reducción del tamaño del código final para remover códigos redundantes y modifica la versión del ensamblador para reducir el número de instrucciones para la mínima. La más obvia desventaja de este compilador es que solo las funciones de la librería estándar para conversión de datos, manejo de la memoria, operaciones matemáticas y básicas E/S están proporcionadas. Esto asume que el usuario fabricara las librerías de manejo de los periféricos del microcontrolador. Diagrama de secuencia de inicialización de compilación 1.1.- Estructura de un Programa Los procesadores PIC18 tienen algunas localidades que contienen la configuración de los bits llamados fuses estos bits pueden ser establecidos usando el macro de configuración. El macro tiene el formato: __CONFIG(n,X); Donde n es el número de registro de configuración y X es el valor que es para establecer la configuración de palabra. El macro Hi-Tech Compiler for Introducción a la programación en C PIC18

Upload: georgemanson69

Post on 21-Jul-2015

196 views

Category:

Engineering


7 download

TRANSCRIPT

Page 1: Introduccion a la programacion en c 1

1.-Introduccion

El Hi-Tech para PIC es un compilador

profesional estándar que fue por una compañía muy bien establecida como un proveedor de desarrollo de sistemas de herramientas. Hi tech suministra compiladores en C para un gran rango de microcontroladores en el Mercado: PIC16,18,24,32 y dsPIC(Procesadores de señal digital) como también los microcontroladores de Motorola (freescale) 68000,ARM,derivados del 8051, Textas Instruments, Dispositivos MSP430, y otros productos. Las características notables son las siguientes: 1.-ANSI C – Completa característica y portable. 2.-Fiable 3.-Multiple niveles de optimizaciones en C 4.-Un optimización por ensamblador 5.-Relocaliza las variables locales para disminuir el uso de la RAM. 6.-Una buena librería en C. La optimización lleva a la reducción del tamaño del código final para remover códigos redundantes y modifica la versión del ensamblador para reducir el número de instrucciones para la mínima. La más obvia desventaja de este compilador es que solo las funciones de la librería estándar para conversión de datos, manejo de la memoria, operaciones matemáticas y básicas E/S están proporcionadas.

Esto asume que el usuario fabricara las librerías de manejo de los periféricos del microcontrolador.

Diagrama de secuencia de inicialización de compilación

1.1.- Estructura de un Programa

Los procesadores PIC18 tienen algunas

localidades que contienen la configuración de

los bits llamados fuses estos bits pueden ser

establecidos usando el macro de configuración.

El macro tiene el formato:

__CONFIG(n,X);

Donde n es el número de registro de

configuración y X es el valor que es para

establecer la configuración de palabra. El macro

Hi-Tech Compiler for

Introducción a la

programación en C

PIC18

Page 2: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

2 Introducción a la programación en C en Hi tech Compiler for PIC18

es definido en <htc.h> hay que asegurar incluir

esta librería cada vez que iniciemos un proyecto

con un micro.

Ejemplo

Después podemos definir la velocidad de reloj:

1.2 Tipo de Datos

El compilador Hi tech C PRO para la familia

PIC18 soporta tipo de datos básicos con 1, 2,3 y

4 byte.

1.3 Constantes

El formato de constantes especifica su radix. Hi

tech C PRO para la familia PIC18 soporta el

Radiz estándar ANSI especifica cual establece

constantes binarios en código C.

En la tabla siguiente se observa como son

definidas las constantes.

Formato radix para Constantes

1.4 Tipos de Variables

Las variables pueden ser localizadas como uso

interno en cada función o si se desea ser una

variable visible en todas las funciones.

Por ejemplo:

La función puede usar la variable value ya que

es una variable global, mientras:

La función puede usar la variable value ya que

es una variable interna y solo ella puede usarla,

mientras si existiera otra función no puede

tomar el valor de la variable porque no existiría

en ella.

#include <htc.h> __CONFIG(1, RC); __CONFIG(2, BW8 & PWRTDIS & WDTPS1 & WDTEN); __CONFIG(4, STVRDIS);

#define _XTAL_FREQ 4000000

//Oscilador Interno de 4MHZ

int value;

Void función(void){

Value=100;

}

Void función(void){

Int value;

Value=100;

}

Page 3: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

3 Introducción a la programación en C en Hi tech Compiler for PIC18

1.5 Operadores

Las asignaciones son de gran ayuda para reducir memoria de programa del microcontrolador ya que

simplifica la manera de ser una operación. Por ejemplo:

var=var+3000;

07DB 0870 MOVF 0x70, W

07DC 3EB8 ADDLW 0xb8

07DD 00F0 MOVWF 0x70

07DE 0871 MOVF 0x71, W

07DF 1803 BTFSC 0x3, 0

07E0 3E01 ADDLW 0x1

07E1 3E0B ADDLW 0xb

07E2 00F1 MOVWF 0x71

var+=3000;

07DD 30B8 MOVLW 0xb8

07DE 07F0 ADDWF 0x70, F

07DF 1803 BTFSC 0x3, 0

07E0 0AF1 INCF 0x71, F

07E1 300B MOVLW 0xb

07E2 07F1 ADDWF 0x71, F

Page 4: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

4 Introducción a la programación en C en Hi tech Compiler for PIC18

Las operaciones aritméticas son las que están en la tabla siguiente:

+ Suma

- Resta

* Multiplicación

/ División

% Modulo, Resto de una división entera

-- Decremento

++ Incremento

sizeof Determina el tamaño en bytes de un operando

Ejemplo:

Var=var2+var3; //suma

Unsigned char var[8];

Var2=sizeof(var); //var2=8 ya que es el tamaño del arreglo

Las relaciones sirven para hacer la comparación de una variable con otro donde al cumplir cierta

relación conlleve a una acción.

< Menor que

> Mayor que

>= Mayor o igual que <= Menor o igual que

== Igual

¡= Distinto

?: Expresión Condicional

Por ejemplo:

Var=100;

Var2=2200;

Var!=var2?var++:var2--; //Entra a var++ si es ciert a la condición sino entra a var2—

Page 5: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

5 Introducción a la programación en C en Hi tech Compiler for PIC18

Las operaciones lógicas son usadas para realizar operaciones de comparación entre varios elementos:

! NOT

&& AND

|| OR

Ejemplo:

If(var==100 && var2==2000);

Las operaciones de bits sirven para separar ciertos bits donde se desean solo tener como comparación.

~ Complemento en 1

& AND

^ OR exclusiva

| OR

>> Desplaza a Derecha

<< Desplaza a Izquierda

Ejemplo:

Var=~0xFF; Var=0x00;

Var=0xFF&0Xf0; Var=0Xf0;

1.6 Funciones

Las funciones son bloques de sentencias, todas las sentencias se deben de enmarcar dentro de las

funciones. Al igual que las variables, las funciones deben definirse antes de utilizarse.

Una función puede ser invocada desde una sentencia de otra función. Una función puede devolver un

valor a la sentencia que la ha llamado. El tipo de dato se indica en la definición de la función; en el caso

de no indicarse nada se entiende que es unsigned char y en el caso de no devolver un valor se debe de

especificar el valor VOID. La función, además de devolver un valor, puede recibir parámetros o

argumentos.

La estructura de una función :

Tipo_dato nombre_funcion(tipo parámetro,parametro2…){

(sentencia);

}

Page 6: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

6 Introducción a la programación en C en Hi tech Compiler for PIC18

Ejemplo:

2.- Declaraciones de Control

Las declaraciones son usadas para controlar el proceso de ejecución del programa.

Hi tech admite las siguientes:

• If-else

• While

• do-while

• for

• switch-case

• return

• break,continue y goto

2.1 if-else

Primero entra a la comparación de la expr si es cierta entra a ejecutar la sentencia sent_1 sino entra a la

sentencia sent_2.

Nota

Los elementos que estén encerrados en corchetes [] son opcionales

void main(void){ Var=suma(10,20);

} int suma(int x,int y){ int z; z=x+y; return z; }

if (expr){

sent_1;

}[else

sent_2;]

Page 7: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

7 Introducción a la programación en C en Hi tech Compiler for PIC18

Si al evaluar la expresión expr resulta falsa entonces entrara a la comparación expr2 pero si ninguno de

los dos son ciertas entonce entrara a ejecutar a sent_3.

2.2.- switch-case

Una manera rápida de acceder a una decisión múltiple es usar la sentencia switch-case:

Var=1;

Switch(Var){

case 0://

if (expr){

sent_1;

}[else if(expr2){

sent_2;

} else

sent_3;

]

If(A==10) B=0;

Else b=1;

If(A==0){

If(B==3) A=0;

}else

B=0;

Page 8: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

8 Introducción a la programación en C en Hi tech Compiler for PIC18

case 1: B=0; break;

default: //

}

Cuando entra a la sentencia switch realiza la búsqueda de valor deseado, en este caso cuando la variable

Var es igual a 1, entra en el case 1 ya que este caso contiene el valor correspondiente a la variable Var

pero si no existe ninguna igualdad en los case simplemente entrara a default.

Nota

No puede haber dos CASE con la misma constante

2.3.- for

En las expresiones del for la inicialización es una variable a la cual se le asigna un valor inicial con el

controlar el bucle. La condición de finalización sirve para evaluar ANTES de ejecutar las sentencias si es

cierta o no, en el caso de ser cierta se ejecutan las sentencias y en caso contrario se sale del for. Por

último, la expresión de incremento o decremento modifica la variable de control DESPUÉS de ejecutar el

bucle.

switch(A){

case 0: B=10; break;

case 1: B=20; break;

case 2: B=40; break;

default: break;

}

Page 9: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

9 Introducción a la programación en C en Hi tech Compiler for PIC18

2.4 while/do-while

While se usa para repetir sentencias.

while(expresión){

Sentencias;

}

Primero evalua la expresión si es cierta sigue ejecutando la sentencia hasta que la expresión sea

totalmente falsa.

Do-While es diferente de while y for ya que tiene que entrar por lo menos una vez para ejecutar la

sentencia y después evalúa la expresión.

do{

Sentencias;

}while(expresión);

for(n=0;n<10;n++){

Printf(n);

}

Page 10: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

10 Introducción a la programación en C en Hi tech Compiler for PIC18

return: sirve para devolver datos.

break: Sirve para salir de bucles como son for,while,do-while

goto: Provoca un salto incondicional

while(n<5 || x>10){

b=100;

a=10;

}

do{

b++;

printf(b);

}while(b<100);

Page 11: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

11 Introducción a la programación en C en Hi tech Compiler for PIC18

3. Comentarios

Los comentarios sirven para facilitar la comprensión del programa, y permite que otros usuarios puedan

entender el programa fácilmente.

• Utilizamos // para poner comentarios a una línea especifica

• Usamos /* y*/ para envolver a dentro de ellos un texto que puede ser por default la explicación

del programa en general.

Ejemplo:

PORTB=0x00; //Apagamos puerto b

*/ Inicializamos el puerto b para que no exista

El efecto rebote o picos cuando incie el micro*/

PORTB=0x00;

Para iniciar en la programación de microcontroladores de PIC18 se debe de tener el software que nos

proporciona gratis la compañía Microchip en su web, www.microchip.com, el programa es MPLAB IDE, al

descargarlo e instalarlo, debemos ahora de descargar el software HI TECH for PIC18 en su página

www.htsoft.com y lo instalamos.

Al tener todo bien instalado, procedemos abrir el software MPLAB IDE.

En HI TECH compiler for PIC18

Page 12: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

12 Introducción a la programación en C en Hi tech Compiler for PIC18

Software MPLAB

Como ya tenemos abierto el software vallamos a crear un proyecto en C, daremos click en <proyect

Wizard> nos abrirá una venta donde nos saluda, daremos click en <next> aparecerá en seguida el paso

uno a realizar que es seleccionar el

microcontrolador a programar, en

este caso vallamos a elegir el

PIC18F2550, y damos click en

<next> el paso dos es elegir el

compilador a usar, buscaremos el

compilador HI TECH en <Active toolsuite>, y después <next> el paso tres es buscar lugar donde se debe

de guardar nuestro proyecto, entonces buscamos donde queramos archivar nuestro proyecto, y damos

click en <next>, después nos mencionara que si queremos adherir proyectos existentes al nuestro, y

finalizaremos.

Ahora como nuestro lugar del proyecto no contiene ningún archivo, solo

vallamos a agregar una hoja en blanco en <file><new>, después grabamos

la hoja en blanco en el lugar del proyecto y lo agregamos al espacio de

trabajo solo dar click derecho en <Source File> y agregamos la hoja en

blanco que fue antes guardada, y listo hemos hecho una hoja de trabajo,

estamos listo para empezar a programar.

Lo primero que vamos a realizar es el parpadeo de un led, como se va

utilizar un oscilador interno se debe de configurar correctamente los fuses

del micro, para que este pueda ser calibrado con el Oscilador Interno.

El PIC18F2550 contiene un modulo de USB que utiliza algunos bits de

configuración para usarlo, en este caso se deben de configurar de una

forma donde no se utilice estos bits o desactivarlos.

Page 13: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

13 Introducción a la programación en C en Hi tech Compiler for PIC18

Para la utilización de los fueses y de los registros del Micro, se debe de agregar la librería estándar para

uso de todos los módulos PIC18.

#include<htc.c>

Después definiremos la frecuencia de trabajo para la utilización de __delay_ms para ellos se usa la línea:

////////////////////////////// //Frecuencia FOSC 8Mhz ////////////////////////////// #define _XTAL_FREQ 8000000

Ahora ya podemos agregar la función principal, void main (void) como vimos en la configuración de bits

(fuses) en __CONFIG(1,INTIO…) se utilizado un oscilador interno, para el uso de una frecuencia de 8Mhz

se debe de inicializar el registro OSCCON.

/////////////////////////////////////////////////// ////////// //Configuracion para trabajar Con oscilador interno de 8Mhz __CONFIG(1,INTIO & FCMDIS & IESODIS & PLLDIV5 & PLL POSTDIV2 & CPUDIV1 & USBOSC); /////////////////////////////////////////////////// ////////// __CONFIG(2,VREGDIS & PWRTEN & BORDIS & WDTDIS & BOR V45 & WDTPS32K); __CONFIG(3,PBDIGITAL & LPT1DIS & MCLREN); __CONFIG(4,STVRDIS & LVPDIS & ICPORTDIS & DEBUGDIS) ; __CONFIG(5,UNPROTECT); __CONFIG(6,UNPROTECT); __CONFIG(7,UNPROTECT);

Page 14: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

14 Introducción a la programación en C en Hi tech Compiler for PIC18

Solo basta de cargar el valor de los 3 bits IRCF2:IRCF0.

OSCCON=0x70; //Oscilador a 8Mhz NOP();NOP();NOP();NOP();

Se utiliza los parámetros NOP() para que pueda establecerse la frecuencia, para hacer el parpadeo de un

led, se debe de configurar correctamente los registros TRIS, como vamos a hacer el parpadeo de un led

en un solo pin del puerto B, los bits que representa al registro de puerto o cualquier registro solo, es

poner el nombre del bit en este caso RB0.

NOTA

Siempre tenga a la mano la hoja de datos del microcontrolador que se vaya a trabajar para estar siempre informado de los registros y de los bits de cada uno de ellos.

Para un ciclo perpetuo se usa la sentencia while.

//////////////////////////////////////////////// //Configuración del Puerto B //// //////////////////////////////////////////////// TRISB=0x00; PORTB=0x00; /*************************************************/ while(1){ RB0=0; DELAY1S(); RB0=1; DELAY1S();

}

Como se ve se usa una función de temporización de 1 segundo como el compilador no ofrece librerías

de retardos tan altos, nosotros debemos de fabricar los, para ellos haremos la función DELAY1S().

Solo basta usar una variable y una sentencia for para repetir tiempos.

////////////////////////////// //FUNCION DE 1 SEGUNDO ////////////////////////////// void DELAY1S(void){ unsigned char time; for(time=0;time<100;time++){ __delay_ms(10); } }

Page 15: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

15 Introducción a la programación en C en Hi tech Compiler for PIC18

El programa completo se muestra a continuación:

/////////////////////////////////////////////////// ///// // BLINK EN PIN PB0 //Autor: george.manson.69 //Lugar: Mexico //Compilador: HI TECH PIC18 (LITE MODE) /////////////////////////////////////////////////// ///// #include<htc.h> /////////////////////////////////////////////////// ////////// //Configuracion para trabajar Con oscilador interno de 8Mhz __CONFIG(1,INTIO & FCMDIS & IESODIS & PLLDIV5 & PLL POSTDIV2 & CPUDIV1 & USBOSC); /////////////////////////////////////////////////// ////////// __CONFIG(2,VREGDIS & PWRTEN & BORDIS & WDTDIS & BOR V45 & WDTPS32K); __CONFIG(3,PBDIGITAL & LPT1DIS & MCLREN); __CONFIG(4,STVRDIS & LVPDIS & ICPORTDIS & DEBUGDIS) ; __CONFIG(5,UNPROTECT); __CONFIG(6,UNPROTECT); __CONFIG(7,UNPROTECT); ////////////////////////////// //Frecuencia FOSC 8Mhz ////////////////////////////// #define _XTAL_FREQ 8000000 float value; ////////////////////////////// //FUNCION DE 1 SEGUNDO ////////////////////////////// void DELAY1S(void){ unsigned char time; for(time=0;time<100;time++){ __delay_ms(10); } } ///////////////////////////////////////////////// //Funcion de interrupcion //Si no se usa simplemente no hacemos nada... //Esto sirve para direccionar lo los datos //en un lugar muy cercano al Inicio de la memoria //de datos //////////////////////////////////////////////// static void interrupt isr(void){} ////////////////////////////// //FUNCION PRINCIPAL ////////////////////////////// void main(void){ ///////////////////////////////////////////////// //Registro para Configurar el Oscilador Interno// ///////////////////////////////////////////////// OSCCON=0x70; NOP();NOP();NOP();NOP();//4Ciclos para estabilizar Frecuencia

Page 16: Introduccion a la programacion en c 1

Introduccion a la programacion en HI-TECH 2011

16 Introducción a la programación en C en Hi tech Compiler for PIC18

///////////////////////////////////////////////// /*************************************************/ //////////////////////////////////////////////// //Configuracion del Puerto B //// //////////////////////////////////////////////// TRISB=0x00; PORTB=0x00; /*************************************************/ while(1){ RB0=0; DELAY1S(); RB0=1; DELAY1S(); } }