sase2011-lenguaje_c.pdf
TRANSCRIPT
-
7/25/2019 SASE2011-Lenguaje_C.pdf
1/56
RESEA DE
LENGUAJE C
-
7/25/2019 SASE2011-Lenguaje_C.pdf
2/56
VARIABLES
-
7/25/2019 SASE2011-Lenguaje_C.pdf
3/56
La funcin main. Es el punto de entrada al programa.
void main(void)
{Aqu escribo mi programa
}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
4/56
Tipos de datos. Char. El char es una variable de 1 byte.
Almacena nmeros enteros. Toda variable debe ser declarada.
Ej:void main(void){
char a;a = 3;}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
5/56
Asignaciones Permiten darle valores a las variables.
Ej:
PTBD_PTBD3 = 1;PTBD = 0xff;
a = b + c;
-
7/25/2019 SASE2011-Lenguaje_C.pdf
6/56
Tipos de datos. Int. El int es una variable de 2 bytes.
Almacena nmeros enteros.
Ej:
void main(void){
int b;
b = 1000;}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
7/56
Tipos de datos. Float. Permite almacenar nmeros de punto flotante.
Ej:void main(void){
float c;
c = 10.8;}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
8/56
Alternativas al tipo float En general queremos representar cifras
del tipo: 20,3 mV Se trata de un nmero decimal de punto
fijo. Tampoco se dispone de representacin
en punto fijo.
-
7/25/2019 SASE2011-Lenguaje_C.pdf
9/56
Solucin:Trabajar las mangintudes
multiplicadas x10, x100, La cifra 20,3 se almacena como203. As puede contenerse en un
tipo int.
-
7/25/2019 SASE2011-Lenguaje_C.pdf
10/56
Conversin o casting.
Asignar un tipo de variable a un tipo distinto. Se usar el operador de conversin.Ej: Asignar a una variable int un tipo float.
void main(void)
{ int a;float b, c;b = 3;
c = 4;a = (int) b + 1;
}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
11/56
Modificadores. Un/Signed.
Permiten signar las variables o ampliar
su rango.void main(void)
{signed char d;unsigned char e;
}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
12/56
Modificadores. Long/Short.
Permiten ampliar el tamao de un dato
int.Ej:
void main(void){
long int a;
a = 100000;}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
13/56
Modificadores. Double.
Permite extender un dato float.
Ej:void main(void)
{double g;
long double h;}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
14/56
Modificadores. Resumen.
0 a +42949672954 bytesunsigned long
0 a +655352 bytesunsigned short
-2147483648 a +21474836474 byteslong
-32768 a 327672 bytesshort
-32768 a 327672 bytessigned int0 a +655352 bytesunsigned int
-32768 a +327672 bytesint
-128 a +1281 bytesigned char
0 a +2551 byteunsigned char
-128 a +1271 bytechar
RangoTamaoTipo
-
7/25/2019 SASE2011-Lenguaje_C.pdf
15/56
Registros dedicados.
Son perifricos mapeados en RAM.Ej: puertos, timers, etc.
PTAD_PTAD0PTAD
PTBD_PTBD1PTBD
void main(void)
{PTAD_PTAD0 = PTBD_PTBD1;
}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
16/56
OPERACIONES
-
7/25/2019 SASE2011-Lenguaje_C.pdf
17/56
Operaciones aritmticas. Resumen.
Decremento--Incremento++
Cambio de signo-
Resto de la divisin%Divisin/
Multiplicacin*
Resta-Suma+
OperacinOperador
-
7/25/2019 SASE2011-Lenguaje_C.pdf
18/56
Operaciones aritmticas.
void main(void)
{ int a, b, c, d, e, f;a = 1;
b = 2;c = a + b;d = a b;e = a * b;f = a / b;
}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
19/56
No necesariamente existe enensamblador una instruccinpara realizar cierta operacinaritmtica. Ej: Los PIC 16F nocuentan con instrucciones de
multiplicacinEn ese caso el compilador debe
generar un algoritmo en assemblerque ejecute esa operacin
-
7/25/2019 SASE2011-Lenguaje_C.pdf
20/56
Operaciones acumulativas.
a = a + 1;
a += 2; ( a = a + 2 )a++; ( a = a + 1 )
b -= 3; ( b = b 3 )c *= 2; ( c = c * 2 )
d /= 10; ( d = d / 10 )
-
7/25/2019 SASE2011-Lenguaje_C.pdf
21/56
Operaciones lgicas. Resumen.
desplazamiento a la izquierda>
negacin~
XOR bit a bit^
AND bit a bit&
OR bit a bit|
OperacinOperador
-
7/25/2019 SASE2011-Lenguaje_C.pdf
22/56
Operaciones lgicas. Ejemplos.
banderas = banderas | 0x01;
v = v & 0xfd;PTBD = PTBD ^ 0x01;
PTBD_PTBD0 = ~PTBD_PTBD0;
-
7/25/2019 SASE2011-Lenguaje_C.pdf
23/56
Desplazamientos. Ejemplos.
PTBD = PTBD > 4; ( ROR c, ROR c, ROR c,ROR c )
-
7/25/2019 SASE2011-Lenguaje_C.pdf
24/56
Manejo de bits como variables
Es vlida aplicar una asignacin a un bit. Son vlidas las operaciones lgicas
entre bits |, & y ^.
Ejemplos: Freescale:
PTAD_PTAD4 = 1; PIC:
PORTBbits.RB4 = 0;
-
7/25/2019 SASE2011-Lenguaje_C.pdf
25/56
Constantes.
Se permiten constantes numricas y
alfanumricas.Ej:
#define TOTO 4#define LED PTBD_PTBD0
-
7/25/2019 SASE2011-Lenguaje_C.pdf
26/56
CICLOS YCOMPARACIONES
-
7/25/2019 SASE2011-Lenguaje_C.pdf
27/56
Acciones bsicas.
Secuencias. Repeticiones. Selecciones.
-
7/25/2019 SASE2011-Lenguaje_C.pdf
28/56
Repeticiones. For.
Permite repetir sentencias hasta que se
cumpla una condicin.Ej:
for(i = 0; i < 10; i++){PTBD_PTBD0 = ~PTBD_PTBD0;
}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
29/56
Uso del for
for( i = 0; i < 10; i++)
Condicin dearranque
Condicin deejecucin
( MIENTRASQUE )
Condicin de
incremento
-
7/25/2019 SASE2011-Lenguaje_C.pdf
30/56
Ejemplo de for
for(i = 0; i < 10; i++){
PTAD_PTAD0 = 1;}
9Se cumple8
---Se cumple10
10Se cumple9
8Se cumple7
7Se cumple6
6Se cumple55Se cumple4
4Se cumple3
3Se cumple2
2Se cumple1
1Se cumple0
Prximo valor de iCondicin i < 10Valor de i
-
7/25/2019 SASE2011-Lenguaje_C.pdf
31/56
Expresiones relacionales y lgicas.
Menor o igual=
Distinto!=
Igual==
Menor
OperacinOperador
-
7/25/2019 SASE2011-Lenguaje_C.pdf
32/56
Expresiones relacionales y lgicas. Ejemplos.
a>7
b=320y0)&&(i
-
7/25/2019 SASE2011-Lenguaje_C.pdf
33/56
Repeticiones. While.
El for se presta para repetir cdigo n veces.
El while es apropiado para repetir cdigomientras se cumpla una condicin.Ej:
while(PTAD_PTAD0 == 1)
{PTBD_PTBD0 = 1;
}
PTBD_PTBD0 = 0;
-
7/25/2019 SASE2011-Lenguaje_C.pdf
34/56
Demoras. Cdigo en C.
Con sentencias en C es difcil determinar
el tiempo de demora.Ej:
for(i = 0; i < 100000; i++){}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
35/56
Demoras. Cdigo en assembler.
Usa la directiva asm. Puede determinarse el tiempo de la demora.Ej:
void main(void){unsigned char contador_1;
asm{
LDA #$FASTA contador_1;
dem_1s_1:NOPNOPNOPDBNZ contador_1,dem_1s_1
}}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
36/56
Demoras. Cdigo en C y assembler.
Usa un ncleo bsico en assembler. Un for multiplica esa demora.Ej:
void main(void)
{unsigned char contador_1;unsigned char contador_2;
for(contador_2 = 0; contador_2 < 10; contador_2++){
asm
{ LDA #$FASTA contador_1;
dem_1s_1:NOPNOPNOP
DBNZ contador_1,dem_1s_1}}
}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
37/56
Selecciones. If.
Permite ejecutar cdigo si se cumple una condicin.
if(condicin_1)
{ grupo de sentencias 1}else if(condicin_2){
grupo de sentencias 2}else if(condicin_3){
grupo de sentencias 3}else{
grupo de sentencias 4}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
38/56
Selecciones. If. Ejemplo.
if(numero == 0){
PTBD = 0x3f;}else if(numero == 1){
PTBD = 0x06;}else if(numero == 2){
PTBD = 0x5b;
}else.
-
7/25/2019 SASE2011-Lenguaje_C.pdf
39/56
FUNCIONES
-
7/25/2019 SASE2011-Lenguaje_C.pdf
40/56
Funciones.
Una funcin es una subrutina.
Una funcin debe ser declarada. Una funcin debe ser definida.
Una funcin puede ser invocada.
-
7/25/2019 SASE2011-Lenguaje_C.pdf
41/56
Funciones. Declaracin.
Damos a conocer al compilador su existencia. Las declaraciones suelen hacerse antes de la
funcin main.Ej:
void demora(void);
void main(void){
}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
42/56
Funciones. Definicin.
Es el cdigo de la funcin.
Ej:
void demora(void){unsigned char contador_1;
asm{
LDA #$FASTA contador_1;
dem_1s_1:NOPNOPNOPDBNZ contador_1,dem_1s_1
}}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
43/56
Funciones. Invocacin.
Es la llamada a la subrutina o funcin.
No hace falta de una instruccin comoCALL o JSR.Ej:
void main(void){
demora();}
-
7/25/2019 SASE2011-Lenguaje_C.pdf
44/56
Accesibilidad de variables.
Cada funcin tiene un rea de datos.
Las variables de una funcin sealmacenan en su rea de datos.
Las funciones no pueden acceder a lasreas de datos de otras funciones.
-
7/25/2019 SASE2011-Lenguaje_C.pdf
45/56
Accesibilidad de variables. Ejemplo.
void main(void){
unsigned char a;unsigned char contador_1;
demora();}
void demora(void){
unsigned char contador_1;
asm{
LDA #$FASTA contador_1;
dem_1s_1:NOPNOPNOPDBNZ contador_1,dem_1s_1
}}
rea datos
main
rea datos
demora
a
contador_1
contador_1
PILA oSTACK
C f
-
7/25/2019 SASE2011-Lenguaje_C.pdf
46/56
Comunicacin entre funciones
funcin func_a funcin func_b
char charint intfloat
float
char, int, float
char, int, float
P j d
-
7/25/2019 SASE2011-Lenguaje_C.pdf
47/56
Pasaje de parmetros
Al igual que en un computadora, la pila se
utiliza para el pasaje de parmetros:
int funcion(char a, int b, float c,.)
Ejemplo de pasaje de parmetros
-
7/25/2019 SASE2011-Lenguaje_C.pdf
48/56
Ejemplo de pasaje de parmetros
usando la pilavoid main(void){
int dunga, donga;
dunga = 3;donga = 5;
dunga = suma(dunga, donga);
donga = resta(dunga, donga);}
int sum(int s1, int s2){
return s1 + s2;}
int resta(int r1, int r2){
return r1 r2;}
main sum
donga ( 5 )
dunga ( 3 ) s1 ( 3 )
s2 ( 5 )
( 8 )dunga ( 8 )
restadunga ( 8 )
dunga ( 5 )
r1 ( 8 )
r2 ( 5 )
( 3 )donga ( 3 )
P j d t
-
7/25/2019 SASE2011-Lenguaje_C.pdf
49/56
Pasaje de parmetros.
Permiten comunicar variables de una funcin a otra.
Ej:void demora(unsigned char t)
{ unsigned char c, contador_1;
for(c = 0; c < t; c++){
asm{
LDA #$FASTA contador_1;dem_1s_1:
NOPNOPNOPDBNZ contador_1,dem_1s_1
}}
}
P j d t I i
-
7/25/2019 SASE2011-Lenguaje_C.pdf
50/56
Pasaje de parmetros. Invocacin.
Ej:
void main(void){
demora(10);demora(5);}
D l i d l
-
7/25/2019 SASE2011-Lenguaje_C.pdf
51/56
Devolucin de valores.
Permite que una funcin devuelva un resultado. Se devuelve un valor con la sentencia return.
Ej:unsigned BCD_a_bin(unsigned char a, unsignedchar b, unsigned char c){
unsigned char auxiliar;
auxiliar = a * 100 + b * 10 + c;
return auxiliar;}
De ol cin de alores In ocacin
-
7/25/2019 SASE2011-Lenguaje_C.pdf
52/56
Devolucin de valores. Invocacin.
Ej:
void main(void){unsigned char a, x;
a = 1;
x = BCD_a_bin(5, 4, a);}
Uso del heap
-
7/25/2019 SASE2011-Lenguaje_C.pdf
53/56
Uso del heap
Se hace declarando variables estticas
externas, mas conocidas comoVARIABLES GLOBALES.
Ejemplo de pasaje de parmetros
-
7/25/2019 SASE2011-Lenguaje_C.pdf
54/56
j p p j p
usando el heapint dunga, donga;
void main(void){
dunga = 3;donga = 5;suma();resta();
}
int suma(void){
dunga = dunga + donga;}
int resta(void)
{ dunga = dunga - donga;}
heap main
suma
resta
dunga
donga
Pasaje de parmetros usando el
-
7/25/2019 SASE2011-Lenguaje_C.pdf
55/56
j p
heapVentajas:
Pueden anidarse losllamados a funcionessin que crezca la pila
enormemente.
Desventajas:
La memoria usadaen el heap no puedeliberarse.
-
7/25/2019 SASE2011-Lenguaje_C.pdf
56/56
CHAU!