0% encontró este documento útil (0 votos)
100 vistas149 páginas

Programación en C Integrado en Microcontroladores

Este documento describe los puertos de entrada y salida (I/O ports) en los microcontroladores AVR. Explica que los puertos I/O permiten la comunicación entre el microcontrolador y el mundo exterior, y que pueden configurarse como entradas o salidas. También proporciona detalles sobre cómo acceder y manipular los puertos I/O desde el lenguaje de programación C.

Cargado por

Magnolia Prada
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
100 vistas149 páginas

Programación en C Integrado en Microcontroladores

Este documento describe los puertos de entrada y salida (I/O ports) en los microcontroladores AVR. Explica que los puertos I/O permiten la comunicación entre el microcontrolador y el mundo exterior, y que pueden configurarse como entradas o salidas. También proporciona detalles sobre cómo acceder y manipular los puertos I/O desde el lenguaje de programación C.

Cargado por

Magnolia Prada
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 149

https://microchipdeveloper.

com/8avr:ioports

PROGRAMACIÓN EN C
INTEGRADO EN
MICROCONTROLADORES
https://microchipdeveloper.com/8avr:ioports

TEMA 1: INTRODUCCIÓN A LA INFORMÁTICA Y LA PROGRAMACIÓN


1.1. Informática y Ordenadores
Informática
Conjunto de conocimientos científicos y técnicas que hacen posible el tratamiento
automático de la información por medio de los ordenadores (RAE).
𝐼𝑛𝑓𝑜𝑟𝑚á𝑡𝑖𝑐𝑎 = 𝐼𝑛𝑓𝑜𝑟𝑚𝑎𝑐𝑖ó𝑛 + 𝐴𝑢𝑡𝑜𝑚á𝑡𝑖𝑐𝑎
Ciencia de las computadoras.

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:

• Adquisición de información mediante los elementos de entrada: lectura.


• Representación de la información de forma que pueda ser tratada por el ordenador.
• Tratamiento de la información mediante operaciones lógicas y aritméticas: cálculo
aritmético y lógico.
• Almacenamiento de información.
• Transmisión de información mediante los elementos de salida: registro, escritura.
Características de los Ordenadores:

• Gran velocidad de tratamiento de la información.


• Gran potencia de cálculo.
• Facultad para memorizar los programas y datos necesarios para resolver problemas.
• Facultad de comunicación con las personas y otras máquinas.
Elementos fundamentales de un Ordenador:
➢ Hardware (Soporte Físico)
Elementos mecánicos y electrónicos que componen físicamente el ordenador;
memoria, monitor, teclado.
➢ Software (Soporte Lógico)
Es la parte lógica que dota al soporte físico de la capacidad para realizar tareas.
Conjunto de programas que hacen posible el funcionamiento del ordenador.
Procesador de texto, editor de imágenes, videojuegos.
https://microchipdeveloper.com/8avr:ioports

Tipos de Ordenadores
Atendiendo a sus prestaciones los ordenadores se pueden clasificar en

• Supercomputadores: cálculo intensivo de tipo científico y técnico


• Servidores de gama alta: acceso a grandes bancos de datos desde muchos terminales
(cientos de miles de usuarios simultáneos)
• Servidor básico: aplicaciones múltiples en empresas a través de la red (decenas de
usuarios simultáneos)
• Computadores personales: aplicaciones múltiples con un solo usuario
• Computadores móviles: computadores muy reducidos, en los que se reducen las
prestaciones a cambio de conseguir mayor movilidad (agendas digitales, teléfonos
móviles tipo smartphone, tablet pcs)

1.2. Representación de la Información


Información
Conjunto de datos que, estructurados en un orden determinado, aportan conocimiento
sobre un tema.

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.

Necesidad de representar la información sobre un problema para poder tratarla utilizando


un ordenador.
Representación de la información en un formato que pueda ser almacenado y procesado
por el ordenador.

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,…
https://microchipdeveloper.com/8avr:ioports

Representación de la Información
Los medios electrónicos de almacenamiento / procesamiento sólo disponen de dos estados

• interruptor (relé) abierto-cerrado Tipos de datos:


• paso o no paso de corriente _Dinámicos: Son aquellas en las que el tamaño podrá
• magnetización en un sentido u otro modificarse durante la ejecución del programa.

_Estáticos: Son aquellas en las que el tamaño ocupado en la


memoria se define antes de que el programa se ejecute y no
La información procesada por un ordenador puede ser modificado durante la ejecución del programa.
son siempre 1s y 0s _Constantes.
• Necesidad de 'traducir' cualquier dato a una combinación de esos dos símbolos
Notación binaria

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

• Un numero entero puede ser representado en base dos (sistema de numeración


binario)
25= 16 + 8 + 1 = 1 x 24 + 1 x 23 + 0 x 22 + 0 x 21 +1x20 = 11001
• Módulo y signo (Se usa un bit adicional para representar el signo)
• Representación en complemento
https://microchipdeveloper.com/8avr:ioports

Más apropiada para el procesamiento de la información en un ordenador


-3 Complemento a 2
Uso de la codificación hexadecimal y octal

• Se utiliza para ‘resumir’ números codificados en binario

El número binario 1010110001101101 (0-1) 0b0101010


Es en octal 126155 (0-7)
Y en hexadecimal AC6D (0-F =“15”) 15= 0xF
Reales

• 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

• Al representar de esta forma se pierde precisión


! Cuidado al comparar números! El ordenador sólo los considera iguales si todos los
bits son iguales. NOTA:
La norma IEEE 754 también contempla usar 64 bits (doble precisión)
Una dirección de
memoria
Codificación de Caracteres Alfanuméricos contiene 1 BYTE.
• Códigos de caracteres
✓ código = correspondencia biunívoca entre un conjunto de caracteres y un
conjunto de combinaciones de bits (tabla)
✓ Caracteres: numéricos, alfabéticos, alfanuméricos, especiales y de control.

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;
https://microchipdeveloper.com/8avr:ioports

✓ ASCII extendido: 8 bits


Con 8 bits (1 byte) se pueden representar 28 = 256 caracteres diferentes

Representación del Sonido


El sonido es analógico

• Hay que empezar por discretizarlo: muestreo (sampling)


• Cada muestra se codifica (por ejemplo como un entero con un byte)
Se pierde información

• La calidad del sonido reconstruido dependerá de:


Número de muestras por segundo
Número de bits usados para codificar cada muestra
https://microchipdeveloper.com/8avr:ioports

1.3. Algoritmos y Programas


Algoritmo
• Un algoritmo es una secuencia finita y precisa de instrucciones o pasos que permiten
resolver un problema dado.
✓ Transforma los datos iniciales en los resultados deseados.
• El algoritmo permite automatizar una operación
• Ejemplos
✓ Algoritmo para ordenar una lista de números
✓ Algoritmo para distribuir los escaños de un parlamento según los votos

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

• Dado un problema , se necesita una información sobre el problema compuesta por


datos; estos datos son procesados por el ordenador mediante un programa
almacenado en él;
• Éste programa ejecuta un conjunto de órdenes o instrucciones para implementar un
algoritmo creado para resolver el problema.
• El programa proporciona una salida que es la solución del problema, en forma de
datos.
https://microchipdeveloper.com/8avr:ioports

Datos, Expresiones e Instrucciones


• Programa: conjunto de órdenes (llamadas instrucciones o sentencias) escritas en un
determinado lenguaje de programación, que se le dan a un ordenador para que
realice un determinado proceso
✓ Un programa implementa un algoritmo

Las instrucciones de un programa se construyen utilizando unos símbolos y unas


reglas propias del lenguaje de programación.
Un programa está formado por:
✓ Datos del programa:
Información que procesa el programa
✓ Expresiones:
Operaciones sobre los datos, realizadas mediante operadores
✓ Instrucciones:
Acciones a realizar, normalmente sobre los datos
• Un algoritmo debe ser:
✓ Preciso y unívoco
✓ Finito: número finito de pasos
✓ Correcto: conducir a la solución
✓ Óptimo: menor número de instrucciones posibles

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
https://microchipdeveloper.com/8avr:ioports

Herramientas para el Diseño de Algoritmos


Diagramas de flujo

• Representación gráfica que permite detallar el flujo de un algoritmo


Pseudocódigo

• Expresión del algoritmo en lenguaje natural


Diagramas de Flujo
Diagramas de flujo u organigramas:

• Representaciones gráficas que permiten detallar el flujo de un programa (orden de


las instrucciones).

Nota: Expresión booleana es una expresión cuyo resultado es verdadero o falso.


Ejemplos:

Pseudocódigo

• La solución del problema se escribe utilizando palabras del lenguaje natural.


• Paso intermedio entre la solución del problema y su codificación en un determinado
lenguaje de programación
https://microchipdeveloper.com/8avr:ioports

Los programas en pseudocódigo suelen incluir:

• Nombre del programa


• Entorno: descripción de los elementos a utilizar (variables, constantes), indicando
su tipo.
• Instrucciones necesarias para resolver el problema (en lenguaje natural)

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
https://microchipdeveloper.com/8avr:ioports

TEMA 2: ARQUITECTURA DEL ORDENADOR: HARDWARE Y


SOFTWARE
2.1 Soporte Lógico: Software
Ordenador o computador:
Máquina formada por elementos de tipo electrónico, capaz de aceptar unos datos a través
de un medio de entrada, procesarlos automáticamente bajo el control de un programa
previamente almacenado y proporcionar la información resultante a través de un medio de
salida.
https://microchipdeveloper.com/8avr:ioports

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

Lenguajes de Programación (Clasificación)


• Tres tipos de lenguajes de programación
✓ Lenguaje máquina (Más complicado, porque se escribe en 0 y 1.
“10101010101”)
✓ Lenguaje ensamblador (Se escribe código usando lista de instrucciones)
✓ Lenguajes de alto nivel
• En función de su grado de similitud con el lenguaje natural se llaman:
✓ de alto nivel (cerca del lenguaje natural)
✓ de bajo nivel (cerca de la máquina), hay dos tipos:
Lenguaje máquina
Lenguaje ensamblador
• El ordenador sólo puede ejecutar lenguaje máquina (órdenes codificadas en forma
binaria).
Lenguaje Máquina (Código Binario)

• Es el lenguaje que puede ser interpretado directamente por el ordenador


✓ Las instrucciones y los datos están compuestos por series de bits (0 o 1) que
hacen referencia a direcciones de memoria y ejecutan acciones con su
contenido
✓ se llama también código binario
https://microchipdeveloper.com/8avr:ioports

Ejemplo: Instrucción para sumar los registros 1 y 2 y colocar el resultado en el registro 6


(Arquitectura MIPS).

• El número de instrucciones posibles es bastante reducido.


• Esas instrucciones están más cerca del ordenador que del programador
✓ Es más difícil de programar
✓ Es el código que más rápido se ejecuta
• Dependen del procesador, sus instrucciones hacen uso de los componentes
hardware de éste
✓ un programa escrito para una determinada máquina no puede ejecutarse en
otra distinta.
• Es fácil cometer errores difíciles de localizar y de corregir.

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.

Lenguajes de Alto Nivel

• Las órdenes están escritas de forma similar al lenguaje natural, fáciles de recordar
https://microchipdeveloper.com/8avr:ioports

• Es necesario traducir las instrucciones a código máquina: para ello se utilizan los
programas traductores Compiladores e interpretes

✓ Un programa escrito en un lenguaje de alto nivel no depende de la estructura


interna del procesador donde se va a ejecutar, es transportable de una
máquina a otra
✓ Pero el programa traductor sí será diferente si se quiere ejecutar en
diferentes procesadores
• Hay casi 300 lenguajes (más de 2400 si se incluyen "dialectos"): Fortran, Pascal,
Cobol, Basic, C, C++, Java, Ada, etc.

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

• Transforman programas escritos en un lenguaje de alto nivel (programa o código


fuente) a programas escritos en un lenguaje de bajo nivel (programa objeto)
• El programa objeto no es directamente ejecutable, necesita del enlazador (linkador),
programa que une el código objeto con otros códigos (p.ej librerías para la escritura
en pantalla,…) dando lugar al programa ejecutable.
• Si se detectan errores sintácticos (que impiden compilar todo el programa) se
informa al programador y no se genera el código objeto
https://microchipdeveloper.com/8avr:ioports

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

• Ventajas del compilador


✓ Se compila el programa una vez y se puede usar tantas como se necesite
✓ Se detectan los errores sintácticos en tiempo de compilación (durante el
desarrollo del programa)
✓ Si el programa es muy grande y se va a usar muchas veces, el compilador es
más rápido ej: en un bucle de 1000 iteraciones el intérprete analiza y traduce
1000 veces el código
✓ no es necesario tener instalado el compilador en el ordenador para poder
ejecutar el programa
• Ventajas del intérprete
✓ el mismo código puede ejecutarse en diferentes entornos (p.ej. diferentes
sistemas operativos), siempre que haya un intérprete para ese so.
✓ Se puede conocer paso a paso el valor de una variable.
en un compilador sólo se puede si se ejecuta bajo el control de un depurador
(debugger, un programa especial)
STLINKV3
https://microchipdeveloper.com/8avr:ioports

2.2 Soporte Físico: Hardware


Arquitectura Interna
Arquitectura interna básica de un ordenador

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)
https://microchipdeveloper.com/8avr:ioports

TEMA 3: ELEMENTOS BÁSICOS DEL LENGUAJE C


3.1. Introducción al lenguaje C
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

(scanf, printf): no son


palabras claves, son
funciones que se usan
gracias a las librerías
puestas.

A las librerías se les


conoce como
“HEADER FILES”
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

3.2. Estructura General De Un Programa En C

(estándar data input output)


https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

3.3. Variables y Constantes


https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

Nomenclatura del camello

Variables Globales:
Pueden ser usadas en
cualquier parte del
código.

Variables Globales: Variables Locales:

Si no se da un valor, toma el valor 0 Si no se da un valor, toma un valor


aleatorio.
https://microchipdeveloper.com/8avr:ioports

#define: Directiva del pre


procesador del lenguaje C.

_Se usa para optimizar código,


librerías más compactas.
https://microchipdeveloper.com/8avr:ioports

Se almacena en la memoria Flash.

NOTA:

En microcontroladores la

MEMORIA FLASH > MEMORIA RAM

Por eso se recomienda que todo el código


se use más en la memoria Flash.
https://microchipdeveloper.com/8avr:ioports

retarget : para sistemas embebidos

Formato:

_Qué tipo de valor se va leer

%f : float

%d: Entero

%x: Hexadecimal

%ch: letra

%s: Cadena de caracteres


https://microchipdeveloper.com/8avr:ioports

&: este operador indica que, obtiene la dirección de memoria


donde se almacena una variable. Asi logra modificarla.

pow: es para exponentes.

pow(base, elevado)

%.2f “significa que tiene dos decimales”

%(cifras significativas).(decimales)(tipo)

\t “Es un tabulador, desplaza el texto en la fila”


https://microchipdeveloper.com/8avr:ioports

\n “Indica, salto de línea”

3.4. TIPOS DE DATOS SIMPLES EN C

Teórico: -128 a 127

Vacio, se usa normalmente en sistemas operativos


https://microchipdeveloper.com/8avr:ioports

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.
https://microchipdeveloper.com/8avr:ioports

Base hexadecimal
5𝐹16
A base decimal
5𝐹16 = 161 𝑥5 + 160 𝑥15
5𝐹16 = 9510

FORMAS DE REPRESENTAR UN NÚMERO


https://microchipdeveloper.com/8avr:ioports

Para mostrar el octal, hexadecimal (printf)


Formato:

_Qué tipo de valor se va


leer

%f : float

%d: Entero

%X: Hexadecimalx`

%ch: letra

%s: Cadena de caracteres

%p : punteros

La “E” también puede representarse


en minúscula.

2.4e-3

El uso de la “E” facilita al momento


de definir la frecuencia de oscilación
en un microcontrolador.

8 000 000 Hz = 8E+6


https://microchipdeveloper.com/8avr:ioports

Cuando se quiere trabajar con cadena


de caracteres se utiliza doble comilla.

“hola”

Para mostrar letras(printf)


https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

Formas de representar V o F:

Es mejor representar en cadena


de caracteres, el número, ya que
cada numero representará un
byte. Esto facilita ya que no será
necesario de usar el binario para
representar a numero grande.
https://microchipdeveloper.com/8avr:ioports

Ejemplo:

La librería #include<string.h>
tiene funciones para el uso de
cadena de caracteres.

Ejemplo: strcpy
https://microchipdeveloper.com/8avr:ioports

3.5 OPERADORES, EXPRESIONES E INSTRUCCIONES


https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

3.6 TIPOS DE OPERADORES: ARITMETICOS, RELACIONALES Y


LOGICOS
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

En este lenguaje C, No
es aplicable para
comparar cadenas de
caracteres.

Pero, sí aplicable para


compara:

_Numeros
_Codigo Asccii
_Letras
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

Unarios: Son Aquelllas expresiones que


tienen un operando o una variable.

Ejemplo:
Siempre cuando se trabaja con
microcontroladores, se debe usar
bien la memoria para optimizarla.

Por ejemplo un microcontrolador de


8 bits tiene una RAM pequeña en
comparación a una de 32 bits.
https://microchipdeveloper.com/8avr:ioports

Otra forma del ejemplo:


Se usa la librería para usar booleanos
#include <stdbool.h>

El resultado dará un

1 si es V

0 si es F

Otro Ejemplo:
https://microchipdeveloper.com/8avr:ioports

Estas Variables se almacenan


en la memoria RAM

Estas variables locales se


almacenan en el Stack o pila
https://microchipdeveloper.com/8avr:ioports

Mediante punteros , se puede


3.7 El TIPO PUNTERO manejar Hardware de manera directa.

No importa si la variable es
local o global.

ptr : se coloca por convencion


cuando se indica que es un puntero.

Valor Variable
https://microchipdeveloper.com/8avr:ioports

Tambien se usa para cambiar el dato de la variable.


https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

EJEMPLO:

Otra forma
https://microchipdeveloper.com/8avr:ioports

\r : significa que regresa el


cursor al principio de la línea.

EJEMPLO EN MICROCONTROLADORES
https://microchipdeveloper.com/8avr:ioports

Se usa cuando no se sabe a


que tipo de dato se dirige.

Ejemplo
https://microchipdeveloper.com/8avr:ioports

Se le añade CAST: Convertir un


un CAST valor.

Se usa cuando se crea


funciones en librerías.

stddef.h
https://microchipdeveloper.com/8avr:ioports

3.8 OPERACIONES DE ENTRADA/SALIDA


https://microchipdeveloper.com/8avr:ioports

%u : unsigned
%g

Para mostrar en binario no hay.


https://microchipdeveloper.com/8avr:ioports

Sprintf : Se usa mas en microcontroladores, cuando se trabaja con


LCD, ya que el valor se almacena en un vector o buffer.

EJEMPLO:
https://microchipdeveloper.com/8avr:ioports

Regresa de uno en uno.

Scanf
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

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>
https://microchipdeveloper.com/8avr:ioports

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;

printf("El area es: %.2f\n",area);

system("PAUSE");
return 0;
}
https://microchipdeveloper.com/8avr:ioports

TEMA 4: ESTRUCTURAS DE CONTROL


4.1 Introducción

4.2 Estructuras de control alternativas


https://microchipdeveloper.com/8avr:ioports

Break : Se usa bastante


cuando se quiere romper
ciclos while.

Tiene que ser un numero entero


o un char.

Se pone para que una ves se


ejecute una instrucción de
un caso no ejecute otra
4.2.1 IF-Else instrucción de otro caso y
rompe la función.

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.)
https://microchipdeveloper.com/8avr:ioports

Esto está mal.

if ( ) {
}
else {
if ( ) {
}
}

Se puede usar la
mayor cantidad
necesaria de else if
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

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;

printf("\nEl valor de f(%.2f) es : %.2f\n\n",x,fx);


system ("PAUSE");
return 0;
}
https://microchipdeveloper.com/8avr:ioports

4.2.2 Switch

Tiene que ser un numero


entero o un char.
https://microchipdeveloper.com/8avr:ioports

x
https://microchipdeveloper.com/8avr:ioports

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;
}
https://microchipdeveloper.com/8avr:ioports

4.3 Estructuras de control repetitivas

4.3.1 While
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

4.3.2 Do-While
https://microchipdeveloper.com/8avr:ioports

#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;
}
https://microchipdeveloper.com/8avr:ioports

4.3.3 For
https://microchipdeveloper.com/8avr:ioports

#include <stdio.h>
#include <stdlib.h>

int main(void) {
int numero;
int suma=0;
int mayor;
int menor;
float media;

for (int i=0;i<10;i++){


https://microchipdeveloper.com/8avr:ioports

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;
}

4.4 Anidamiento de estructuras de control


https://microchipdeveloper.com/8avr:ioports

TEMA 5: FUNCIONES
5.1 Programación Modular

goto: Salto de Línea


https://microchipdeveloper.com/8avr:ioports

Módulo=SubPrograma=Función
https://microchipdeveloper.com/8avr:ioports

Int main o void main


https://microchipdeveloper.com/8avr:ioports

5.2 Implementación de Funciones


https://microchipdeveloper.com/8avr:ioports

No devuelve
ningún valor

No necesita parámetros, pero


sí devuelve un valor entero.
https://microchipdeveloper.com/8avr:ioports

Cuando quieres que el parámetro sea un vector o una matriz, se


declara mediante una dirección de memoria, es dcier, un puntero.

En un archivo heater (h.), solo va ir las declaraciones de los prototipos de las funciones.
Tambien puede ir las definiciones de constantes.
https://microchipdeveloper.com/8avr:ioports

Pasos para crear un .h


https://microchipdeveloper.com/8avr:ioports

If not define

Directivas al preprocesador del lenguaje C.


https://microchipdeveloper.com/8avr:ioports

El cambio de color quiere decir que ya no se


leera, porque ya ha sido definida la función
antes, lineas arriba.(#define FUNCIONES_H_)

La variable”numeros” está Esto


definida en el prog.principal.
contiene
en un
archivo
header (.h)
https://microchipdeveloper.com/8avr:ioports
Otra forma de definir

Al incluir esa librería, hace


que reemplace lo que
contiene en esta nueva
librería (funciones2.h)

Definición de los macros:

Para macros:

Puede ser #define o CONST

Typedef: son tipos de datos que vamos a definir.


https://microchipdeveloper.com/8avr:ioports

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
https://microchipdeveloper.com/8avr:ioports

Bloque de código

Return: nos va a dar el valor


de retorno de la
función.(real,puntero,entero)
https://microchipdeveloper.com/8avr:ioports

Dentro de una
función podemos
tener varios
return.

Y luego se eliminan.
https://microchipdeveloper.com/8avr:ioports

Ejemplo:
https://microchipdeveloper.com/8avr:ioports

5.3 Llamada a Funciones

Si no presenta parámetros, no se pone vacio


https://microchipdeveloper.com/8avr:ioports

Ejemplo

Paso por valor: El valor


de n1 y n2 se le hace
una copia en a y b, y a
como b se pueden
Del ejemplo en STM32CubeIDE: modificar.
https://microchipdeveloper.com/8avr:ioports

main.c

Paso por valor

header para declarar funciones


https://microchipdeveloper.com/8avr:ioports

.c para definir funciones

Variable estatica: static

Puede ser Global o Local.


Retienen su valor cuando termine de ejecutarse la función. Por ende inicializan con el valor almacenado
anteriormente.

5.4 Paso de Parámetros a una Función: Por Valor y por Referencia


Esta variable estatica se usa para saber cuantas veces se ejecuto tal funcion.
https://microchipdeveloper.com/8avr:ioports

Por variable o por referencia.


https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

5.5 Ámbito de Declaración de Variables. Visibilidad


5.6 Bibliotecas de Funciones
https://microchipdeveloper.com/8avr:ioports

TEMA 6: TIPOS DE DATOS ESTRUCTURADOS


6.1 Introducción. Datos estructurados frente a datos simples

Arrays o arreglos.

6.2 Declaración y usos de Arrays


https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

6.3 Punteros y Arrays


https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

Ejercicio:

#include <stdio.h>
#include <stdlib.h>

/*
*Definimos los tamaños de los vectores como constantes
*/

#define LEN1 5 //TAMAÑO VECTOR 1


#define LEN2 6 //TAMAÑO VECTOR 2
#define LEN3 (LEN1+LEN2 ) //TAMAÑO VECTOR 3

/*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);
https://microchipdeveloper.com/8avr:ioports

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:
https://microchipdeveloper.com/8avr:ioports

6.4 Cadenas de caracteres


Se recomienda aprender la librería string.h

Esta cadena de carácter contiene:

Carácter nulo al final, indica que allí acaba la cadena.


Presenta 6 elementos.
https://microchipdeveloper.com/8avr:ioports

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.
https://microchipdeveloper.com/8avr:ioports

Esta función, strlen() contenida en la


librería string.h, nos va a devolver
cuantos elementos tiene nuestra cadena.
Pero no tomará en cuenta el carácter
nulo.

NOTA
https://microchipdeveloper.com/8avr:ioports

atoi(tipo de dato cadena)


• Esta función sirve para convertir
una cadena a un entero.
• Pertenece a la librería stdlib.h

atof() : convierte de cadena a real.

Para que la conversión


sea correcta.’\0’ o ‘\n’.
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

6.5 Estructuras de datos definidas por el usuario (Registros)


https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

Ejemplo:

Cuando se pone typedef, ya no va ser necesario


poner struct al momento de declarar una variable.

El nombre de la estructura “persona” va al


final.

Entonces:
https://microchipdeveloper.com/8avr:ioports

Otra forma:
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

6.6 Arrays de estructuras


https://microchipdeveloper.com/8avr:ioports

6.7 Arrays y estructuras como parámetros de funciones


TEMA 7: MICROCONTROLADOR- MICROPROCESADOR
Minicomputadoras que resolverán algún problema.
Computadoras tienen microprocesador.
Microcontrolador para aplicaciones más específicas.

7.1 Microcontrolador vs Microprocesador

El microprocesador es solo
CPU.

Está diseñado para trabajar


sólo con sistemas operativos.
https://microchipdeveloper.com/8avr:ioports

Memoria de programa
o Memoria Flash

Algunos microcontroladores cuentan


con reloj interno. Pero no es
recomendable usarlos porque es un
reloj de RC (Resisitencia y
condensador), mientras aumenta su T,
disminuye la precisión.

7.2 Arquitectura del procesador

Esta arquitectura te indica


como está conectado el CPU
con las memorias
https://microchipdeveloper.com/8avr:ioports

Al ser en paralelo, el
procesador funciona mucho
más rápido.

7.3 Unidad de Procesador Central (CPU)

Instrucciones complejas.
Se usan en Windows.

Se usa mucho en los


diseños de
microcontroladores.

7.4 Memoria de Programa

Solo memoria de lectura

Se programa solo una vez.

Almacena algunos datos y estos no


se pierden cuando se quita la energía

Consume menor que la


EEPROM. Consume
menos energía
https://microchipdeveloper.com/8avr:ioports

7. 5 Memoria de datos

La memoria RAM mientras tenga


energía , va a poder trabajar,
almacenar y cuando se le quita la
energía, todo el contenido se va
a borrar.

7.6 Periféricos→ Lo añade el fabricante.

Para retrasos,generar ondas de salida,medir anchos de pulso

Va depender del micro.

ARDUINO UNO O ARDUINO NANO (RECOMENDABLE PARA EMPEZAR)


• S/. 20 o S./ 30
• No programarlo desde el software Arduino.

PIC 18F4550
• S./25
• Necesita de un reloj de cristal + condensadores S./2
• Necesita un Pickit3 S./100 o S./80
https://microchipdeveloper.com/8avr:ioports

dsPIC30F4013

Stm32f407

Tarjeta tm4c123gh6pm
• Más caro
• Micro de 32 bits

Launchxl-f28379d
• Micros industriales
https://microchipdeveloper.com/8avr:ioports

Para los AVR, es recomendable usar el entorno de programación


“Microchip Studio”. Está em base a Visual Studio de Microsoft.

El entorno de programación “IAR Embedded Workbench IDE” es


para programar micros de arquitectura ARM, pero tmbn se puede
programar PICs de 8 bits, 16 bits. (Es de paga)

• include
• define
• ifndef
• ifdef
• warning
• error
DIRECTIVAS DEL PREPROCESADOR
• if
• elif
• else
• #
• ##
https://microchipdeveloper.com/8avr:ioports

DIRECTIVAS DEL PREPROCESADOR

PASOS PARA AGREGAR CORRECTAMENTE UN FOLDER AL


PROGRAMA EN STM32CubeIDE(AGREGAR AL PATH)
https://microchipdeveloper.com/8avr:ioports
https://microchipdeveloper.com/8avr:ioports

Uso del #define, #ifdef, #undef, endif


Verifica si anteriormente se
ha definido.

Elimina la definición.

Define un nuevo valor.

Uso del warning, error

Para advertencias.
https://microchipdeveloper.com/8avr:ioports

• Si no está definido:

ASI SE ESCRIBE
• Si está definido: LIBRERÍAS MÁS
COMPACTAS.

Uso del if, elif, else (para verificar valores)


Primer caso

Cuando NUM1 es
30, se sombrea el
#if, #elif.

Segundo caso
https://microchipdeveloper.com/8avr:ioports

Cuando NUM1 es
10, se sombrea el
#if, #else.

Nota: se puede usar el #define como funciones genéricas


https://microchipdeveloper.com/8avr:ioports

Uso del ##

Esta forma de trabajar es


muy, muy útil; ya que sirve en
el momento de crear librerías
,como en el manejo de
pantallas en el momento de
definir pines

Si queremos usar 2 parámetros:

Sirve para definir registros en un microcontrolador.


Por ejemplo configurar las entradas y salidas.
https://microchipdeveloper.com/8avr:ioports

“a” es la variable que se va a reemplazar.


Ya sea por “A” o “B”. Según el ejemplo.
https://microchipdeveloper.com/8avr:ioports

Digamos que “a” tiene un valor de “0”.

Desplaza hacia la izquierda “<<” un 1 lógico


”1U(unsigne)”, en el bit n°2 “2”.
https://microchipdeveloper.com/8avr:ioports

Establecer:

Clear:

Complemento:

Negación bit a bit:


https://microchipdeveloper.com/8avr:ioports

REG: registro
Estas macros flexibilizan para poner 1 o 0
en los registros.
https://microchipdeveloper.com/8avr:ioports

Para microchip de 8 bits(ATmega328P)


Microchip studio y compilador xc8

ÚLTIMA CLASE (APLICATIVA)


➢ Entorno de desarrollo → MPLABX o Microchip Studio
➢ Compilador especializado que genere un ejecutable para el microco.→ compilador
XC8 (para micros de 8 bits)

Página web de mucha ayuda:


https://microchipdeveloper.com/8avr:ioports
P: Port o Puerto.
• PA
• PB
• PC
Configuraciones de
• PD Diodos de
entradas digitales:
protección
Pull-UP

Entrada del puerto Pull-DOWN

Capacitancia
parásita
https://microchipdeveloper.com/8avr:ioports

Configuración de los Pines I/O:


Cada puerto consta de tres registros:

• DDRx : registro de dirección de datos


• PORTx – Registro de salida de clavijas
• PINx : registro de entrada de PIN
https://microchipdeveloper.com/8avr:ioports

Configuración del atmega 328P en Proteus:

Al configurar cristal externo


https://microchipdeveloper.com/8avr:ioports

Esos dos puertos ya no se


usaran para I/O, sino para
colocar los condensadores
y el cristal de reloj.

Ejemplo
https://microchipdeveloper.com/8avr:ioports

Para crear librería.h en microchip studio


https://microchipdeveloper.com/8avr:ioports

Otra forma de programar el mismo funcionamiento:


header

“ \ ” : Indica que el código continua.

Main.c
https://microchipdeveloper.com/8avr:ioports

Para microchip (PIC)


MPLAB X y compilador xc8
Inicio de un nuevo proyecto:
https://microchipdeveloper.com/8avr:ioports

Este PIC es el que tiene más


libros, un poco más antigüito.

Esta opción es para como


subirlo, simulador o través de
un picki.
https://microchipdeveloper.com/8avr:ioports

Para configurar los bits, solo


se hace una vez.
https://microchipdeveloper.com/8avr:ioports

Se copia y se pega
en el entorno main.
https://microchipdeveloper.com/8avr:ioports

EJEMPLO:

También podría gustarte