Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

23/06/2012 #1


problema con el const en ccs
disculpen señores tengo un problema con el publik que estoy haciendo el primero es cuando el vector letra le pongo q lo guarde en la rom que es la directiva const ya no me funciana cuando quemo el pic pero cuando guardo el valor en la ram q es int letra si funciona me gustaria q hay q hacer para guardarlo en la rom y q funciones de antemno gracias al q me pueda colaborar este es el codigo
Código:
#include <16F628a.h>
#use delay(clock=16000000)
#fuses NOWDT,HS,PUT,NOPROTECT,NOBROWNOUT,NOMCLR,NOLVP,NOCPD
#byte porta = 5
#byte portb = 6

int rotar,seg,nn1,nn,cont;    // y para que tenga memoria de donde lleva la rotacion
int public,recorrido,trama,ancho; // nceros es 31  ntrama 1  nceros=8

int letra [50]={ // para el ejemplo era letra [4]
0b10011100,// 01 
0b00100000,
0b10100000,// 01 
0b00011000,
0b10000100,
0b01000100,
0b10000100,           
0b10111000,               //

0b00111000,                //8
0b01000100,
0b01000100,
0b01111100,
0b01000100,
0b01000100,
0b01000100,
0b01000100,
                          
0b01000100,                //16
0b01000100,
0b01000100,
0b01000100,
0b01000100,
0b01000100,
0b01000100,
0b01111100,    
                          
0b01000000,                 //24
0b01000000,
0b01000000,
0b01000000,
0b01000000,
0b01000000,
0b01000000,
0b01111000,

0b11000000,                //32
0b11000000,
0b00000000,
0b11000000,
0b11000000,
0b11000000,
0b11000000,
0b11000000,

0b00000000,                 //40
0b10001000,
0b11001000,
0b10101000,
0b10011000,
0b10001000,
0b10001000,
0b10001000

};                


void main() {
set_tris_a(0x00);
set_tris_b(0x00);
portb=0x00;


cont=0;
trama=0;
public=letra[nn];

while(true){
output_high(pin_a2);    //               * ---->resetea el  74ls164 poniendo todo en cero 
delay_us(2);            //               *                                    
output_low(pin_a2);     // 

public=letra[nn]; 
while(ancho<50){         // es 8 ancho
while(seg<20){            //seg=6
while(trama<8){          // ************ 
                         //            *
                         //            *
                         //            *
recorrido=0x80&public;   //            *         
if(recorrido==0x80){     //            *
output_high(pin_a0);
                         //            *
}                        //            *
else{                    //            *
output_low(pin_a0);      //            *
}
                        //*************    *
output_high(pin_a1);    //  reloj      *   *   
delay_us(2);            //             *   *
output_low(pin_a1);     //**************   *

if (trama<=0){
rotar=0x01;             //  desplazamiento para prender cada transistor
}
                        //               *

if(cont==ancho){        //               * el cont :me sirve para decir cuantos bit saco
if(cont>=8){            //               *
nn=nn1;                 //               *
}                       //               *
nn++;                   //               * de la fila por ej si en la primer pasada saco un bit 
trama++;                //               * en la segunda pasada saco 2 bit de la fila y haci....
portb=rotar;            //               *
delay_ms(1);          //               *
output_high(pin_a2);    //               * ---->resetea el  74ls164 poniendo todo en cero 
delay_us(2);          //               *                                    
output_low(pin_a2);     //               *
portb=0x00;             //               * 
cont=0;                 //               *
rotar=rotar<<1;         //               *
public=letra[nn];       //               *
}
else{
cont++;
public=public<<1;

switch(cont){

case 8:
nn1=nn;
nn=nn+8;
public=letra[nn];
break;  

case 16:
nn=nn+8;
public=letra[nn];
break;

case 24:
nn=nn+8;
public=letra[nn];
break;

case 32:
nn=nn+8;
public=letra[nn];
break;

case 40:
nn=nn+8;
public=letra[nn];
break;                   //                     *

}
}                 //                       *
}                // ************************  
cont=0;
nn=0;
trama=0;
seg++;
public=letra[0];
}
seg=0;
ancho++;
}  
ancho=0;
}  
}
24/06/2012 #2


no estoy muy seguro de haber entendido la consulta, pero para escribir en memoria ROM tienes 2 opciones, escribir en la Eprom del PIC, o en la memoria de código.
Para escribir en la Eprom es el comando write_program_eeprom (address, data)
y para escribir en memoria de programa es write_program_memory( address, data, count )
address es la direccion de la memoria en la que se va a escribir, es un numero de 16bits, data es el dato que se quiere escribir, y count es la cantidad de veces que se quiere escribir data.
Para escribir en la memoria de programa hay que tener en cuenta que esa memoria se maneja por words y no por bytes, por lo que el LSB de la dirección tiene que ser siempre 0
24/06/2012 #3


jorgelzd dijo: Ver Mensaje
no estoy muy seguro de haber entendido la consulta, pero para escribir en memoria ROM tienes 2 opciones, escribir en la Eprom del PIC, o en la memoria de código.
Para escribir en la Eprom es el comando write_program_eeprom (address, data)
y para escribir en memoria de programa es write_program_memory( address, data, count )
address es la direccion de la memoria en la que se va a escribir, es un numero de 16bits, data es el dato que se quiere escribir, y count es la cantidad de veces que se quiere escribir data.
Para escribir en la memoria de programa hay que tener en cuenta que esa memoria se maneja por words y no por bytes, por lo que el LSB de la dirección tiene que ser siempre 0
explicacion

gracias por tu aporte jorge pero mira la cuestion es asi yo los datos los puedo guardar en la ram o en rom del pic que es la memoria flash lo que me pasa es que tengo ese vector llamado letra el cual cuando lo guardo en la ram me funciona y correo el programa pero cuando lo guardo en la rom que es con la directiva const ya no me corre le programa o ya no me funciona
24/06/2012 #4


la declaración de "letra" y "public" deberían ser int8 en vez de int, porque los valores son de 8 bits y la declaración int es solo para 1 bit... ojalá eso ayude...
24/06/2012 #5


jorgelzd dijo: Ver Mensaje
la declaración de "letra" y "public" deberían ser int8 en vez de int, porque los valores son de 8 bits y la declaración int es solo para 1 bit... ojalá eso ayude...
jorge la cuestion ahi no creo q sea del int por que haci como lo tengo el programa corre pero cuando lo pongo a q el vector se guarde en la rom es cuando ya no funciona entonces la cuestion es q tengo q modificar o agregar al programa para poderlo guardar en la rom el vector y q funciones o dame un ejemplo como lo harias tu para guardar ese vector en la rom
24/06/2012 #6


intenta agragando esto:
#DEVICE CONST=ROM

parece que hay dos formas de utilizar CONST y hay que definir cual de las dos se quiere usar:

CONST=ROM Uses the CCS compiler traditional keyword CONST definition, making CONST variables located in program memory.

CONST=READ_ONLY Uses the ANSI keyword CONST definition, making CONST variables read only, rather than located in program memory.
25/06/2012 #7


jorgelzd dijo: Ver Mensaje
intenta agragando esto:
#DEVICE CONST=ROM

parece que hay dos formas de utilizar CONST y hay que definir cual de las dos se quiere usar:

CONST=ROM Uses the CCS compiler traditional keyword CONST definition, making CONST variables located in program memory.

CONST=READ_ONLY Uses the ANSI keyword CONST definition, making CONST variables read only, rather than located in program memory.
pregunta
jorge entonces segun lo q me dices como aplico a mi programa declaro el device bueno y lo otro que me dices como lo aplico? o cual de los 2 aplico y como?
25/06/2012 #8


nada mas declara después de lo fuses
#DEVICE CONST=ROM
25/06/2012 #9


jorgelzd dijo: Ver Mensaje
nada mas declara después de lo fuses
#DEVICE CONST=ROM
le agregue al programa lo q me dijiste pero como q no lee el dato o no almacenando por q cuando lo corro en proteus no muestra nada y cuando lo quemo y lo pruebo tampoco
aqui tengo el circuito en proteus si lo quiere simular y me diga q mas le puedo hacer para q almacene y lea el dato de la rom

publi1.rar
Código:
#include <16F628a.h>
#device CONST=ROM 
#use delay(clock=16000000)
#fuses NOWDT,HS,PUT,NOPROTECT,NOBROWNOUT,NOMCLR,NOLVP,NOCPD
#byte porta = 5
#byte portb = 6



int rotar,seg,nn1,nn,cont;    // y para que tenga memoria de donde lleva la rotacion
int public,recorrido,trama,ancho; // nceros es 31  ntrama 1  nceros=8

const int letra [80]={ // para el ejemplo era letra [4]
0b10011100,// 01 
0b00100000,
0b10100000,// 01 
0b00011000,
0b10000100,
0b01000100,
0b10000100,           
0b10111000,               //

0b00111000,                //8
0b01000100,
0b01000100,
0b01111100,
0b01000100,
0b01000100,
0b01000100,
0b01000100,
                          
0b01000100,                //16
0b01000100,
0b01000100,
0b01000100,
0b01000100,
0b01000100,
0b01000100,
0b01111100,    
                          
0b01000000,                 //24
0b01000000,
0b01000000,
0b01000000,
0b01000000,
0b01000000,
0b01000000,
0b01111000,

0b11000000,                //32
0b11000000,
0b00000000,
0b11000000,
0b11000000,
0b11000000,
0b11000000,
0b11000000,

0b00000000,                 //40 hasta aqui
0b10001000,
0b11001000,
0b10101000,
0b10011000,
0b10001000,
0b10001000,
0b10001000,


 
};
26/06/2012 #10


pues corrí el programa tu codigo y en la pantalla de LEDs me escribió "lSAULIN" ese es el resultado que esperabas??
si me sale un poco lento, pero en tiempo real creo que si se vería bien...
26/06/2012 #11


jorgelzd dijo: Ver Mensaje
pues corrí el programa tu codigo y en la pantalla de LEDs me escribió "lSAULIN" ese es el resultado que esperabas??
si me sale un poco lento, pero en tiempo real creo que si se vería bien...
creo jorge q si lo corriste fue con el primer programa q ti di y no el ultimo por q si te fijas bn el corre bn con le primer progrma pero en la ram y con el segundo grabado en la rom como tu me dijiste que compilado da un espacio almacenado de 22% en al rom no da
29/06/2012 #12


Buen día a todos! mmm......... ps podrias probar declararlo asi:
int8 const letra [80] = {
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.