Sunteți pe pagina 1din 7

UNIVERSIDAD NACIONAL DE INGENIERÍA

LABORATORIA N°1
SISTEMAS DIGITALES
BASADOS EN
MICROPROCESADORES

APELLIDOS Y NOMBRES:
GARCIA TORRES JOSE LUIS
CODIGO UNI:
20134528D
CURSO:
SISTEMAS DIGITALES BASADOS EN
MICROPROCESADORES
FECHA:
6/10/2017

2017 -2
LABORATORIO No. 1 - SISTEMAS DIGITALES
BASADOS EN MICROPROCESADORES
MANEJO DE PUERTOS I/O, FUNCIONES Y PROCEDIMIENTOS
GARCIA TORRES, JOSE LUIS CODIGO: 20134528D

I. OBJETIVO

El alumno pueda ganar habilidad en la programación en lenguaje C para los


microcontroladores PIC de MICROCHIP, utilizando el entorno del MPLABX, con el uso
del compilador XC-16

II. INTRODUCCIÓN:

1. Este laboratorio provee una introducción a la programación del lenguaje C Para


microcontroladores PIC en el estándar ANSI C.
2. El manejo de puertos de un microcontrolador como el PIC24FJ128GA010 permitirá al
alumno en poder desenvolverse en el desarrollo del problema en software usando el
MPLAB X con el compilador XC-16 y su verificación en Hardware usando la Tarjeta de
Desarrollo explorer16.
Nota:
El programa se debe implementar con:
Conocimiento de tipos y declaración de variables, constantes.
Conocimiento de operadores aritméticos y lógicos. Declaración y tipos de Funciones.

III. PROCEDIMIENTO:

1. Haciendo el uso de arrays y lazos (bucles), diseñar y simular un programa para el


PIC24FJ128GA010, que pueda hacer la secuencia de la figura mostrada, y que se
muestre por los 8 leds menos significativos del Puerto A (RA7-RA0). La frecuencia de
intervalo entre dato y dato debe ser de 200ms. El microcontrolador tiene un cristal
externo de 8MHz y la configuración del PLL (Phase-Locked Loop).
2. Implementar el diseño en el explorer-16.
3. Se evaluará el código del programa autodocumentado.

I. DESARROLLO:

DIAGRAMA DE FLUJO
INICIO

CONFIGURACIÓN DE RETARDOS
DEFINICIONES (LEDS =RA)

RA <= OUTPUT

RA <= 0X00

CADENA SECUENCIAL

C[j] = = {7, 6, 4, 3, 2, 1, 1, 2, 3, 4, 6, 7}

DECLARACIÓN DE VARIABLES E
INICIALIZACIÓN j=0; k=1

II
i= 0

LEDS = K
i++

DELAY (200 ms)

K DESPLAZADO UN BIT A LA
IZQUIERDA

i < c [j]

J > 11

j++ j=0

I
I

i= 0

LEDS = K
i++

DELAY (200 ms)

K DESPLAZADO UN BIT A LA
IZQUIERDA

i < c [j]

J > 11

j++ j=0

II
PROGRAMA EN MPLAB X IDE v4.00

/* LABORATORIO 1
* CURSO: SISTEMAS DIGITALES CON MICROPROCESADORES
* File: labo1.c
* Author: JOSE LUIS GARCIA TORRES
*CODIGO: 20134528D
* Created on 6 de octubre de 2017, 11:04 AM
*/

// CONFIG2
#pragma config POSCMOD = XT // Primary Oscillator Select (XT Oscillator mode
selected)
#pragma config OSCIOFNC = OFF // Primary Oscillator Output Function (OSC2/CLKO/RC15
functions as CLKO (FOSC/2))
#pragma config FCKSM = CSDCMD // Clock Switching and Monitor (Clock switching and
Fail-Safe Clock Monitor are disabled)
#pragma config FNOSC = FRCDIV // Oscillator Select (Fast RC Oscillator with Postscaler
(FRCDIV))
#pragma config IESO = ON // Internal External Switch Over Mode (IESO mode (Two-
Speed Start-up) enabled)

// CONFIG1
#pragma config WDTPS = PS32768 // Watchdog Timer Postscaler (1:32,768)
#pragma config FWPSA = PR128 // WDT Prescaler (Prescaler ratio of 1:128)
#pragma config WINDIS = ON // Watchdog Timer Window (Standard Watchdog Timer
enabled,(Windowed-mode is disabled))
#pragma config FWDTEN = ON // Watchdog Timer Enable (Watchdog Timer is enabled)
#pragma config ICS = PGx2 // Comm Channel Select (Emulator/debugger uses
EMUC2/EMUD2)
#pragma config GWRP = OFF // General Code Segment Write Protect (Writes to
program memory are allowed)
#pragma config GCP = OFF // General Code Segment Code Protect (Code protection is
disabled)
#pragma config JTAGEN = ON // JTAG Port Enable (JTAG port is enabled)

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <libpic30.h>
#define LEDS LATA
#define IC_DELAY 1600000 //200 milisegundos

unsigned char i;
unsigned char j=0;
unsigned char k=128;
unsigned char c[12]={7, 6, 4, 3, 2, 1, 1, 2, 3, 4, 6, 7};

void desplazamientoDerecha ();


void desplazamientoIzquierda ();
int main(void) {
TRISA=0X00;
LATA=0X00;
while(1){
desplazamientoDerecha();
j++;
if (j>11)
j=0;
desplazamientoIzquierda();
j++;
if (j>11)
j=0;
}

return (EXIT_SUCCESS);
}

void desplazamientoDerecha (){


for(i=0;i<c[j];i++){
LEDS=k; //CARGA EL PUERTO
k>>=1; //DESPLAZA EL LED QUE SE PRENDE HACIA LA DERECHA
__delay32(IC_DELAY);
}
}

void desplazamientoIzquierda (){


for(i=0;i<c[j];i++){
LEDS=k; //CARGA EL PUERTO
k<<=1; //DESPLAZA EL LED QUE SE PRENDE HACIA LA IZQUIERDA
__delay32(IC_DELAY);
}
}
SIMULACIÓN EN PROTEUS

S-ar putea să vă placă și