Práctica 8 Lab. Micros
Práctica 8 Lab. Micros
Práctica 8 Lab. Micros
Microprocesadores
División: Ingeniería Departamento: Ingeniería Electrónica
Eléctrica
1. Seguridad en la Ejecución
2. Objetivos de aprendizaje.
El alumno programará los Puertos de Entrada/Salida del procesador ARM M4 en lenguaje C, para
emplearlos como puertos digitales de Propósito General, e implementará la conexión de hardware
externo al microcontrolador tomando en cuenta los parámetros eléctricos nominales de las
terminales.
Material y equipo.
3. Actividad de investigación.
La directiva #define especifica un nombre que será reemplazado por un cierto valor en todos los
lugares del programa donde se haga referencia. Se crean fuera de cualquier función o clase
normalmente en la parte inicial del archivo.
b. ¿Qué es una variable global y una local?
Variable global: Son todas las funciones que componen el programa, cualquier función puede
acceder a dichas variables para leer y escribir en ella. Es decir, se puede hacer referencia a su
dirección de memoria en cualquier parte del programa.
Variable local: Sólo pueden accederse desde la función o bloque de instrucciones en donde se
declaran. Las variables locales se contraponen a las variables globales.
Se coloca la directiva #define seguido de la dirección del registro que se quiere utilizar,
por ejemplo: #define SYSCTL_PRGPIO_R
La memoria direccionable como bit y como byte está formada por las 16 posiciones de
RAM interna. Es importante tener en cuenta que la Memoria Bit es realmente parte de la
RAM Interna. Las 128 variables bit ocupan los 16 bytes de RAM Interna.
main.c
#define GPIO_PORTF_DATA_BITS_R 0x4005D000
#define GPIO_PORTF_DIR_R (*(volatile unsigned int *)0x4005D400)
#define GPIO_PORTF_DEN_R (*(volatile unsigned int *)0x4005D51C)
#define SYSCTL_RCGCGPIO_R (*(volatile unsigned int *)0x400FE608)
#define SYSCTL_PRGPIO_R (*(volatile unsigned int *)0x400FEA08)
#define PORTbit4 0x40
#define PORTbit0 0x04
#define PORTFbits (GPIO_PORTF_DATA_BITS_R|PORTbit4|PORTbit0)
#define PF40 (*(volatile unsigned int *)PORTFbits) //#define PF21 (*
(volatile uint32)0x4005D044)
int tiempo;
void main(void){
// Habilita reloj en Puerto F
SYSCTL_RCGCGPIO_R |= 0x20 ;
// Espera a que esté listo el puerto
while((SYSCTL_PRGPIO_R & 0x20)==0);
// Bits 4 y 1 del PTO F como salidas, los demas bits entradas
GPIO_PORTF_DIR_R |= 0x12;
// Habilita el modo Digital de los pines 4 y 1
GPIO_PORTF_DEN_R |= 0x12 ;
// valor inicial de los pines (hay Leds conectados en la
tarjeta)
PF40 = 0x01; // PF4 = 0, PF0 = 1
while(1) {
PF40 ^= 0x10; // cambia el estado lógico de
los pines 4 y 1
tiempo 1325;
}
}
main2.c
#define GPIO_PORTF_DATA_BITS_R 0x4005D000
#define GPIO_PORTF_DIR_R (*(volatile unsigned int *)0x4005D400)
#define GPIO_PORTF_DEN_R (*(volatile unsigned int *)0x4005D51C)
#define SYSCTL_RCGCGPIO_R (*(volatile unsigned int *)0x400FE608)
#define SYSCTL_PRGPIO_R (*(volatile unsigned int *)0x400FEA08)
#define PORTbit4 0x40
#define PORTbit0 0x04
#define PORTFbits (GPIO_PORTF_DATA_BITS_R|PORTbit4|PORTbit0)
#define PF40 (*(volatile unsigned int *)PORTFbits) //#define PF21 (*(volatile
uint32)0x4005D044)
void main(void){
// Habilita reloj en Puerto F y J
SYSCTL_RCGCGPIO_R |= 0x220 ;
while(1){
if(!PJ0) {
//while (!PJ0);
PF40 ^= 0x10 ; // cambiar el estado lógico de los pines 4 y 1
}
}
#include “tm4c1294ncpdt.h”
#include <stdint.h>
int tiempo;
6. Desarrollo.
Implemente una rutina de inicialización para las terminales PH0 y PH1 como de salida digital y
las terminales PK5 y PK7 como de entrada digital. Identifique las terminales. Conecte en las
terminales de salida un Led en cada una empleando una resistencia limitadora de corriente. Su
activación se hará con lógica positiva. Conecte en las terminales de entrada un Switch en cada
una alambrados con lógica positiva.
Implemente un ciclo continuo para leer el estado de los switches y reflejarlo en los Leds de
acuerdo a la siguiente tabla:
Determine si es necesario configurar el registro de resistencias de Pull-up o Pull-down. Declare
en el archivo fuente, los nombres de los registros empleados y sus direcciones empleando la
directiva #define. Consulte el archivo tm4c1294ncpdt.h
Código
7. Cuestionario.
Sea el registro GPIO_PORTA_DATA_R un registro definido en lenguaje C conteniendo el dato
0x92. ¿qué operación realiza las siguientes sentencias en lenguaje C? Especifique el resultado en
formato binario y hexadecimal.
Explique qué función realiza cada sentencia según la “máscara” (valor del lado derecho del
signo “igual”).
GPIO_PORTA_DATA_R ^= 0x01
LDR R1,=GPIO_PORTA_DATA_R
LDR R0, [R1]; anterior
EOR R0; R0, #0x01 ; establecer el bit 1
Resultado: Hex = 0x93; Bin = 10010011
8. Conclusiones.
Para esta práctica se programaron los Puertos de Entrada/Salida K y J del procesador ARM M4
en lenguaje C, para emplearlos como puertos digitales de Propósito General, de esta forma se dan
por cumplidos los objetivos de la práctica.
9. Bibliografía.
ARM Assembly Language Tools v15.12.0.LTS - User's Guide. Literature Number: SPNU118O
January 2016. Disponible en
http://downloads.ti.com/docs/esd/SPNU118/index.html