Вы находитесь на странице: 1из 29

Lenguaje C para PICs

Programacin con mikroC

1 Ing. Alcvar Costales G.


Como poner comentarios
Formato C Formato C++
/* aqu escriba su comentario // lnea de comentario
hasta */ // otra lnea de comentario

MikroC acepta los dos formatos

2 Ing. Alcvar Costales G.


Operadores aritmticos

Operador Operacin
+ Suma
- Resta
* Multiplicacin
/ Divisin
% Retorna el residuo de la divisin entre enteros
++ Incrementa en uno al valor del operando
-- Decrementa en uno al valor del operando

3 Ing. Alcvar Costales G.


Operadores de relacin

Operador Operacin
== Igual
!= No es igual
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que

4 Ing. Alcvar Costales G.


Operadores de bits

Operador Operacin
& AND entre bits
| OR entre bits
^ XOR entre bits
~ Complementa bits
<< Rota bits a la izquierda
>> Rota bits a la derecha

5 Ing. Alcvar Costales G.


Operadores lgicos

Operador Operacin
&& AND lgico
|| OR lgico
! Negacin lgica

6 Ing. Alcvar Costales G.


Keywords
PALABRAS RESERVADAS
asm enum signed
auto extern sizeof
brek float static
case for struct
char goto switch No use estas
palabras en
const if typedef su programa
continue int union
default long unsigned
do register void
double return volatile
else short while

7 Ing. Alcvar Costales G.


Tipos de variables

Lo que est encerrado en


parntesis puede suprimirse

8 Ing. Alcvar Costales G.


Arreglos

Declaracin de arreglos
Sintaxis:
Tipo nombre_del_arreglo [valor constante]

Ejemplo:
int A [5] ; // arreglo A de 5 enteros

Inicializacin de arreglos
Ejemplo:
int C [4] = {2, 4, 7, 9} ;

9 Ing. Alcvar Costales G.


Sentencias
Las sentencias bsicamente se dividen en :

Sentencias de etiqueta
Sentencias de seleccin
Sentencias de iteracin
Sentencias de salto
Sentencias compuestas o bloques

Sentencias de etiqueta
Sintaxis:
etiqueta_identificadora: sentencia;
Ejemplo:
repita : etiqueta
a=a+3;

10 Ing. Alcvar Costales G.


Sentencias de seleccin
Son dos: if , switch
Sentencia switch
Sintaxis:
Sentencia if switch (expresin) {
Sintaxis:
case constante_1: sentencia_1 ;
if (expresin) sentencia1

[else sentencia2]
case constante_n: sentencia_n ;
[default : sentencia ;]
Ejemplo:
}
if (var == 1) x = x + 5 ;
Ejemplo:
else y = y - 3 ;
switch (input) {
case 1 : LED1 = 1;
case 2 : LED2 = 1;
default : LED7 = 1;
}

11 Ing. Alcvar Costales G.


Sentencias de iteracin

Sentencia while Sentencia do


Sintaxis: Sintaxis:
while (expresin) sentencia do sentencia while (expresin)

Ejemplo: Ejemplo:
int s, i ; int s, i ;
s=i=0 s=i=0;
while ( i < 6 ) { do {
s=s+2; s=s+2;
i=i +1; i=i +1;
} } while ( i < 7 ) ;

12 Ing. Alcvar Costales G.


Sentencias de iteracin
Sentencia for
Sintaxis:
for ( [exp_inicial] ; [exp_condicional] ; [exp_incremento] ) sentencia

Ejemplo:
for (sum = 0 , cont = 0 ; cont < 5 ; cont++) {
sum += 2 ;
}

Este cdigo sumar 2 unidades a la variable sum por


cinco ocasiones

13 Ing. Alcvar Costales G.


Sentencias de salto
Sentencia break
Ejemplo:
int i = 0 , s = 1 ; // declaracin e inicializacin de variables
while (1) { // lazo infinito
if ( i == 4 ) break ;
s=s*2;
i++ ; Cuando i = 4
}

Este cdigo multiplica por 2 a la variable s hasta que i = 4

14 Ing. Alcvar Costales G.


Sentencias de salto
Sentencia continue
Ejemplo:
int i = 0 , s = 1 ; // declaracin e inicializacin de variables
while (1) { // lazo infinito
s=s*2;
i++ ; Cuando i 4
if ( i != 4 ) continue ;
break ;
}

Este cdigo multiplica por 2 a la variable s hasta que i = 4

15 Ing. Alcvar Costales G.


Sentencias de salto

Sentencia goto
Sintaxis:
Goto etiqueta ;
Ejemplo:
siga : // etiqueta
.. ;
goto siga ;

16 Ing. Alcvar Costales G.


Sentencias compuesta
Sentencias compuestas o bloques, son
aquellas formadas por una lista de sentencias
simples encerradas entre { }

17 Ing. Alcvar Costales G.


Microcontroladores PIC

Ejemplos de programacin con mikroC

18 Ing. Alcvar Costales G.


Prct_1: Led on-off
// Proyecto: Led on-off
// Descripcin:
// Los diodos conectados a PORTB se prenden y
// apagan. Se usa la negacin ~.
// PIC16F870
//---------------------------------------------------------------------
void main() {
portb = 0;
trisb = 0;

while(1) {
portb= ~portb;
Delay_ms(250);
}
}

19 Ing. Alcvar Costales G.


Comando Button
Prtico Estado activo
Vcc

9 21
OSC1/CLKIN RB0/INT
10 22
OSC2/CLKOUT RB1
1 23
MCLR/Vpp/T HV RB2
24
RB3/PGM
2 25
RA0/AN0 RB4
3 26
RA1/AN1 RB5
4 27 BUTTON
RA2/AN2/VREF- RB6/PGC
5 28
RA3/AN3/VREF+ RB7/PGD
6
7
RA4/T 0CKI
RA5/AN4 RC0/T 1OSO/T 1CKI
11
12
Button( &PORTC, 1, 1, 1)
RC1/T 1OSI
13
RC2/CCP1
14
RC3
15
RC4
RC5
RC6/T X/CK
16
17 Bit del prtico
18
RC7/RX/DT

PIC16F870

Tiempo en mS
para eliminar
el rebote

20 Ing. Alcvar Costales G.


Prct_2: Uso del comando Button
// El programa hace toggle los LEDs conectados a PORTB,
// cada que se presione un switch conectado a RC1.
// PIC16F870
//---------------------------------------------------------------------------
void main(){
char memo = 0; // declaracin de variable
trisb = 0;
trisc = 0xff;
do {
if (Button(&portc, 1, 1, 1))
memo = 1;
if (memo && Button(&portc, 1, 1, 0)) {
portb = ~portb;
memo = 0;
}
} while(1);
}
21 Ing. Alcvar Costales G.
Programa para LCD
//Manejo de LCD PIC16F870
unsigned short sum1=4;
unsigned short sum2=8;
unsigned short suma;
char txt[4];
void main() {
LCD_Init(&PORTB); // Inicializar LCD conectado a PORTB
LCD_Cmd(LCD_CLEAR); // Borrar display
LCD_Cmd(LCD_CURSOR_OFF); // Apagar cursor
bytetostr(sum1,txt);
LCD_Out(1,1, txt); // Imprimir texto en fila 1, columna 1
LCD_Out_Cp(" +");
Delay_ms(200);
bytetostr(sum2,txt);
LCD_Out_Cp(txt);
suma=sum1+sum2;
LCD_Out_Cp(" =");
bytetostr(suma,txt);
LCD_Out_Cp(txt);
}

22 Ing. Alcvar Costales G.


Interrupciones
Del Timer0

23 Ing. Alcvar Costales G.


Registro del PIC: INTCON (1)

Funcin principal: controlar las interrupciones


Est ubicado en la localidad 0BH de la RAM
Su formato es:

GIE: permiso global de las interrupciones, con 1 habilita


EEIE: habilitacin de interrupcin para grabacin de la EEPROM
TOIE: 1 habilita interrupcin de TMR0, 0 lo deshabilita
INTE: 1 habilita la interrupcin RB0/INT, 0 la deshabilita

24 Ing. Alcvar Costales G.


Registros del PIC: INTCON (2)

RBIE: habilta interrupciones en RB4 a RB7


TOIF: bandera de TMR0
INTF: bandera de interrupciones en RB0
RBIF: bandera de interrupciones en RB4 a RB7

25 Ing. Alcvar Costales G.


Registro: ADCON0

CHS2:CHS0 ADON
ADCS1:ADCS0
Bits de seleccin del 1 = Mdulo A/D on
Bits para seleccionar el canal anlogo
reloj de la conversin 0 = Mdulo A/D off
000 = canal 0 (AN0)
00 = Fosc /2
001 = canal 1 (AN1) GO/DONE
01 = Fosc/8
. Si ADON = 1:
10 = Fosc/32
. 1 = conversin en progreso
11 = Frc (reloj interno)
100 = canal 4 AN(4) 0 = conversin terminada

26 Ing. Alcvar Costales G.


Registro: ADCON1

27 Ing. Alcvar Costales G.


Registro: ADCON1

(1) Para PIC16F877


(2) Canales A/D
respecto a
canales usados
para voltajes de
referencia

28 Ing. Alcvar Costales G.


Registro: ADCON1

29 Ing. Alcvar Costales G.