TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Enigma en 06 de Enero de 2008, 04:31:16
-
Muchachos una preguntica violenta!!!... Cuando uno corre un programa y lo mete en el micro, la cabecera, es decir, los #define, #bit, #byte se guardan en una dirección específica? es decir, así como el vector de interrupción o los registros que están en cierta dirección que es constante.... Los # también lo hacen?
por ejemplo, cuando uno dice #use delay(4000000) este siempre se guarad en una dirección fija de la memoria del pic???
Atte: Enigma... La llanerita de Guayana :D
-
No, llanerita, los comandos que empiezan por # son las directivas del compilador, y sirve para indicarle al mismo cómo debe compilar el programa, aunque luego no forman parte del mismo.
Por ejemplo, #use delay (4000000), sólo afecta a aquellas instrucciones en las que haya alguna actividad que dependa del tiempo (comunicaciones usart, delays,...) y por lo tanto, el compilador tiene que calcular cuántos ciclos de espera ha de incorporar a esas funciones en función del delay que hay establecido.
Aunque hay muchas directivas distintas; por ejemplo los #fuses sí que se almacenan en el HEX en un sitio determinado, pero creo que son la excepción a la regla.
-
Ahh o.k entiendo... es decir que esta ubicación no tiene que ser ajuro la misma???
Esta: (este es un programa)
(http://img225.imageshack.us/img225/9805/dibujowh1.jpg)
y esta: ( y este es otró diferente...)
(http://img115.imageshack.us/img115/8656/dibujo1bo9.jpg)
Y justamente este programa se me queda pegado aquí en el oscilador..... de este programa
Atte: Enigma... La llanerita de Guayana :?
-
Cuando ejecutas un programa paso a paso y se te queda atascado ahí, normalmente es porque está ejecutando un delay.
-
ummmm no creo!!!! que ejecute un delay :-/
porque el salta al output_d(0x00) y leugo salta a la linea del #use delay (4000000)
:?
Que strees!!! con las cosas nuevas!!!! :x
Atte: Enigma... La llanerita de Guayana :o
-
¿Me pasas el fichero C y el DSN para probar?
-
o.k...
Ojala no haya cometido una burrada! :oops:
Atte: Enigma... La llanerita de Guayana :D
-
Pues lo he probado y en mi caso sí que ejecuta el paso a paso sin problemas y sin pararse en ninguna parte.
Utilizo CCS 3.249 y Proteus 7.1 SP2.
-
me lleva el chanfle!!!!!! :(y porque conmigo se para en el delay!!! y te da la misma dirección y todo? se te va para la rutina del teclado??? ni un momento se te queda pegado en el delay??? que dirección te da? cuando esta el clock de 4'000000??
No creo que sea el proteus que tengo, porque el otro programa corre fino!
Atte: Enigma... la llanerita de Guayana :-)
-
Sí, el delay está en la misma dirección, pero no pasa por él.
Mira cómo lo compila CCS, yo no tengo ni idea de ASM, pero tú seguro que sabes interpretarlo:
.................... #use delay(clock=4000000)
0004: CLRF FEA
0006: MOVLW 10
0008: MOVWF FE9
000A: MOVF FEF,W
000C: BZ 002C
000E: MOVLW 01
0010: MOVWF 01
0012: CLRF 00
0014: DECFSZ 00,F
0016: BRA 0014
0018: DECFSZ 01,F
001A: BRA 0012
001C: MOVLW 4A
001E: MOVWF 00
0020: DECFSZ 00,F
0022: BRA 0020
0024: NOP
0026: NOP
0028: DECFSZ FEF,F
002A: BRA 000E
002C: RETLW 00
-
Yo no entender nada.... es decir, entiendo ese código, pero no se porque rayos a mi se me queda pegado!! Dios! :5]
Me lleva el chanfle, y me vuelve a llevar!!!!!!!! :?
Y todavia el muy co.......... isimo se queda allí, se enamoró del delay.... que strees!!!
Toy reportandome, a ver si encuentro la falla! :(
Atte: Enigma... La llanerita de Guayana :x
-
¿Estás usando el mismo CCS que yo?, otras versiones de CCS que he probado suelen dar problemas.
Hagamos una cosa, prueba cargando a tu simulador el fichero COF que te adjunto, a ver qué tal.
El DSN también lo he modificado, para que no llame al compilador cada vez que quiero simular.
-
Ya lo hice ya!!!! y que va, mira lo que hace:
Ejecuta, se va al tris d y luego vuelve aca:
(http://img87.imageshack.us/img87/5733/dibujo3cj6.jpg)
Despues de dejarlo un rato pegado en el delay, aparece esto:
(http://img87.imageshack.us/img87/3231/dibujo2ag4.jpg)
y luego se va al delay.... ese es el que me diste! :( .... Que castigo.... :cry: que cosa tan mala habré hecho para que no me den las cosas! por Dios me he portado bien!!! :8}
La versión del CCS que tengo es la 3.249 :? la misma que tu....
Atte: Enigma... La llanerita de Guayana :(
-
Pues sólo me queda pensar que pudiera tener la culpa el Proteus. Me equivoqué cuando te dije mi versión, en realidad es la 7.2 SP2.
-
Yo tengo la 7.2 SP0........ Dios!!!!! :8} :8} :8} :8} :8} :8} :8} :8} :8}
:cry: :cry: :cry: :cry: :cry: :cry: :cry:
Atte: Enigma... La llanerita de Guayana :(
-
Y No sera la version del CCS y junto con la del proteus la que esten haciendote sufrir enigma?
-
Será??? pero es que corri otro programa y me funciona fino... por eso no entiendo!!!!
Atte: Enigma... La llanerita de Guayana :-)
-
mmmm, yo creo que podria ser problema del proteus, alguna vez ya me paso lo que comenta enigma. enigma podrias subir el archivo cof que te genera el CCS?. porque el archivo que genero usando el CCS 4.033 y cargandolo al proteus que ya te comente no me dan ningun problema. eso si no relaciono el compilador con el proteus, cargo directamente el archivo .cof
Saludos
-
Hola, Sander, si como no, te subo el .cof, porque creeme que no he conseguido lograr que se me despegue del delay todavia, y eso que he hecho un poco de modificaciones!!!! :(
Atte: Enigma... La llanerita de Guayana :?
-
bueno pues con el archivo cof que me pasaste ni siquiera aparece el codigo, que version del CCS estas usando?
-
ummmm no creo!!!! que ejecute un delay :-/
porque el salta al output_d(0x00) y leugo salta a la linea del #use delay (4000000)
:?
Que strees!!! con las cosas nuevas!!!! :x
Atte: Enigma... La llanerita de Guayana :o
ciertamente se queda un rato en el delay (dependiendo de la potencia del ordenador) porque está ejecutando las instrucciones que corresponden a ese delay.
mi teoria es que el ccs compila los delay como una simple suma y resta de registros.
y si es cierto que el proteus hace unos saltos raros en las lineas escritas en c, nuevamente supongo que el simulador no se guia propiamente por las lineas en C sino por las sentencias en ensamblador, sino corran ese mismo código en el simulador en el mplab-sim y active el dissasembling list (ambos con la ventana del código en C) y verán que en C hace esos saltos bruscos mientras que en asm conserva su linealidad.
lo importante es mirar los SFR y los GPR y que hagan lo que deben hacer en su ranura de tiempo.
-
Hola... lo siento no pude conectarme ayer porque el ineternet estaba malo....
bueno pues con el archivo cof que me pasaste ni siquiera aparece el codigo, que version del CCS estas usando?
No se ve el código?? :? Allah!!! La versión del CCS que tengo es la 3.249 :lol:.... La tuve que cambiar a esa porque la más actual, pues no se me integra con el proteus!!! Más chiiiimbo!!! :(
ciertamente se queda un rato en el delay (dependiendo de la potencia del ordenador) porque está ejecutando las instrucciones que corresponden a ese delay.
Berro pero es extraño chamo porque, toda la simulación se la pasa pegado allí en esa instrucción.... Cuantos delays está ejecutando entonces...?, :?, además no se supone que este deberia ejecutar los delays cuando se les llame...? Porque si es así, pues no deberia quedarse pegado allí al inicio del programa, porque no hay rutinas de retardo...., la única manera en el programa de que se empiecen a generar lo retardos, es cuando yo aprete una tecla... Imaginate no apreto ninguna y se me queda pegado allí, cuando le doy correr paso a paso.... y le sigo dando, y siempre pegando allí... Ayer quise probar y me quede 15 min, dandole a ver si era el delay, y nada chamo, no se quitaba de esa instrucción..... :?
Atte: Enigma... La llanerita de Guayana :-)
-
Hola enigma. Corazón te cuento mi experiencia. como sabes tengo un circuito muy parecido al tuyo pero este es un reloj de 4 dígitos. el programa del micro esta hecho en pic Basic pro y este para hacer los delay utiliza una sentencia de "pause" que también me ha dado varios problemas en proteus ya que este no hace el tiempo en retardo tal y como se lo indiques en el programa.
yo haciendo mi reloj tube muchos problemas pense que era mi código y hice muchas revisiones lo ultimo que hice fue montar el circuito y tome el tiempo y sin duda ese programita tiene problemas con esto. no se como será el C pero apoyo mucho lo dicho por PALITROQUEZ.
-
Cuando una cosa no te funciona en PROTEUS y tú crees que está bien no hay más remedio que montar el circuito físicamente para salir de dudas.
Un saludo