Você está na página 1de 6

Programando al DSCs

Lenguaje de Programacin

Un lenguaje de programacin es una tcnica estndar de comunicacin


basada en un conjunto de sintaxis y reglas semnticas que definen los
programas del computador y as entregar instrucciones a este ultimo. Vale decir
tambien que dicho lenguaje le da la capacidad al programador de especificarle
al computador, qu tipo de datos actan y que acciones tomar bajo una variada
gama de circunstancias, utilizando un lenguaje relativamente prximo al
lenguaje humano.

Lenguaje Maquina:
Operacin expresada mediante la codificacin binaria de cadenas de 1's y 0's.

Lenguaje Ensamblador:
Un lenguaje ensamblador puro es un lenguaje es un lenguaje en el que cada
enunciado produce exactamente una instruccin de maquina. En otra palabras
existe una correspondencia uno a uno entre las instrucciones de maquina y los
enunciados del programa en ensamblador.

Lenguaje C:
es un lenguaje estructurado, es decir donde los programas son creados a partir
de estructuras de control bsicas, en base un numero limitado de palabras y
construcciones, lo que le da mas precisin y claridad, evitando ambigedades.
(el lenguaje natural humano carece de precisin y es muy ambiguo).

II.- PROGRAMACION EN LENGUAJE ENSAMBLADOR ------------------------

Ejemplo de Testeo de Programacin en Codigo Ensamblador

Ejemplo1: dsPIC30f2010_led.s
/****************************************************************/
// Realizar un programa que enceder algunos pines del puerto E, del controlador
// Utilizando el cristal Interno
/****************************************************************/

.equ __30F2010, 1
.include "p30f2010.inc"

config __FOSC, FRC ;Trabajar con el Osc Interno


config __FWDT, WDT_OFF ;Deshabilitar el Perro guardian
config __FBORPOR, MCLR_EN

.equ Fcy, #7370000 ;Frecuencia del Osc.Interno


.equiv LEDS, 0x0033 ;Pines del puerto por prender
.global __reset ;Etiqueta para la primera linea de codigo

.text ;Inicio del codigo .asm


__reset: ;Etiqueta que indica Comienso de codigo

;Conficuarcion de Pines
mov #0x00,w0 ;Port E all
mov w0,TRISE ;como salida Digital
mov #LEDS,w0 ;Initialize LED pin data to off state
mov w0,LATE

buclePrincipal:
nop
bra buclePrincipal ;Retorno al Bucle
.end

III.- PROGRAMACION EN LENGUAJE C -------------------------------------------------

Estructura de Programacion de un Codigo C para


Microcontroladores

Ejemplos de Programacion de un dsPIC33FJ32MC204

Ejemplo1: flashingALLpins.c
/****************************************************************/
// Realizar un programa que haga parpadear a absolutamente todos los pines
// I/O del DSCs cada 2 segundos.
/****************************************************************/

#include "D:\Archivos de programa\PICC\Devices\33fj32mc204.h"


//#include "dspic_lib\33fj32mc204.h"
#use delay(clock=7370000)
#fuses FRC,OSCIO
/* Direcciones */
////////////////////////
#BYTE porta=0X02c2
#BYTE portb=0X02ca
#BYTE portc=0X02d2
#BYTE trisa=0X02c0
#BYTE trisb=0X02c8
#BYTE trisc=0X02d0
////////////////////////
void main(void)
{
SETUP_ADC_PORTS(NO_ANALOGS);
trisa=0x0000;
trisb=0x0000;
trisc=0x0000;
while (TRUE)
{
porta=0xffff;
portb=0xffff;
portc=0xffff;
delay_ms(1000);
porta=0x0000;
portb=0x0000;
portc=0x0000;
delay_ms(1000);
}
}

OBS:
Como pueden observar en la imagen no todos los pines del controlador se
activan, esto es debido a una mal direccionamiento del compilador PICC. Para
solucionar el presente incombeniente se procede al desarrollo de unas
funciones de direcionamiento en lenguaje de bajo nivel, es decir un
lenguanje asm yaque estos estan directamente ligado con los registros de
direccionamiento. El compilador PICC tiene una directiva #asm y #endasm
que permiten incluir codigo .asm dentro del .c. Acontinuacion se definiran las
siguientes funciones de direcionamiento de los registros que definen los I/O del
controlador.

FUNCIONES DE DIRECCIONAMIENTO :

//// 1.-FUNCIONES PARA CONFIGURACION DE PUERTOS ////


//// A) w_trisx( int16 ) escribe un valor en el registro trisX ////
//// B) w_portx( int16 ) escribe un valor en el registro portX ////
Finalmente la solucion del ejemplo Seria:

#include "D:\Archivos de programa\PICC\Devices\33fj32mc204.h"


//#include "dspic_lib\33fj32mc204.h"
//#include "dspic_lib\libreria_cas_dspic.c"
#use delay(clock=7370000)
#fuses FRC,OSCIO

#BYTE porta=0X02c2
#BYTE portb=0X02ca
#BYTE portc=0X02d2
#BYTE trisa=0X02c0
#BYTE trisb=0X02c8
#BYTE trisc=0X02d0

void w_trisa(int16 data);void w_porta(int16 data);


void w_trisb(int16 data);void w_portb(int16 data);
void w_trisc(int16 data);void w_portc(int16 data);

void main(void)
{
SETUP_ADC_PORTS(NO_ANALOGS);
w_trisa(0x0000);w_trisb(0x0000);w_trisc(0x0000);
while (TRUE)
{
w_porta(0xffff);
w_portb(0xffff);
w_portc(0xffff);
delay_ms(1000);
w_porta(0x0000);
w_portb(0x0000);
w_portc(0x0000);
delay_ms(1000);
}
}

//1.-FUNCIONES PARA CONFIGURACION DE PUERTOS


//////////////////////////////////////////////

void w_trisa(int16 data)


{
#asm
mov data,W0
ior TRISA //or entre f y wreg,guarda el resultado en wreg
mov TRISA //mov 0x02c8
#endasm
}
void w_porta(int16 data)
{
#asm
mov data,W0
ior PORTA //or entre f y wreg,guarda el resultado en wreg
mov PORTA //mov 0x02ca
#endasm
}
void w_trisb(int16 data)
{
#asm
mov data,W0
ior TRISB //or entre f y wreg,guarda el resultado en wreg
mov TRISB //mov 0x02c8
#endasm
}
void w_portb(int16 data)
{
#asm
mov data,W0
ior PORTB //or entre f y wreg,guarda el resultado en wreg
mov PORTB //mov 0x02ca
#endasm
}
void w_trisc(int16 data)
{
#asm
mov data,W0
ior TRISC //or entre f y wreg,guarda el resultado en wreg
mov TRISC //mov 0x02c8
#endasm
}
void w_portc(int16 data)
{
#asm
mov data,W0
ior PORTC //or entre f y wreg,guarda el resultado en wreg
mov PORTC //mov 0x02ca
#endasm
}

Ejemplo2: Contador.c

/****************************************************************/
// Desarrollar un porgrama que atraves de dos pulsadores se incremente
// y decremente una cuenta mostarada en el display de siete segmentos
/****************************************************************/
Antes de empesar a programar, se entiende que en el presente ejemplo no
solo involucra activar al pin del controlador como salida digital sino tambien
como entrada digital....