04a 150206074952-conversion-gate02

31
Sistemas Electrónicos Programables Facultad de Ingeniería, Universidad de Deusto Introducción a la Programación

Transcript of 04a 150206074952-conversion-gate02

Sistemas Electrónicos Programables Facultad de Ingeniería, Universidad de Deusto

Introducción a la Programación

Sistemas Electrónicos Programables

Se llama Programación a la implementación de

un algoritmo en un determinado lenguaje de

programación, para realizar un programa.

¿Qué es la Programación?

Un Algoritmo es una secuencia no ambigua, finita y

ordenada de instrucciones que han de seguirse para

resolver un problema.

Un Programa es una secuencia de instrucciones

que un procesador puede interpretar y ejecutar.

Un programa informático está formado por algoritmos y

estructuras de datos.

Sistemas Electrónicos Programables

Programación: Arte o Ciencia

PROGRAMACIÓN

CIENCIA

Estructuras de

Datos

Primitivas

Algorítmos

Metodologías

Paradigmas

Estructuras de

Control

Aprendizaje y Aplicación de la

Programación

Teoría de la

Programación

Diseño

Algorítmico

ARTE

Artículo completo en http://cala.unex.es/cala/epistemowikia/index.php?title=Programaci%C3%B3n:_%C2%BFarte_o_ciencia%3F

Donald Knuth escribió ‘Mi sensación es que cuando preparamos un programa, la experiencia es similar a la de crear poesía o

componer música; como dijo Andrei Ershov: programar puede proporcionarnos satisfacción, tanto intelectual como

emocionalmente, ya que superar la complejidad y establecer un sistema de normas es un logro real’

Sistemas Electrónicos Programables

Un Leguaje de Programación es el ‘idioma’

utilizado para controlar el comportamiento de un

sistema programable.

Lenguajes de Programación

Un lenguaje de programación consiste en un

conjunto de símbolos y reglas sintácticas y

semánticas que definen su estructura y el significado

de sus elementos y expresiones.

int a = 0, b = 4, c;

c = a + b;

if (c > 5)

c = 4;

Declaración de

variables

Condicional

Sentencia

Sistemas Electrónicos Programables

Lenguajes de Programación (continuación…)

Los lenguajes de programación se pueden clasificar por nivel: Lenguajes de alto nivel: aquellos con una estructura más

cercana al lenguaje humano (C, Java, Python…).

Lenguajes de bajo nivel: aquellos con una estructura más cercana al lenguaje máquina (ensamblador).

o por la forma de ejecutarse: Lenguajes compilados: aquellos cuyo código se

transforma a un código binario ejecutable directamente (C, Ensamblador…)

Lenguajes interpretados: aquellos que necesitan de un programa que traduzca en ejecución el código fuente escrito a instrucciones máquina (Java, Python…)

Sistemas Electrónicos Programables

Lenguajes de Alto y Bajo Nivel

Ejemplo de aplicación:

Desarrollar un sistema de iluminación interior, alimentado

por una placa solar, el cual se encenderá automáticamente

en base a la información proporcionada por dos sensores:

1. Sensor de luminosidad: se incluye un filtro hardware para que

se trate como un sensor digital (0 luz suficiente y 1 luz

insuficiente).

2. Sensor PIR de presencia: detecta la presencia (0) o no (1) de

una persona en la zona de iluminación.

¿En que lenguaje se programaría?

Sistemas Electrónicos Programables

Lenguajes de Alto y Bajo Nivel (continuación…)

Programa en Ensamblador (PIC12F508):

list p=12f508, f=inhx8m

#include "p12f508.inc"

__config _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC

counter equ 0x07

org 0 ; start program

movwf OSCCAL

init movlw b'11001011'

TRIS GPIO ; GP0 and GP1 input, GP2 ouput

clrf GPIO

movlw b'00010111'

OPTION ; Enabled Wake-Up, Clk=Osc/4, Prescaler to TMR0,

Prescaler=256

[continue...]

Sistemas Electrónicos Programables

Lenguajes de Alto y Bajo Nivel (continuación…)

Programa en Ensamblador (PIC12F508):

Loop btfss GPIO, 0 ; check luminosity sensor

goto idle

btfsc GPIO, 1 ; check presence sensor

goto idle

call onLight ; turn on light

onLoop call delay50ms ; delay 50mS

btfss GPIO, 1 ; check presence sensor

goto onLoop

movlw 0x64

movwf counter

marginLoop call delay50ms ; delay 50mS

btfss GPIO, 1 ; check presence sensor

goto onLoop

decfsz counter, f ; execute loop 100 times 5 seconds

goto marginLoop

goto idle ; go to standby

[continue...]

Sistemas Electrónicos Programables

Lenguajes de Alto y Bajo Nivel (continuación…)

Programa en Ensamblador (PIC12F508):

idle call offLight ; turn off light

sleep ; go to sleep mode

goto loop

onLight bsf GPIO, 2

retlw 0

offLight bcf GPIO, 2

retlw 0

//delay 50mS with Timer0

delay50ms clrf TMR0

nop

waitTMR0 movf TMR0, W

movlw 0xC2

subwf TMR0,W

btfss STATUS,C

goto waitTMR0

retlw 0

END

Sistemas Electrónicos Programables

Lenguajes de Alto y Bajo Nivel (continuación…)

Programa en C (ATMEGA328P con Arduino):

#define LIGHT 2

#define LUMINOSITY 3

#define PRESENCE 4

int cont;

void setup(){

pinMode(LIGHT, OUTPUT);

pinMode(LUMINOSITY, INPUT);

pinMode(PRESENCE, INPUT);

}

[continue...]

Sistemas Electrónicos Programables

Lenguajes de Alto y Bajo Nivel (continuación…)

Programa en C (ATMEGA328P con Arduino):

void loop(){

if (digitalRead(LUMINOSITY) == HIGH) {

if (digitalRead(PRESENCE) == LOW){

digitalWrite(LIGHT, HIGH);

contador = 100;

do {

delay(50);

if (digitalRead(PRSESENCE) == HIGH)

contador--;

else

contador = 100;

}

while(contador > 0);

digitalWrite(LIGHT, LOW);

}

}

}

Sistemas Electrónicos Programables

Proceso de Compilación

Programa

Fuente

COMPILADOR

Programa

Objeto

LINKER

Programa

Ejecutable

Err

ore

s

Lenguaje de alto nivel

Lenguaje máquina

Depura

ció

n e

n T

iem

po d

e E

jecució

n

Lenguaje

de bajo nivel

Sistemas Electrónicos Programables

Estructuras Básicas de Control

if (expresión)

{

sentencias

}

else

{

sentencias

}

Condicional

while (expresión)

{

sentencias

}

do

{

sentencias

}

while (expresión)

for expr1;expr2;expr3)

{

sentencias

}

Iteraciones

switch

(expresión)

{

case valor1:

sentencias

break;

...

default:

sentencias

break;

}

Selección

Sistemas Electrónicos Programables

Tipos de Datos Básicos

Tipo Tamaño Mínimo Máximo

boolean 1 bit 0 ‘falso’ 1 ‘verdadero’

char* 8 bits -128 127

unsigned char 8 bits 0 255

int 16 bits -32768 32767

unsigned int 16 bits 0 65535

short long 24 bits -8388608 8388607

unsigned short long 24 bits 0 16777215

long 32 bits -2147483648 2147483647

unsigned long 32 bits 0 4294967295

float 32 bits -3.4x10-38 3.4x1038

* El char representa un carácter ASSCI pero internamente es un valor

entero de 8 bits

Sistemas Electrónicos Programables

Variables

Las variables es sólo un nombre para identificar

posiciones de memoria.

Este nombre debe ser válido y único.

Toda variable debe ser declarada antes de ser usada.

En las variables (posiciones de memoria) se

guardan los datos usado por un programa en

ejecución. long a;

unsigned int a = 30;

Una variable se puede

inicializar en su declaración

Sistemas Electrónicos Programables

Variables (continuación…)

Las variables pueden ser: Globales: son las que se declarar fuera de cualquier

función; y son accesibles desde cualquier parte del programa.

Locales: son las que se declaran dentro de una función; y sólo son accesibles para ser usadas dentro de esa función.

int a = 5;

void funcion1(){

int b = a + 2;

}

void funcion2() {

int c = b + 4;

}

Error de Compilación

http://arduino.cc/en/pmwiki.php?n=Reference/Scope

Sistemas Electrónicos Programables

Variables (continuación…)

Por medio de la palabra clave static se pueden crear

variables visibles sólo dentro de la función donde es

declarada;

mientras que una variable local es destruida cada vez

que la función es llamada, las variables estáticas

persisten entre diferentes llamadas.

int getValue(){

static int value;

value = value + 1;

return value;

}

Una variable estática no

puede ser inicializada en

la declaración

http://arduino.cc/en/pmwiki.php?n=Reference/Static

Sistemas Electrónicos Programables

Constantes

Son aquellos valores que una vez compilado el

programa, no pueden ser cambiados.

Se declaran con la directiva ‘#define’ y pueden ser de tipo

carácter, entero, decimal…

O con la palabra clave const:

#define A 30

¡¡INFRAUTILIZADAS!!

Muy útiles para el mantenimiento del software

const int A = 30;

Sistemas Electrónicos Programables

Operadores Aritméticos Básicos

Suma ‘+’: a + b

Resta ‘-’: a – b

Multiplicación ‘*’ : a * b

División ‘/’: a / b

División resto ‘%’: a % b

Incremento ‘++’: a++

Decremento ‘--’: a--

Sistemas Electrónicos Programables

Operadores a Nivel de Bit Básicos

And ‘&’: a & b

Or ‘|’: a | b

xor ‘^’ : a ^ b

not ‘~’: ~a

Desplazamiento a la derecha ‘>>’: a >> 4

Desplazamiento a izquierda ‘<<’: a << 4

Sistemas Electrónicos Programables

Operadores Lógicos Básicos

and ‘&&’: a && b

or ‘||’: a || b

not ‘!’ : !a

igualdad ‘==’: a == 4

desigualdad ‘!=’: a != 4

mayor que ‘>’: a > 4

mayor o igual que ‘>=’: a >= 4

Menor que ‘<’: a < 4

Menor o igual que ‘<=’: a < 4

Sistemas Electrónicos Programables

Subrutinas o Funciones

Las funciones tienen que estar declaradas para

poder ser utilizadas.

Pueden recibir valores que modificarán su

comportamiento.

Una Función es un conjunto de líneas de código

que realizan una tarea específica y pueden

retornar un valor.

int Suma(int a, int b)

{

return a + b;

}

Sistemas Electrónicos Programables

Subrutinas o Funciones (continuación…)

¿Cómo llamar a una función?

por su nombre,

y pasando los parámetros que tenga declarados.

La función Main es el punto de inicio de un

programa.

C = Suma(5, 6);

int Main() ó int Main(int argc, char *argv[])

Sistemas Electrónicos Programables

Entorno de Desarrollo

Un buen entorno de desarrollo facilita y agiliza el proceso de programación.

Pueden incluir también: Simuladores: permite hacer una simulación del programa

implementado

Debuggers: permite ver la ejecución real del programa paso a paso.

Un Entorno de Desarrollo Integrado o IDE es

un programa software compuesto por un

conjunto de herramientas que facilitan a los

programadores la creación de programas.

Sistemas Electrónicos Programables

Técnicas de Programación

Programación estructurada: es un paradigma de programación orientado a mejorar la claridad, calidad y tiempo de desarrollo, utilizando únicamente subrutinas y tres estructuras:

secuencia, selección e iteración.

Programación orientada a objetos: es un paradigma de programación que usa objetos para diseñar los programas.

Usa técnicas como la herencia, el polimorfismo o el encapsulado.

Otras: programación funcional, programación dirigida a eventos…

Sistemas Electrónicos Programables

Diagramas de Secuencia

También conocidos como organigramas, son una

representación gráfica de un algoritmo.

Utiliza símbolos para representar las sentencias o las

estructuras de control.

Simbología básica:

Inicio (punto de entrada) y fin (punto de salida) del

diagrama

Formula una pregunta o cuestión, y ejecuta una

salida u otra.

Indica la secuencia del diagrama

Representa la ejecución de una o más actividades o

procedimientos.

¡No lo toques!

¿Funciona?

¿Lo has

tocado?

¡Imbécil!

¿Tendrás

problemas?

Pasa del tema

¡Pobre bastardo!

¿Lo sabe

alguien?

¿Puedes

culpar a otro?

¡¡ NO HAY

PROBLEMA !!

¡Escóndelo!

Si No

Si

Si

Si

Si

No

No

No

No

Sistemas Electrónicos Programables

Fases del Desarrollo Software

IMPLANTACIÓN Se implanta el sistema donde corresponda y…

PRUEBA Se comprueba el funcionamiento del sistema en

base a los requisitos definidos en el análisis.

IMPLEMENTACIÓN Se implementa el programa.

DISEÑO

Se diseñan los diferentes algoritmos a

implementar siguiendo las especificaciones

anteriores.

ANÁLISIS

Se debe estudiar el sistema a desarrollar,

comprenderlo y especificar los requisitos

software.

Err

or

Err

or

Sistemas Electrónicos Programables

Estrategia de Diseño Top-Down

En el modelo Top-Down cada parte del sistema se

especifica de forma superficial para después refinar

con mayor detalle cada parte.

Se realizan tantas iteraciones como sean necesarias.

La codificación no puede comenzar hasta que no se haya

alcanzado un nivel de detalle suficiente.

En el diseño Bottom-Up se diseñan en detalle las

partes individuales y después se enlazan para

formar componentes más grandes.

Sistemas Electrónicos Programables

Estrategia de Diseño Top-Down (continuación…)

Diagrama

función Main Se define la estructura de la función Main

Diagramas de

funciones de nivel

1

Se estudian todas aquellas funciones de

alto nivel que surgen del paso anterior

Diagramas de funciones

de nivel 2..n

Se repite el proceso anterior hasta

definir el funcionamiento de todas las

funciones

Diagramas con detalles de

programación

Se complementan las funciones con

detalles relevantes para la

programación final

Esta presentación está sujeta a la licencia de Reconocimiento

de Creative Commons mediante la cual se permite la copia, la

distribución, la comunicación pública y la generación de obras

derivadas sin ninguna limitación siempre que se cite al autor y

se mantenga el aviso de la licencia.

© 2014, Jonathan Ruiz de Garibay

Algunos derechos reservados