Introducción a Informática y Programación
Introducción a Informática y Programación
com/8avr:ioports
PROGRAMACIÓN EN C
INTEGRADO EN
MICROCONTROLADORES
[Link]
Ordenadores
Ordenador, computador o computadora.
Máquinas formadas por elementos de tipo electrónico, capaces de aceptar unos datos de
entrada, realizar con ellos gran variedad de tareas (operaciones) y proporcionar la
información resultante a través de un medio de salida, bajo el control de unas instrucciones
(programa), previamente almacenadas en el propio computador.
Hoy en día presentes en prácticamente cualquier actividad.
Por tratamiento automático de la información entendemos:
Tipos de Ordenadores
Atendiendo a sus prestaciones los ordenadores se pueden clasificar en
Informática
Conjunto de conocimientos científicos y técnicos que hacen posible el tratamiento
automático de la información por medio de los ordenadores.
Dato
• Dato en informática: representación formalizada de hechos o conceptos susceptible de ser
comunicada o procesada.
• Un conjunto de datos ordenado constituye información.
Tipos de Datos: Lenguajes recomendados para ...
• Numéricos (12, 28.5): reales o enteros Microcontrolador: Lenguaje C
• Alfabéticos (Ana): son los characters.
Microprocesador: Lenguaje Phyton
• Alfanuméricos: 23456X, M-6995
• Imágenes, sonido, video,…
[Link]
Representación de la Información
Los medios electrónicos de almacenamiento / procesamiento sólo disponen de dos estados
BIT y BYTE
BIT: (1/0)
• Los dígitos en el sistema de numeración binario se llaman bits (BIT= Binary digit)
• Es la unidad más pequeña de información, un uno o un cero.
BYTE: (0000 0000) (MSBXXX XXXLSB)
MSB(BIT más significativo) LSB(BIT menos significativo)
• Conjunto de 8 bits
• También se llama Octeto o Carácter (porque con un byte se suele codificar un
carácter).
Half Word = 16 BITS (Conjunto de 2 BYTE).
Single Word o Word = 32 BITS (Conjunto de 4 BYTE)
Double Word = 64 BITS
Quad Word = 128 BITS
Nibble = 4 BITS (Medio BYTE)
Representación de números
Enteros
• Se representan por separado los tres elementos del número en notación científica:
base, mantisa y exponente FPU(Floating point unit)
Ejemplo: 0,123 x 10-4
Se representan por separado base (10), mantisa Una unidad de coma flotante es un
(0,123) y exponente (-4) circuito integrado que maneja todas las
operaciones matemáticas que tienen
• Permite representar rangos grandes de números algo que ver con números o fracciones
usando pocos bits de coma flotante
• Actualmente se usa un sistema normalizado: norma IEEE 754
32 bits
Base 2, está predeterminada, por lo que no es necesario codificarla
Signo: un bit, 0 = +, 1= -
Exponente: 8 bits
Mantisa:23 bits
Ejemplo:
• Código ASCII extendido
✓ American Standard Code for Information Interchange Char ch = ‘f’;
✓ ASCII : solo 7 bits de los 8 que forman el byte
Es lo mismo que
El bit más significativo (izquierda) no se utilizaba
Se pueden representar 27 = 128 caracteres distintos Char ch=102;
[Link]
Programas
• Definición
✓ Conjunto de órdenes que se le dan a un ordenador para que realice un
determinado proceso
✓ Es el resultado de traducir un algoritmo a un lenguaje que entiende el
ordenador (lenguaje de programación).
✓ Resuelve un problema mediante el uso de un ordenador
• Una instrucción es una orden lanzada al ordenador
✓ Un programa es un conjunto de instrucciones
Recapitulando
Hay herramientas que facilitan el desarrollo de algoritmos; las de uso más común
son
✓ Diagramas de flujo (también llamados organigramas)
✓ Pseudocódigo
[Link]
Pseudocódigo
Ejemplos:
• SI (Condicional)
• Repetitivas
Ejemplos:
✓ Algoritmo que escriba 100 veces hola
✓ Algoritmo que escriba los números del uno al 100
✓ Algoritmo que sume 100 números introducidos por teclado
Para y mientras:
Escribir un algoritmo que dados dos números diga cuál es mayor, el primero o el segundo
[Link]
Software
Software: conjunto de elementos lógicos necesarios para realizar las tareas
• Software básico
✓ Conjunto de programas necesarios para correcto funcionamiento del
ordenador y de los periféricos
✓ Sistema operativo: conjunto de programas que realiza las tareas básicas del
sistema: control, reparto de recursos, gestión de entrada y salida
✓ Parte del software básico está cargado permanentemente en memoria (el
sistema operativo, algunos programas de utilidad o de comunicaciones y
programas antivirus)
• Software específico o software de aplicación
✓ Conjunto de programas que permiten la consecución de tareas específicas
para la resolución de los problemas del usuario
✓ También se llaman aplicaciones
Paquetes de ofimática, aplicaciones de gestión, juegos, etc.
Programas desarrollados para resolver problemas concretos
Lenguaje Ensamblador
• Se sustituye binario por nombres mnemotécnicos, pero son las mismas instrucciones
✓ a esos nombres se les llama etiquetas
✓ sigue dependiendo estrechamente de la computadora en la que se ejecuta el
programa
✓ Ofrece al programador elementos de muy bajo nivel que no facilitan la
expresión de soluciones de problemas complejos
✓ requieren del uso de un programa traductor (ensamblador) que traduzca las
instrucciones a lenguaje máquina.
• Las órdenes están escritas de forma similar al lenguaje natural, fáciles de recordar
[Link]
• Es necesario traducir las instrucciones a código máquina: para ello se utilizan los
programas traductores Compiladores e interpretes
Traductores de Lenguajes
• Los programas traductores transforman las instrucciones escritas en lenguaje
ensamblador o en lenguajes de alto nivel en instrucciones en lenguaje máquina
✓ Entrada: programa escrito en un determinado lenguaje de programación,
llamado programa o código fuente.
✓ Salida: programa equivalente escrito en código máquina
• Además de traducir pueden detectar errores en la escritura del programa (errores
sintácticos) e informar al programador para ayudarle a corregirlos
• Tipos de programas traductores
✓ Ensambladores
✓ Compiladores .EXE
✓ Intérpretes
• Programas ensambladores
Transforman programas escritos en ensamblador a programas escritos en lenguaje
máquina, que son directamente ejecutables.
• Programas compiladores
Transforman programas escritos en un lenguaje de alto nivel (código fuente) a
programas escritos en un lenguaje de bajo nivel (programa objeto).
• Programas intérpretes
Transforman programas escritos en un lenguaje de alto nivel (código fuente) en las
instrucciones necesarias en código máquina y las ejecutan inmediatamente.
Compiladores
Intérpretes
• Instrucción a instrucción
• Analizan cada instrucción y la traducen a código máquina
• La ejecución es supervisada por el programa intérprete
✓ Tiene que estar instalado el intérprete en el ordenador en el que ejecuto el
programa
• No se genera un programa objeto independiente
• El proceso de traducción se repite hasta finalizar las instrucciones del programa en
lenguaje de alto nivel, o hasta que se produzca un error
Comparativa Intérprete-Compilador
Memoria RAM
• Es la memoria principal
• RAM = Random Access Memory = Memoria de acceso aleatorio
• Se utiliza para almacenar los programas, los datos que éstos utilizan y el sistema
operativo residente.
• Se borra al apagar el ordenador
• Es de lectura y escritura
• Cuanto más memoria RAM tenga un ordenador mayor número de programas podrán
funcionar al mismo tiempo y programas más grandes podrán permanecer en
memoria
• Expansible usando módulos DIMM (anteriormente SIMM)
[Link]
Variables Globales:
Pueden ser usadas en
cualquier parte del
código.
NOTA:
En microcontroladores la
Formato:
%f : float
%d: Entero
%x: Hexadecimal
%ch: letra
pow(base, elevado)
%(cifras significativas).(decimales)(tipo)
Nota:
Stdint.h : Estándar int
Más común en la
Unsigned char num (Entero sin signo)
programación de
Char num (Entero con signo) microcontroladores.
[Link]
Base hexadecimal
5𝐹16
A base decimal
5𝐹16 = 161 𝑥5 + 160 𝑥15
5𝐹16 = 9510
%f : float
%d: Entero
%X: Hexadecimalx`
%ch: letra
%p : punteros
2.4e-3
“hola”
Formas de representar V o F:
Ejemplo:
La librería #include<string.h>
tiene funciones para el uso de
cadena de caracteres.
Ejemplo: strcpy
[Link]
En este lenguaje C, No
es aplicable para
comparar cadenas de
caracteres.
_Numeros
_Codigo Asccii
_Letras
[Link]
[Link]
Ejemplo:
Siempre cuando se trabaja con
microcontroladores, se debe usar
bien la memoria para optimizarla.
El resultado dará un
1 si es V
0 si es F
Otro Ejemplo:
[Link]
No importa si la variable es
local o global.
Valor Variable
[Link]
EJEMPLO:
Otra forma
[Link]
EJEMPLO EN MICROCONTROLADORES
[Link]
Ejemplo
[Link]
stddef.h
[Link]
%u : unsigned
%g
EJEMPLO:
[Link]
Scanf
[Link]
[Link]
Ejercicio 1
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(void) {
int fecha;
printf("\tEjercicio 1\n");
printf("Ingrese su a%co de nacimiento: ",164);
scanf("%d",&fecha);
int edad=2023-fecha;
printf("Si usted nacio en %d este a%co cumple %d\n ",fecha,164,edad);
system ("PAUSE");
return 0;
}
Ejercicio 2
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int suma;
int a,b,c;
int *ptra,*ptrb,*ptrc,*ptrsuma;
ptra=&a;
ptrb=&b;
ptrc=&c;
ptrsuma=&suma;
printf("\tEjercicio 2\n");
printf("Ingrese los valores a sumar\n");
printf("a= ");
scanf("%d",&a);
printf("b= ");
scanf("%d",&b);
printf("c= ");
scanf("%d",&c);
suma=a+b+c;
printf("La suma de %d, %d y %d es %d\n",*ptra,*ptrb,*ptrc,*ptrsuma);
system ("PAUSE");
return 0;
}
Ejercicio 4
#include <stdio.h>
#include <stdlib.h>
[Link]
int main(void) {
int h,b;
float area;
printf("\tEjercicio 4\n");
printf("Area de un triangulo rectangulo:\n");
printf("Altura: ");
scanf("%d",&h);
printf("Base: ");
scanf("%d",&b);
area=(float)(b*h)/2;
system("PAUSE");
return 0;
}
[Link]
Si la instrucción es de
solo una línea no es
necesario usar
corchetes. (Ya que
usarlas llenamos más
las líneas de códigos.)
[Link]
if ( ) {
}
else {
if ( ) {
}
}
Se puede usar la
mayor cantidad
necesaria de else if
[Link]
[Link]
Solución ejercicio 6:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void) {
float x;
float fx;
printf("\tEjercicio de ua funcion\n");
printf("Dado f(x), ingrese el valor de x: ");
scanf("%f",&x);
if(x<=0)
fx=x+3;
else
fx=pow(x,2)+2*x;
4.2.2 Switch
x
[Link]
Ejercicio 13
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdint.h>
int main(void) {
uint8_t selector;
float area=0;
uint32_t a,b,B;
printf("CALCULO DE AREAS\n");
printf("================\n");
printf("1. Calcula el area de un triangulo.\n");
printf("2. Calcula el area de un trapecio.\n");
printf("3. Calcula el area de un rectangulo.\n");
printf("Opcion --> ");
scanf("%c",&selector);
switch (selector){
case '1':
printf("\tArea de triangulo\n");
printf("base: ");
scanf("%d",&b);
printf("Altura: ");
scanf("%d",&a);
area=(float)(b*a)/2;
break;
case '2':
printf("\tArea de trapecio\n");
printf("Base mayor: ");
scanf("%d",&B);
printf("Base menor: ");
scanf("%d",&b);
printf("Altura: ");
scanf("%d",&a);
area=(float)((b+B)/2)*a;
break;
case '3':
printf("\tArea de rectangulo\n");
printf("Base: ");
scanf("%d",&b);
printf("Altura: ");
scanf("%d",&a);
area=b*a;
break;
default:
printf("La seleccion no es valida!!!\n.");
}
if(area>0)
printf("AREA---> %.2f\n",area);
system ("PAUSE");
return 0;
}
[Link]
4.3.1 While
[Link]
[Link]
4.3.2 Do-While
[Link]
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int numterminos;
int suma=0,i=0;
printf("\tSERIE DE NUMEROS MULTIPLOS DE 5\n");
do{
printf("Numero de terminos: ");
scanf ("%d",&numterminos);
}while(numterminos<=0);
/***************************************************/
/***************************************************/
while(i<numterminos){
suma=suma+5;
printf("%d",suma);
if(i<numterminos-1)
printf(", ");
i ++;
}
printf("\n");
system ("PAUSE");
return 0;
}
[Link]
4.3.3 For
[Link]
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int numero;
int suma=0;
int mayor;
int menor;
float media;
do{
printf("Numero %d°: ",i+1);
scanf("%d",&numero);
}while(numero<=0);
/******************************************/
if(i==0){
mayor=numero;
menor=numero;
}
/*****************************************/
//SUMA
suma+=numero;
//MAYOR
if(mayor<numero)
mayor=numero;
//MENOR
if(menor>numero)
menor=numero;
}
media=(float)suma/10.0;
printf("\nSUMA----->%d\n",suma);
printf("MAYOR---->%d\n",mayor);
printf("MENOR---->%d\n",menor);
printf("MEDIA---->%.2f\n",media);
system ("PAUSE");
return 0;
}
TEMA 5: FUNCIONES
5.1 Programación Modular
Módulo=SubPrograma=Función
[Link]
No devuelve
ningún valor
En un archivo heater (h.), solo va ir las declaraciones de los prototipos de las funciones.
Tambien puede ir las definiciones de constantes.
[Link]
If not define
Para macros:
Documentación
Otra forma
de
documenta
@param[n]: ción
Cuando hay más de dos parámetros:
@param[m]:
DEFINICIÓN DE UNA FUNCIÓN
[Link]
Bloque de código
Dentro de una
función podemos
tener varios
return.
Y luego se eliminan.
[Link]
Ejemplo:
[Link]
Ejemplo
main.c
Arrays o arreglos.
Ejercicio:
#include <stdio.h>
#include <stdlib.h>
/*
*Definimos los tamaños de los vectores como constantes
*/
/*DECLARACION DE VECTORES*/
//<tipo> <nombre> <dimensiones>
int array1 [LEN1]; // VECTOR 1 Se trabaja con función porque asi
int array2 [LEN2]; // VECTOR 2 se ahorra escribir repetidamente
int array3 [LEN3]; // VECTOR 3 alguna instrucción.
/**
* @brief: Funcion para ingresar los elementos de un vector
*/
void imputArray(int ptr[],int len);
/**
* @brief: Funcion para copia de vectores a un tercer vector
*/
void ArrayCopy(int *dest,int *scr1 ,int *scr2,int len1,int len2); //(donde se hara
la copia), (los vectores que se copiaran),(los tamaños de los vectores)
/**
* @brief: Funcion para mostrar en pantalla
*/
void ShowRes(int *ptr, int len);
/*
* Funcion principal
*/
int main(void) {
printf("Ingrese los valores del array 1:\n");
imputArray(array1,LEN1);
printf("Ingrese los valores del array 2:\n");
imputArray(array2,LEN2);
/*********************************************/
ArrayCopy(array3,array1,array2,LEN1,LEN2);
printf("El array 3 tiene los siguientes valores:\n");
ShowRes(array3, LEN3);
[Link]
system ("PAUSE");
return 0;
}
/**
* @brief: Funcion para ingresar los elementos de un vector
*/
void imputArray(int ptr[], int len){
for(int i=0;i<len;i++){
printf("elemento [%d]-->",i);
scanf("%d",&ptr[i]);
}
}
/**
* @brief: Funcion para copia de vectores a un tercer vector
*/
void ArrayCopy(int *dest,int *scr1 ,int *scr2,int len1,int len2){
for(int i=0;i<len1;i++){
dest[i]=scr1[i]; //Copia del primer array
}
for(int i=len1;i<len1+len2;i++){
dest[i]=scr2[i-len1]; //Copia del segundo array
}
/**
* @brief: Funcion para mostrar el tercer vector
*/
void ShowRes(int *ptr, int len){
for(int i=0;i<len;i++){
printf("Elemento[%d]:%d\n",i,ptr[i]);
}
return;
} Otra forma:
[Link]
No tenemos que preocuparnos en añadir el carácter nulo, ya que el mismo programa lo añade:
Como vemos, el vector que almacena la cadena de caracteres, presenta 6 elementos: E-S-T-O-\n-nulo.
Además se ve que hacemos uso de un macro. Este macro nos servirá para saber la cantidad de
elementos de la cadena de caracteres o vector.
[Link]
NOTA
[Link]
Ejemplo:
Entonces:
[Link]
Otra forma:
[Link]
[Link]
[Link]
El microprocesador es solo
CPU.
Memoria de programa
o Memoria Flash
Al ser en paralelo, el
procesador funciona mucho
más rápido.
Instrucciones complejas.
Se usan en Windows.
7. 5 Memoria de datos
PIC 18F4550
• S./25
• Necesita de un reloj de cristal + condensadores S./2
• Necesita un Pickit3 S./100 o S./80
[Link]
dsPIC30F4013
Stm32f407
Tarjeta tm4c123gh6pm
• Más caro
• Micro de 32 bits
Launchxl-f28379d
• Micros industriales
[Link]
• include
• define
• ifndef
• ifdef
• warning
• error
DIRECTIVAS DEL PREPROCESADOR
• if
• elif
• else
• #
• ##
[Link]
Elimina la definición.
Para advertencias.
[Link]
• Si no está definido:
ASI SE ESCRIBE
• Si está definido: LIBRERÍAS MÁS
COMPACTAS.
Cuando NUM1 es
30, se sombrea el
#if, #elif.
Segundo caso
[Link]
Cuando NUM1 es
10, se sombrea el
#if, #else.
Uso del ##
Establecer:
Clear:
Complemento:
REG: registro
Estas macros flexibilizan para poner 1 o 0
en los registros.
[Link]
Capacitancia
parásita
[Link]
Ejemplo
[Link]
Main.c
[Link]
Se copia y se pega
en el entorno main.
[Link]
EJEMPLO: