Blog Archive
Con la tecnología de Blogger.
Programando al DSCs
Lenguaje de Programación
Un lenguaje de programación es una técnica estándar de comunicación basada en un conjunto de sintaxis y reglas semánticas 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 actúan y que acciones tomar bajo una variada gama de circunstancias, utilizando un lenguaje relativamente próximo al lenguaje humano.
Lenguaje Maquina:
Lenguaje Ensamblador:
Un lenguaje ensamblador puro es un lenguaje es un lenguaje en el que cada enunciado produce exactamente una instrucción 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 básicas, en base un numero limitado de palabras y construcciones, lo que le da mas precisión y claridad, evitando ambigüedades. (el lenguaje natural humano carece de precisión y es muy ambiguo).
Ejemplo de Testeo de Programación en Codigo Ensamblador
Ejemplos de Programacion de un dsPIC33FJ32MC204
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
}
Un lenguaje de programación es una técnica estándar de comunicación basada en un conjunto de sintaxis y reglas semánticas 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 actúan y que acciones tomar bajo una variada gama de circunstancias, utilizando un lenguaje relativamente próximo al lenguaje humano.
Lenguaje Maquina:
Operación expresada mediante la codificación 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 instrucción 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 básicas, en base un numero limitado de palabras y construcciones, lo que le da mas precisión y claridad, evitando ambigüedades. (el lenguaje natural humano carece de precisión y es muy ambiguo).
II.- PROGRAMACION EN LENGUAJE ENSAMBLADOR ------------------------
Ejemplo de Testeo de Programación en Codigo Ensamblador
Ejemplo1: dsPIC30f2010_led.s
/****************************************************************/
// Realizar un programa que enceder algunos pines del puerto E, del controlador
// Utilizando el cristal Interno
// 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
Estructura de Programacion de un Codigo C para Microcontroladores.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 -------------------------------------------------
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);
}
}
//#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
// 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....
Suscribirse a:
Entradas (Atom)