Upload
fitomaster
View
219
Download
0
Embed Size (px)
Citation preview
7/30/2019 Introduccion a La Programacion en C_1
1/16
1.-Introduccion
El Hi-Tech para PIC es un compiladorprofesional estndar que fue por una compaamuy bien establecida como un proveedor dedesarrollo de sistemas de herramientas. Hi techsuministra compiladores en C para un granrango de microcontroladores en el Mercado:PIC16,18,24,32 y dsPIC(Procesadores de sealdigital) como tambin los microcontroladoresde Motorola (freescale) 68000,ARM,derivadosdel 8051, Textas Instruments, DispositivosMSP430, y otros productos.
Las caractersticas notables son las siguientes:
1.-ANSI C Completa caracterstica y portable.2.-Fiable3.-Multiple niveles de optimizaciones en C4.-Un optimizacin por ensamblador5.-Relocaliza las variables locales para disminuirel uso de la RAM.6.-Una buena librera en C.
La optimizacin lleva a la reduccin del tamaodel cdigo final para remover cdigosredundantes y modifica la versin delensamblador para reducir el nmero deinstrucciones para la mnima.
La ms obvia desventaja de este compilador esque solo las funciones de la librera estndarpara conversin de datos, manejo de lamemoria, operaciones matemticas y bsicasE/S estn proporcionadas.
Esto asume que el usuario fabricara las librerasde manejo de los perifricos del
microcontrolador.
Diagrama de secuencia de inicializacin de compilacin
1.1.- Estructura de un Programa
Los procesadores PIC18 tienen algunas
localidades que contienen la configuracin de
los bits llamadosfuses estos bits pueden ser
establecidos usando el macro de configuracin.
El macro tiene el formato:
__CONFIG(n,X);
Donde n es el nmero de registro de
configuracin yXes el valor que es para
establecer la configuracin de palabra. El macro
Hi-Tech Compiler forIntroduccin a la
programacin en C
PIC18
7/30/2019 Introduccion a La Programacion en C_1
2/16
Introduccion a la programacion en HI-TECH 2011
2 Introduccin a la programacin en C en Hi tech Compiler for PIC18
es definido en hay que asegurar incluir
esta librera cada vez que iniciemos un proyecto
con un micro.
Ejemplo
Despus 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 bsicos 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 estndar ANSI especifica cual establece
constantes binarios en cdigo 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 funcin o si se desea ser una
variable visible en todas las funciones.
Por ejemplo:
La funcin puede usar la variable value ya que
es una variable global, mientras:
La funcin puede usar la variable value ya que
es una variable interna y solo ella puede usarla,
mientras si existiera otra funcin no puede
tomar el valor de la variable porque no existira
en ella.
#include __CONFIG(1, RC);__CONFIG(2, BW8 & PWRTDIS & WDTPS1 & WDTEN);__CONFIG(4, STVRDIS);
#define _XTAL_FREQ 4000000
//Oscilador Interno de 4MHZ
int value;
Void funcin(void){
Value=100;
}
Void funcin(void){
Int value;
Value=100;
}
7/30/2019 Introduccion a La Programacion en C_1
3/16
Introduccion a la programacion en HI-TECH 2011
3 Introduccin a la programacin 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 operacin. 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
7/30/2019 Introduccion a La Programacion en C_1
4/16
Introduccion a la programacion en HI-TECH 2011
4 Introduccin a la programacin en C en Hi tech Compiler for PIC18
Las operaciones aritmticas son las que estn en la tabla siguiente:
+ Suma- Resta
* Multiplicacin/ Divisin
% Modulo, Resto de una divisin entera
-- Decremento
++ Incremento
sizeof Determina el tamao en bytes de unoperando
Ejemplo:Var=var2+var3; //suma
Unsigned char var[8];
Var2=sizeof(var); //var2=8 ya que es el tamao del arreglo
Las relaciones sirven para hacer la comparacin de una variable con otro donde al cumplir cierta
relacin conlleve a una accin.
< Menor que
> Mayor que>= Mayor o igual que
7/30/2019 Introduccion a La Programacion en C_1
5/16
Introduccion a la programacion en HI-TECH 2011
5 Introduccin a la programacin en C en Hi tech Compiler for PIC18
Las operaciones lgicas son usadas para realizar operaciones de comparacin 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 comparacin.
~ Complemento en 1
& AND
^ OR exclusiva
| OR>> Desplaza a Derecha
7/30/2019 Introduccion a La Programacion en C_1
6/16
Introduccion a la programacion en HI-TECH 2011
6 Introduccin a la programacin en C en Hi tech Compiler for PIC18
Ejemplo:
2.- Declaraciones de Control
Las declaraciones son usadas para controlar el proceso de ejecucin 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 comparacin de la exprsi es cierta entra a ejecutar la sentencia sent_1 sino entra a la
sentencia sent_2.
Nota
Los elementos que estn 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;]
7/30/2019 Introduccion a La Programacion en C_1
7/16
Introduccion a la programacion en HI-TECH 2011
7 Introduccin a la programacin en C en Hi tech Compiler for PIC18
Si al evaluar la expresin exprresulta falsa entonces entrara a la comparacin expr2 pero si ninguno de
los dos son ciertas entonce entrara a ejecutar a sent_3.
2.2.- switch-case
Una manera rpida de acceder a una decisin mltiple 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;
7/30/2019 Introduccion a La Programacion en C_1
8/16
Introduccion a la programacion en HI-TECH 2011
8 Introduccin a la programacin en C en Hi tech Compiler for PIC18
case 1: B=0; break;
default: //
}
Cuando entra a la sentencia switch realiza la bsqueda de valor deseado, en este caso cuando la variable
Vares 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 delforla inicializacin es una variable a la cual se le asigna un valor inicial con el
controlar el bucle. La condicin de finalizacin 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 delfor. Por
ltimo, la expresin de incremento o decremento modifica la variable de control DESPUS de ejecutar el
bucle.
switch(A){
case 0: B=10; break;
case 1: B=20; break;
case 2: B=40; break;
default: break;
}
7/30/2019 Introduccion a La Programacion en C_1
9/16
Introduccion a la programacion en HI-TECH 2011
9 Introduccin a la programacin en C en Hi tech Compiler for PIC18
2.4 while/do-while
While se usa para repetir sentencias.
while(expresin){
Sentencias;
}
Primero evalua la expresin si es cierta sigue ejecutando la sentencia hasta que la expresin sea
totalmente falsa.
Do-While es diferente de while yforya que tiene que entrar por lo menos una vez para ejecutar la
sentencia y despus evala la expresin.
do{
Sentencias;
}while(expresin);
for(n=0;n
7/30/2019 Introduccion a La Programacion en C_1
10/16
Introduccion a la programacion en HI-TECH 2011
10 Introduccin a la programacin en C en Hi tech Compiler for PIC18
return: sirve para devolver datos.
break: Sirve para salir de bucles como sonfor,while,do-while
goto: Provoca un salto incondicional
while(n10){
b=100;
a=10;
}
do{
b++;
printf(b);
}while(b
7/30/2019 Introduccion a La Programacion en C_1
11/16
Introduccion a la programacion en HI-TECH 2011
11 Introduccin a la programacin en C en Hi tech Compiler for PIC18
3. Comentarios
Los comentarios sirven para facilitar la comprensin del programa, y permite que otros usuarios puedanentender el programa fcilmente.
Utilizamos // para poner comentarios a una lnea especifica
Usamos /* y*/ para envolver a dentro de ellos un texto que puede ser por default la explicacin
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 programacin de microcontroladores de PIC18 se debe de tener el software que nos
proporciona gratis la compaa 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 pgina
www.htsoft.comy lo instalamos.
Al tener todo bien instalado, procedemos abrir el software MPLAB IDE.
En HITECH compiler forPIC18
7/30/2019 Introduccion a La Programacion en C_1
12/16
Introduccion a la programacion en HI-TECH 2011
12 Introduccin a la programacin 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 nos abrir una venta donde nos saluda, daremos click en 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
el paso dos es elegir el
compilador a usar, buscaremos el
compilador HI TECH en , y despus el paso tres es buscar lugar donde se debe
de guardar nuestro proyecto, entonces buscamos donde queramos archivar nuestro proyecto, y damos
click en , despus nos mencionara que si queremos adherir proyectos existentes al nuestro, y
finalizaremos.
Ahora como nuestro lugar del proyecto no contiene ningn archivo, solo
vallamos a agregar una hoja en blanco en , despus grabamos
la hoja en blanco en el lugar del proyecto y lo agregamos al espacio de
trabajo solo dar click derecho en 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
configuracin para usarlo, en este caso se deben de configurar de una
forma donde no se utilice estos bits o desactivarlos.
7/30/2019 Introduccion a La Programacion en C_1
13/16
Introduccion a la programacion en HI-TECH 2011
13 Introduccin a la programacin en C en Hi tech Compiler for PIC18
Para la utilizacin de los fueses y de los registros del Micro, se debe de agregar la librera estndar para
uso de todos los mdulos PIC18.
#include
Despus definiremos la frecuencia de trabajo para la utilizacin de__delay_ms para ellos se usa la lnea:
//////////////////////////////
//Frecuencia FOSC 8Mhz
//////////////////////////////
#define _XTAL_FREQ 8000000
Ahora ya podemos agregar la funcin principal, void main (void) como vimos en la configuracin de bits
(fuses) en__CONFIG(1,INTIO) se utilizado un oscilador interno, para el uso de una frecuencia de 8Mhzse debe de inicializar el registro OSCCON.
/////////////////////////////////////////////////////////////
//Configuracion para trabajar Con oscilador interno de 8Mhz
__CONFIG(1,INTIO & FCMDIS & IESODIS & PLLDIV5 & PLLPOSTDIV2 & CPUDIV1 & USBOSC);/////////////////////////////////////////////////////////////
__CONFIG(2,VREGDIS & PWRTEN & BORDIS & WDTDIS & BORV45 & WDTPS32K);
__CONFIG(3,PBDIGITAL & LPT1DIS & MCLREN);
__CONFIG(4,STVRDIS & LVPDIS & ICPORTDIS & DEBUGDIS);
__CONFIG(5,UNPROTECT);
__CONFIG(6,UNPROTECT);
__CONFIG(7,UNPROTECT);
7/30/2019 Introduccion a La Programacion en C_1
14/16
Introduccion a la programacion en HI-TECH 2011
14 Introduccin a la programacin en C en Hi tech Compiler for PIC18
Solo basta de cargar el valor de los 3 bits IRCF2:IRCF0.
OSCCON=0x70; //Oscilador a 8MhzNOP();NOP();NOP();NOP();
Se utiliza los parmetros 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.
////////////////////////////////////////////////
//Configuracin del Puerto B ////
////////////////////////////////////////////////
TRISB=0x00;
PORTB=0x00;
/*************************************************/
while(1){
RB0=0;
DELAY1S();
RB0=1;
DELAY1S();
}
Como se ve se usa una funcin de temporizacin de 1 segundo como el compilador no ofrece libreras
de retardos tan altos, nosotros debemos de fabricar los, para ellos haremos la funcin DELAY1S().
Solo basta usar una variable y una sentenciaforpara repetir tiempos.
//////////////////////////////
//FUNCION DE 1 SEGUNDO
//////////////////////////////
void DELAY1S(void){
unsigned char time;
for(time=0;time
7/30/2019 Introduccion a La Programacion en C_1
15/16
Introduccion a la programacion en HI-TECH 2011
15 Introduccin a la programacin en C en Hi tech Compiler for PIC18
El programa completo se muestra a continuacin:
////////////////////////////////////////////////////////
// BLINK EN PIN PB0
//Autor: george.manson.69
//Lugar: Mexico
//Compilador: HI TECH PIC18 (LITE MODE)
////////////////////////////////////////////////////////
#include
/////////////////////////////////////////////////////////////
//Configuracion para trabajar Con oscilador interno de 8Mhz
__CONFIG(1,INTIO & FCMDIS & IESODIS & PLLDIV5 & PLLPOSTDIV2 & CPUDIV1 & USBOSC);
/////////////////////////////////////////////////////////////
__CONFIG(2,VREGDIS & PWRTEN & BORDIS & WDTDIS & BORV45 & 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
7/30/2019 Introduccion a La Programacion en C_1
16/16
Introduccion a la programacion en HI-TECH 2011
16 Introduccin a la programacin en C en Hi tech Compiler for PIC18
/////////////////////////////////////////////////
/*************************************************/
////////////////////////////////////////////////
//Configuracion del Puerto B ////
////////////////////////////////////////////////
TRISB=0x00;
PORTB=0x00;
/*************************************************/
while(1){
RB0=0;
DELAY1S();
RB0=1;
DELAY1S();
}
}