• Jueves 28 de Marzo de 2024, 22:20

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - xernovil

Páginas: [1] 2
1
Microcontroladores / Sleep Con El 16f84a
« en: Miércoles 6 de Junio de 2007, 17:36 »
Alguien sabe por qué cuando intento programar la función sleep en el pic 16f84a me da error de verificación todo el rato con el ic-prog?

Expongo otro problema, a ver si alguien me puede ayudar, al no poder utilizar el sleep se me complica todo un poco:

tengo un mando de 3x4 botones, que estoy implementando con otro pic, pero para hacer pruebas tengo este otro, el 16f84a, y necesito que al pulsar la tecla de prog (la tecla 12) entre en un estado de programación, pues bien, esto ya lo tengo hecho, no tiene mucho misterio.

Pero al entrar en el estado de programación hago variar una variable para que en la siguiente interrupción vaya directamente al modo programación y guarde el valor de la tecla pulsada en una variable address, que será la que después utilice para guardar el código de 3 dígitos que hay que meter a continuación, y aquí tengo el problema.

Para guardar el primer valor, que serían las centenas, tengo que filtrar la pulsación para que las teclas posibles sólo sean la 0, 1 y 2, para así no pasarme de 255 que será el valor máximo que puedo grabar en la posición de la eeprom. Después hago lo mismo con la segunda tecla, en la que si la primera tecla ha sido un 2, no debe pasar de 5 este nuevo valor (decenas) y así respectivamente. Esto es la idea de lo que quiero conseguir, y no creo que esté mal, pero no me sale una buena implementación, ya que cuando lo hago me falla constantemente. Yo creo que es por que no puedo programar el pic si utilizo la función sleep.


Alguien me puede ayudar por favor???

PD: Estoy viendo que es algo liosa la explicación, si tenéis alguna duda decídmelo y os la aclaro. Gracias anticipadas.

2
ASM (Ensamblador) / Re: Tablero 4x4 Letras Desordenadas
« en: Viernes 11 de Mayo de 2007, 11:57 »
ok, borra este post y ya haré lo que pueda, sino haré alguna consulta cuando la necesite, lo puse por que realmente voy mal de tiempo y quizás alguien ha hecho un programa similar alguna vez y tiene la idea clara.
Gracias de todas formas.

3
ASM (Ensamblador) / Tablero 4x4 Letras Desordenadas
« en: Viernes 11 de Mayo de 2007, 10:44 »
Hola! necesito ayuda, tengo varios programas que hacer y no me va a dar tiempo de acabarlos a tiempo, este creo que es el más sencillo, almenos desde mi punto de vista, pero necesitaría bastante rato para solucionarlo y tengo otros mucho mas complicados. A ver si me podéis echar una mano...

El enunciado está en catalán, pero creo que se entiende bastante bien.

Resumiendo lo que tengo que hacer es lo siguiente (el código es para Intel x86):

Tengo un tablero de 4 x 4, con letras en mayúsculas desordenadas, y una de las 16 posiciones es un espacio en blanco, para hacer correr las letras a través de ese espacio y ordenarlo alfabéticamente. Hay un número limitado de movimientos, y también tiempo limitado. El cursor de selección de letra no debe salir de lo que es la matriz, la letra debe desplazarse pulsando la tecla espacio a la posición que haya vacía y pulsando la tecla "q" debemos salir del programa.

Al pulsar la tecla espacio no se debe mover la ficha a no ser que el espacio vacío esté a su lado (arriba, abajo, izquierda, derecha), al mover la letra debe decrementarse en 1 el número de movimientos posible.

Si el tablero inicial contiene más de una o ninguna posicion vacía no se empezará a "jugar" y se indicará que hay demasiadas o ninguna casilla vacía y entonces acabará el programa, esta verificación se hará una sola vez al empezar el programa.

Si el número de movimientos se ha acabado se indicará que se ha perdido el juego y se acabará, del mismo modo, si las letras están ordenadas de la manera correcta, se indicará que has ganado y se acabará.

Código: Text
  1.  
  2. ;AETC Pràctica: Quinze-Puzle
  3. ;Cognoms i Nom:
  4. ;
  5. ;Lliurar el fitxer amb el nom: cognom1_cognom2_nom.asm
  6. ;Data de lliurament: ----------
  7.  
  8. .model small
  9. .stack 1024
  10.  
  11. DOSSERVICE  EQU 21H &#59; serveis DOS
  12. BIOSSERVICE EQU 10H &#59; serveis BIOS
  13. TicksSegon  EQU 18  &#59; Ticks per segon
  14. VECT_R      EQU 08h &#59; vector de rellotge
  15.  
  16. .data
  17.  Tauler db 'Tauler de Joc'&#59;Tauler de joc que es mostra a l'inici del programa
  18.         db '   0 1 2 3   '
  19.         db '  ÚÄÂÄÂÄÂÄ¿  '
  20.         db ' 0³ ³ ³ ³ ³  '
  21.         db '  ÃÄÅÄÅÄÅÄ´  '
  22.         db ' 1³ ³ ³ ³ ³  '
  23.         db '  ÃÄÅÄÅÄÅÄ´  '
  24.         db ' 2³ ³ ³ ³ ³  '
  25.         db '  ÃÄÅÄÅÄÅÄ´  '
  26.         db ' 3³ ³ ³ ³ ³  '
  27.         db '  ÀÄÁÄÁÄÁÄÙ  '
  28.         db '00  Moviments'
  29.         db '00  Segons   '  
  30.  
  31.  &#59;Quan lliureu la pràctica deixeu la matriu inicialitzada amb aquests valors.
  32.   Fitxa  db 'ABCD'&#59;Matriu 4x4 on tenim les fitxes
  33.      db 'FGHI'
  34.      db 'JK Z'
  35.          db 'OPNM'
  36.  
  37.  
  38.  
  39.   Estat  db 1    &#59; 0: Hem pitjat la tecla 'q' per sortir, sortir del programa.
  40.                  &#59; 1: Continuem jugant.
  41.                  &#59; 2: Guanyat, Totes les lletres estan ordenades, indicar-ho i acabar.
  42.      &#59; 3: Temps exhaurit, indicar-ho i acabar.
  43.                  &#59; 4: Nombre de moviments exhaurits, indicar-ho i acabar
  44.            &#59; 5: Masses caselles en blanc, indicar-ho i acabar.
  45.  
  46.  &#59;FilCur i ColCur indicaran la posició del cursor en tot moment.
  47.   FilCur   db ?  &#59; '0': Fila 0, '3': Fila 3
  48.   ColCur   db ?  &#59; '0': Columna 0, '3': Columna 3
  49.  
  50.   Moviments db 99&#59; Moviments que podem realitzar.
  51.    
  52.   Ticks     db 0 &#59;variable que indica els Ticks de rellotge transcorreguts
  53.   Segons    dw 0 &#59;variable per comptar els segons    
  54.  
  55.   RAI_R_Seg dw ? &#59; adreça de segment de la RAI de rellotge original
  56.   RAI_R_Dir dw ? &#59; desplaçament dins del segment de la RAI de rellotge original
  57.  
  58.  
  59.   MsgPerdut5 db  'Tauler incorrecte, masses caselles en blanc.','$'
  60.   MsgPerdut4 db  'Has perdut! Moviments exhaurits','$'
  61.   MsgPerdut3 db  'Has perdut! Temps exhaurit     ','$'
  62.   MsgGuanya  db  'Ho has aconseguit, tot ordenat!','$'
  63.   MsgSortir  db  'Has premut (q) per sortir      ','$'
  64.  
  65.  
  66. .code
  67.  
  68. ;*******************************************************************************
  69. ; Esborra la pantalla completament escrivint espais en blanc
  70. ; Paràmetres d'entrada: Cap
  71. ; Paràmetres de sortida: Cap
  72. ;*******************************************************************************
  73. EsborraPantalla:
  74.  
  75.   push AX
  76.   push BX
  77.   push CX
  78.   push DX
  79.  
  80.  &#59;Inicialització per posicionar el cursor
  81.   mov bh,00h       &#59;pagina  
  82.   mov dh,00h       &#59;fila inicial
  83.   mov dl,00h       &#59;columna inicial
  84.   mov ah,02h       &#59;servei per posicionar el cursor
  85.   int BIOSSERVICE
  86.  
  87.   mov bh,00h       &#59;pagina
  88.   mov bl,07h       &#59;atribut
  89.   mov cx,2000      &#59;80*25nombre de caracters a escriure
  90.   mov al,' '       &#59;caracter
  91.   mov ah,09h       &#59;servei per escriure caracter.
  92.   int BIOSSERVICE
  93.  
  94.   pop DX
  95.   pop CX
  96.   pop BX
  97.   pop AX
  98.  
  99. Ret
  100.  
  101. ;*******************************************************************************
  102. ; Mostra el Tauler de joc sense Dades, és a dir, mostra la matriu Tauler
  103. ;
  104. ; Paràmetres d'entrada: Cap
  105. ; Paràmetres de sortida: Cap
  106. ;*******************************************************************************
  107. MostraTauler:
  108.  
  109.   push AX
  110.   push BX
  111.   push CX
  112.   push DX
  113.   push SI
  114.  
  115.  &#59;Inicialitzar registres
  116.   mov bh,00h       &#59;pagina  
  117.   mov dh,06        &#59;fila inicial
  118.   mov dl,33        &#59;columna inicial
  119.  
  120.   mov bl,07h       &#59;atribut
  121.   mov cx,1         &#59;escriurem 1 caracters cada cop
  122.  
  123.   mov si,0         &#59;index per accedir al tauler
  124.  
  125. bucleMT:
  126.   mov ah,02h       &#59;servei per posicionar el cursor
  127.   int BIOSSERVICE
  128.  
  129.   mov al,Tauler[SI]&#59;caracter
  130.  
  131.   mov ah,09h       &#59;servei per escriure caracter.
  132.   int BIOSSERVICE
  133.  
  134.   inc si           &#59;incrementem l'índex per accedir a les dades
  135.        &#59;Actualitzem posició del cursor (fila i columna)
  136.   inc dl           &#59;columna
  137.   cmp dl, 46       &#59;Quan arribem a la columna 46 ens posem a l'inici
  138.   jl bucleMT     &#59;de la següent fila.
  139.   mov dl, 33
  140.   inc dh           &#59;fila
  141.   cmp dh, 19     &#59;Quan arribem a la fila 19 vol dir que hem acabat
  142.   jl bucleMT     &#59;de dibuixar el tauler.
  143.  
  144.   pop SI
  145.   pop DX
  146.   pop CX
  147.   pop BX
  148.   pop AX
  149.  
  150.   ret
  151.  
  152. ;*******************************************************************************
  153. ; Buscar posició Inicial per començar a jugar.
  154. ; Buscar on hi ha l'espai en blanc i verifica que només hi hagi un espai en
  155. ; blanc a la matriu Fitxa. Si només hi ha un espai en blac posiciona el cursor
  156. ; en aquella casella. Si hi ha més d'un o cap espai en blanc posem Estat=5 per acabar.
  157. ; Paràmetres d'entrada: Cap
  158. ; Paràmetres de sortida: Cap
  159. ;*******************************************************************************
  160. PosIni:
  161.  
  162.  
  163.   ret
  164.  
  165. ;*******************************************************************************
  166. ; Actualitza el contingut del Tauler de Joc amb les dades de la matriu Fitxa
  167. ; i mostra els moviments que podem realitzar a pantalla cridant a la subrutina
  168. ; MostraDigits. El cursor ha de quedar en el mateix lloc que estava.
  169. ; Paràmetres d'entrada: Cap
  170. ; Paràmetres de sortida: Cap
  171. ;*******************************************************************************
  172.  
  173. ActualitzaTauler:
  174.  
  175.  
  176.   ret
  177.  
  178. ;*******************************************************************************
  179. ; Converteix un valor decimal (entre 0 i 99) en dos caràcters ASCII.
  180. ; S’ha de dividir el valor entre 10, el quocient representarà les desenes i
  181. ; el residu les unitats, després s’han de convertir a ASCII.
  182. ; Mostra els 2 digits ASCII a la posició de pantalla indicada a través de la pila.
  183. ; El valor i la posició es passen per la pila.
  184. ; Paràmetres d'entrada: valor [bp+6] i posició (fila,columna) [bp+4]
  185. ; Paràmetres de sortida: cap
  186. ;*******************************************************************************
  187.  
  188. MostraDigits:
  189.  
  190.  
  191.   ret
  192.  
  193. ;*******************************************************************************
  194. ; Llegim una tecla utilitzant el servei 08h de les crides al DOS.
  195. ; Segons la tecla llegida cridarem al procediment corresponent.
  196. ;    [‘i’,’j’,’k’ o ’l’] cridar al procediment MouCursor
  197. ;    ‘<espai>’ cridar al procediment MouFitxa
  198. ;    ‘q’ posa Estat=0.
  199. ; (per la lectura de teclar utilitzar només crides als serceis del DOS).
  200. ; Paràmetres d'entrada: Cap
  201. ; Paràmetres de sortida: Cap
  202. ;*******************************************************************************
  203. LlegirTecla:
  204.  
  205.  
  206.   ret
  207.  
  208. ;*******************************************************************************
  209. ; Mou el cursor segons la direcció indicada per AL i actualitza FilCur i ColCur
  210. ; segons la direcció que s’haig seleccionat
  211. ; Paràmetres d'entrada: AL indica la direcció del moviment ('i', 'j', 'k' o 'l')
  212. ; Paràmetres de sortida: Cap
  213. ;*******************************************************************************
  214. MouCursor:
  215.  
  216.  
  217.   ret
  218.  
  219. ;*******************************************************************************
  220. ; Mira si hi ha una casella buida al costat (dalt, baix, esquerra o dreta) de
  221. ; la casella actual del cursor, si és així fem el moviment de la fitxa i
  222. ; decrementa en un el número de moviments, si estem a la casella buida o si
  223. ; la casella buida no està al costat de la casella on estem, no moure cap fitxa
  224. ; ni descomptar moviments.
  225. ; Paràmetres d'entrada: Cap
  226. ; Paràmetres de sortida: Cap
  227. ;*******************************************************************************
  228. MouFitxa:
  229.  
  230.  
  231.   ret
  232.  
  233. ;*******************************************************************************
  234. ; Verifica si el tauler està ordenat, és a dir, les fitxes estan ordenades
  235. ; d’esquerra a dreta i de dalt a baix, quedant la casella buida a la última
  236. ; posició (baix-dreta), si és així canviar l’estat a 2 (Guanya).
  237. ; Verifica si s'han esgotat els moviments disponibles, si és així posa estat a 4
  238. ; (moviments exhaurits)
  239. ; Paràmetres d'entrada: Cap
  240. ; Paràmetres de sortida: Cap
  241. ;*******************************************************************************
  242.  
  243. VerificaFi:
  244.  
  245.  
  246.   ret
  247.  
  248. ;*******************************************************************************
  249. ; Mostra el missatge indicat per SI.
  250. ; Paràmetres d'entrada: SI: adreça del missatge que volem mostrar
  251. ; Paràmetres de sortida: Cap
  252. ;*******************************************************************************
  253. MostraMissatge:
  254.  
  255.  
  256.   ret
  257.  
  258.  
  259. ;*******************************************************************************
  260. ; Instal·lació de la rutina d'atenció d'interrupció de rellotge
  261. ; Paràmetres d'entrada: Cap
  262. ; Paràmetres de sortida: Cap
  263. ;*******************************************************************************
  264. InstalRAI:
  265.  
  266.  
  267.   ret
  268.  
  269. ;*******************************************************************************
  270. ; Desinstal·lació de la rutina d'atenció d'interrupció de rellotge
  271. ; Paràmetres d'entrada: Cap
  272. ; Paràmetres de sortida: Cap
  273. ;*******************************************************************************
  274. DesInstalRAI:
  275.  
  276.  
  277.   ret
  278.  
  279.  
  280. ;*******************************************************************************
  281. ; Rutina d'atenció de l'interrupció del rellotge
  282. ; Paràmetres d'entrada: Cap
  283. ; Paràmetres de sortida: Cap
  284. ;*******************************************************************************
  285. RAIrellotge :  
  286.  
  287.   push ax
  288.   push dx
  289.   push ds
  290.  
  291.   mov ax,@DATA
  292.   mov ds,ax
  293.  
  294. &#59;codi de la RAI
  295.  
  296.  
  297. FiRAIrel:
  298.   mov al,20h
  299.   out 20h,al
  300.  
  301.   pop  ds
  302.   pop  dx
  303.   pop  ax
  304.  
  305.         iret
  306.  
  307.  
  308.  
  309. ;*******************************************************************************
  310. ; Programa Principal
  311. ;*******************************************************************************
  312. inici:
  313.   STARTUPCODE
  314.  
  315.   Call EsborraPantalla  
  316.  
  317.   Call MostraTauler
  318.  
  319.  &#59;El vostre codi
  320.  
  321.  
  322.  
  323.  
  324.  
  325.   EXITCODE 0
  326.  
  327. end inici
  328.  
  329.  

4
Microcontroladores / Re: Programar Teclado En Pic
« en: Jueves 26 de Abril de 2007, 12:24 »
Ya lo he solucionado, gracias a todos aquellos que me hubiérais podido ayudar, jejeje

ciao!!

5
Microcontroladores / Programar Teclado En Pic
« en: Miércoles 25 de Abril de 2007, 11:12 »
Hola, alguien sabe como plantear el sistema de rastreo para averiguar qué tecla ha sido pulsada en un teclado de 12 teclas?

3 columnas x 4 filas
está conectado al puerto B de un pic 16f84a, es decir el puerto B como entrada

Necesitaría ayuda o bien en lenguaje ensamblador o en C2C (que es el lenguaje d emi compilador, PicAntIDE)

El ojbetivo es identificar la tecla pulsada para después darle una función especifica.

Un saludo y gracias anticipadas.

6
Microcontroladores / Re: Convertir Asm A Hex
« en: Martes 20 de Marzo de 2007, 16:02 »
Citar

En tu otra pregunta también está como hacerlo


Sí, lo he visto justo después de hacer este post  :) , gracias de nuevo.


Gracias pegasux, tenía ese programa instalado y todavía no lo había probado, jejeje

7
Microcontroladores / Re: Simulador Para Pic16f84a
« en: Martes 20 de Marzo de 2007, 15:59 »
EI MUCHÍSIMAS GRACIAS, TE LO HAS CURRADO

Ahora mismo estaba mirándome un tutorial que junto con lo que tú me has puesto me ha servido bastante para comprender el programa, y sí, he insultado unas cuantas veces al programa, xDDD, se me borraban todo el rato los componentes, pero bueno, Ctrl+Z y listo.

Muchas gracias, si tengo alguna duda (esperemos que no) ya te enterarás, jejeje

  :rolleyes:

8
Microcontroladores / Convertir Asm A Hex
« en: Martes 20 de Marzo de 2007, 15:43 »
qué programa conoceis que haga esta conversión?

me he descargado varios, pero no funcionan bien.

Un saludo

9
Microcontroladores / Re: Simulador Para Pic16f84a
« en: Martes 20 de Marzo de 2007, 11:01 »
Buenas.

Me he descargado dicho programa, pero no se como funciona, me podrías explicar qué debo hacer para que me simule el PIC16F84A ??

Te estaría muy agradecido.

Un saludo.


Edito para decir, que he estado investigando por el programa, ya mas o menos se como va para añadir cosas al esquema y demás, pero me faltan varias cosas, no se donde debo buscar un oscilador de 4 MHz, ni donde debo encontrar interruptores para poder conectarlos al puerto A. Tampoco se como cargar el programa al pic virtual.

10
Microcontroladores / Simulador Para Pic16f84a
« en: Lunes 19 de Marzo de 2007, 14:38 »
Alguien sabe algún simulador para poder probar programas para el pic 16F84a?? esque ya me he cargado 2 en 10 minutos al cargar un programa, la verdad es que no entiendo por qué sucede... Agradecería vuestra ayuda

Saludos

11
Microcontroladores / Escribir/leer En La E2prom
« en: Viernes 16 de Marzo de 2007, 10:55 »
Saludos a todos.

Necesitaría saber cómo se escribe y se lee en la memoria EEPROM del PIC16F84a.

Mi idea es la siguiente:

Primero quiero escribir en la memoria los números del 0 al 9, a través del programa con la codificación:

1.-00000110b [03h]
2.-01011011b [5Bh]
3.-01001111b [4Fh]
.
.
.

Es para un módulo siete segmentos.

Una vez haya escrito la memoria, mediante el PORTA del [RA3-RA0], quisiera meter la codificación del número en binario y hacer que se encienda el número decimal correspondiente leyendo de la posición de memoria que le toca.

Esto lo he hecho pero con un switch - case, pero necesito aprender a escribir y leer en la memoria EEPROM.

Gracias por anticipado

PD: con el código necesario para escribir/leer de la memoria 2 números ya me basta, el resto ya lo desarrollaré yo, esque necesito ver como se empieza.

12
Microcontroladores / Re: Instrucciones Para Seleccionar Banco De Memoria
« en: Miércoles 14 de Marzo de 2007, 19:43 »
Sí, tenéis razón, yo todavía pensaba en el 16f84 que solo tiene 2 bancos de memoria, y eso me generó la duda. Gracias a los 2

13
Microcontroladores / Re: Activar Interrupción Pic16f84
« en: Martes 13 de Marzo de 2007, 17:49 »
Bueno... he desistido, ya que pienso que lo que no funciona es la interrupción externa de la placa, ya que si lo configuro para que haga la interrupción con el TMR0 si que funciona, me habéis ayudado mucho, gracias a todos y ya os expondré más dudas, jejeje  :rolleyes:

14
Microcontroladores / Instrucciones Para Seleccionar Banco De Memoria
« en: Martes 13 de Marzo de 2007, 17:47 »
Buenas, aquí estoy otra vez... con mis dudas, jejejeje, pues bién, tengo este código para un PIC16F873:

Código: Text
  1.  
  2.    bcf STATUS,RP0;
  3.    bcf STATUS,RP1
  4.    movf param01_rd_flsh,w
  5.    bsf STATUS,RP1;
  6.    movwf EEADR;
  7.    bcf STATUS,RP1;
  8.    movf param00_rd_flsh,w
  9.    bsf STATUS,RP1;
  10.    movwf EEADRH
  11.    bsf STATUS, RP1;
  12.    bsf STATUS, RP0;
  13.    bsf EECON1,EEPGD;
  14.    bsf EECON1,RD;
  15.    nop
  16.    nop
  17.    bcf STATUS,RP0
  18.  
  19.  

y buscando por internet no me queda claro qué hacen las instrucciones, por ejemplo, según un libro que tengo, al poner [bcf STATUS,RP0] estoy seleccionando el banco 0, no?

Por lo tanto en el código de después, estoy seleccionando el banco 1?

No se bien bien por qué se hace, pero lo veo un poco ambiguo, si selecciono primero un banco, y luego otro, el primero no queda "descartado"?

En fin, en su totalidad el código no lo entiendo muy bien... si alguien con un poco de tiempo y paciencia me lo puede explicar, estaré muy agradecido, mientras seguiré "decodificando" el resto del código que si que entiendo. Lo único que pienso es que se trata de escribir y/o leer en la memoria flash y/o e2prom... espero no estar equivocado en eso...

Gracias por anticipado.

15
Microcontroladores / Re: Activar Interrupción Pic16f84
« en: Lunes 12 de Marzo de 2007, 11:05 »
Citar
realmente el programa no se vuelve a reiniciar pero pareciese que si, no se si es lo que buscas.

Sí, es lo que busco, ahora mismo estoy intentando implementar el código que me has descrito en mi programa, ya que tengo que utilizar otro tipo de instrucciones al programar en C... por el momento no me da error, pero no consigo que salga del estado sleep. Seguiré investigando y haciendo pruebas.

16
Microcontroladores / Re: Activar Interrupción Pic16f84
« en: Viernes 9 de Marzo de 2007, 11:34 »
Citar
Si quieres mediante una senal externa reiniciar tu programa desde 0, no te olvides que el micro tiene una pata de reset... este pin esta ahi para usarlo cuando se quiera

Es lo que he ido haciendo mientras no conseguía hacerlo mediante el programa, pero mi idea es aprender a utilizar las interrupciones y saber volver del estado sleep. La verdad es que estoy algo verde todavía en esto, pero espero aprender rápido con vuestros consejos  :rolleyes:

Este PIC no será el definitivo que se usará para implementar lo que tengo que hacer, pero he leído por ahí que para aprender es el ideal. He hecho ya varios programas pero lo de las interrupciones se me resiste.

17
Microcontroladores / Re: Activar Interrupción Pic16f84
« en: Viernes 9 de Marzo de 2007, 10:33 »
Citar
NO no es igual siempre, en este caso estas usando solo una interrupcion por lo cual no hay mayor problema pero es mejor acostumbrarse ya que cuando uses mas de una interrupcion si activas las interrupciones globales primero se te puede disparar alguna interrupcion en lo que estas activando otras.

Vale, lo tendré en cuenta para mis próximas programaciones  :)


Citar
esta estructura la he tomado de un libro de microcontroladores y la he ocupado siempre sin problemas ni errores

Yo también he visto esta estructura en muchos sitios, el caso es que la he visto siempre que se ha programado únicamente en ASM, quizás me dé estos errores al utilizar este compilador (PicANT IDE) y mezclar los dos lenguajes de programación (C2C y ASM).

Citar
ya tomaste encuenta lo que te dije

Citar
el problema es que  NUNCA se retorna de la interrrupcion


Sí, lo tomo en cuenta, pero al hacer esto
Código: Text
  1.  
  2. void interrupt(void)
  3. {
  4. disable_interrupt(GIE);
  5. clear_bit(INTCON,INTF);      //esto en realidad es lo mismo que disable_interrupt, no?
  6. asm reset;                         //no se si hago bien con este reset
  7. }
  8.  
  9.  

no estoy reiniciando el programa  con el reset? o quizás falta la rutina de retorno de interrupción RETFIE?

18
Microcontroladores / Re: Activar Interrupción Pic16f84
« en: Viernes 9 de Marzo de 2007, 00:21 »
Tu y yo también estábamos escribiendo al mismo tiempo Huguen_aus_Tirol jejeje


Citar
Mi consejo:

ORG 0x0
GOTO main

ORG 0x4
ISR
;salvo STATUS y W (atención!! salvar registros sin modificar STATUS!! solución en microchip.com)
;veo que interrupción es y salto según cual sea con un CALL...
;retorno a la linea que sigue:
ISR_END
;repongo los valores de STATUS y W (sin modificar STATUS!! solución en...)
RETFIE

;y sin poner otro ORG...
main
;programa principal....

Te has explicado bien, he probado lo que dices y de todas formas me da el mismo error de overwriting, no se qué hacer  :blink:

19
Microcontroladores / Re: Activar Interrupción Pic16f84
« en: Viernes 9 de Marzo de 2007, 00:13 »
Citar
Me mareo un poco tu programa... programas en asembler o en C?

Esque utilizo el PicANT IDE, y tengo que programar en C2C, pero en alguna ocasión tengo que intercalar ASM, como en el caso del sleep, ya que no conozco su equivalente en C.

La interrupción es para que salga del estado sleep y reactive el programa desde el inicio, es decir, es como hacer un reset, la verdad es que no importaría mantener los estados anteriores ya que vuelve a empezar de 0. La idea solo es practicar, ya que los leds serán los indicadores de teclas, y tendré que hacer otro algoritmo para detectar qué tecla se ha activado después (la tecla que esté "iluminada"). Ahora solo quería practicar el poner el pic en reposo y sacarlo de él volviendo a iniciar el programa.


Citar

ademas es mejor activar los permisos para las diferente interrupciones y despues activar el permiso global o sea poner la sentencia BSF INTCON,INTE primero y despues la del GIE.


No daría igual hacer una antes que otra sin importar el orden?
Al fin y al cabo sólo se activarán las interrupciones después de haber en el estado sleep, no?



Mi avance

Buscando por ahí he logrado lo siguiente:

Código: Text
  1.  
  2. #include <system.h>
  3.  
  4. asm
  5. {
  6. list p=16F84A
  7. __config H'3FF1'
  8. include        "p16F84A.inc"
  9. }
  10.  
  11. void interrupt(void)
  12. {
  13. disable_interrupt(GIE);
  14. clear_bit(INTCON,INTF);      //esto en realidad es lo mismo que disable_interrupt, no?
  15. asm reset;                         //no se si hago bien con este reset
  16. }
  17.  
  18. main()
  19. {
  20.  
  21. int j,k,i,m;
  22.  
  23. set_bit( STATUS, RP0 );            
  24. OPTION_REG= 01010000b;
  25. set_tris_b(0);
  26. clear_bit( STATUS, RP0 );
  27.  
  28. j=0;
  29. PORTB=1;
  30.  
  31. while(1)
  32. {
  33. while(j<3)
  34. {
  35. for(k=0;k<8;k++)
  36.   {
  37.   for(i=0;i<255;i++)
  38.     {
  39.     for(m=0;m<55;m++);
  40.     }
  41.   PORTB = PORTB * 2;
  42.   }
  43. j++;
  44. PORTB=1;
  45. }
  46.  
  47. enable_interrupt(INTE);
  48. enable_interrupt(GIE);
  49.  
  50. asm
  51. {
  52. sleep
  53. }
  54. }
  55.  
  56. }
  57.  
  58.  


De esta manera no me sale ningún error, lo que pasa es que hago el flanco para activar la interrupción y no se si realmente funciona, ya que no vuelve a iniciar el programa... y no he podido hacer modificaciones porque el pic se me ha estropeado ya que llevaba ya muchas grabaciones ... mañana iré a comprar más.


Decidme qué os parece y si tenéis alguna idea. Gracias

20
Microcontroladores / Re: Activar Interrupción Pic16f84
« en: Jueves 8 de Marzo de 2007, 19:04 »
He intentado avanzar, pero no lo consigo, ya que las ideas que voy teniendo solo hacen que incluir errores en la compilación, uno de mis cambios sería:


Código: Text
  1.  
  2. #include <system.h>
  3. asm
  4. {
  5. list p=16F84A
  6. __config H'3FF1'
  7. include        "p16F84A.inc"
  8.  
  9. ORG 0x00
  10.  
  11. goto INICIO
  12.  
  13. ORG 0x04
  14.  
  15. BCF INTCON,GIE    &#59;pongo el GIE a 0 para que no haya otra interrupción hasta
  16.                             &#59;que no acabe la secuencia
  17.  
  18. goto INICIO          &#59;vuelvo a inicio ya que lo que quiero es reinicializar el                                      
  19.                            &#59;desplazamiento de las luces
  20.  
  21. INICIO:               &#59;esto no debería dar problema no?? a partir de aquí se mete en el
  22.                            &#59;main() otra vez directamente, no?
  23. }
  24.  
  25.  
  26. main()
  27. {
  28.  
  29.  
  30. int j,k,i,m;
  31.  
  32. set_bit( STATUS, RP0 );            
  33. OPTION_REG= 01010000b;           //al estar el bit 6 a 1 (INTEDG), se activará la
  34.                                                   //interrupción por flanco de subida, no?
  35. set_tris_b(0);                              
  36. clear_bit( STATUS, RP0 );
  37.  
  38. .
  39. .              &#59;hago correr la luz
  40. .
  41.  
  42. asm
  43. {
  44.  
  45. BSF INTCON,GIE  &#59;activo el permiso para interrupciones
  46. BSF INTCON,INTE &#59;activo el permiso para interrupción externa INT/RB0
  47.  
  48. sleep
  49.  
  50.  
  51. }
  52.  
  53.  
  54.  


Al poner ese código me pone todo el rato estos errores:

Overwritting previous address contents (0000)
Overwritting previous address contents (0000)
Overwritting previous address contents (0004)
Overwritting previous address contents (0004)
Overwritting previous address contents (0005)
Overwritting previous address contents (0005)


No se como solucionarlos...

21
Microcontroladores / Activar Interrupción Pic16f84
« en: Jueves 8 de Marzo de 2007, 10:56 »
Hola, pues bién... estoy "formandome" sobre PIC's, ya que en mi proyecto fin de carrera debo "solapar" dos mandos a radio frecuencia y tengo que programar el resultante. Bien, pues el caso es que tengo un pequeño problema, no se bien bien como se activan las interrupciones, he hecho un programa sencillo en el cual al finalizar una serie de procesos (hacer correr una luz) entra en modo sleep. Mi intención es que al activar una de las interrupciones, se salga del modo sleep y vuelva a reiniciar el programa. Se que no es muy complicado, pero de momento no me sale.

Recursos utilizados:

PROGRAMADOR: Micro PIC trainer v1.1
PIC: 16F84A
software: PicAnt IDE, MPlab, IC-PROG

Se que el vector de interrupciones se situa en la 0x04h, y que para que se activen las interrupciones debe estar a 1 el GIE (a parte de su correspondiente bandera de interrupción), lo que no se es si debo poner yo a 1 el GIE al inicio del programa... en fin, que voy algo perdido en interrupciones.


Código:


Código: Text
  1.  
  2. #include <system.h>
  3.  
  4. asm
  5.  
  6. {
  7. list p=16F84A
  8. __config H'3FF1'
  9. }
  10.  
  11.  
  12. main()
  13. {
  14.  
  15. int j,k,i,m;
  16.  
  17. set_bit( STATUS, RP0 );            
  18. OPTION_REG= 01010000b;
  19. set_tris_b(0);
  20. clear_bit( STATUS, RP0 );
  21.  
  22. while(1)
  23. {
  24.  
  25. j=0;
  26. PORTB=1;
  27.  
  28. while(j<3)
  29. {
  30. for(k=0;k<8;k++)
  31.   {
  32.   for(i=0;i<255;i++)
  33.     {
  34.     for(m=0;m<255;m++);
  35.     }
  36.   PORTB = PORTB * 2;
  37.   }
  38. j++;
  39. PORTB=1;
  40. }
  41.  
  42. PORTB=0;
  43. asm
  44. {
  45. sleep
  46. }
  47. }
  48. }
  49.  
  50.  

Agradezco vuestra ayuda.

22
PHP / Formulario
« en: Domingo 8 de Octubre de 2006, 10:18 »
Hola, necesito hacer un formulario en php, debe ser como si fuera un catálogo de una tienda, y debo poder escoger entre varios artículos, marcar la cantidad, y que el productod de la cantidad, por el precio de cada artículo se vaya actualizando en un apartado distinto, llamado "lista de la compra", es decir, que cada artículo que compre, se vaya añadiendo a la lista de la compra, y la suma total del coste en cualquier momento, se vea tanto en la pantalla del "catálogo", como en la pantalla de la "lista de la compra", como en la página principal de presentación.

Algún consejo?? :huh:

23
Visual C++ / Re: Programar On/off De Una Bombilla
« en: Viernes 26 de Mayo de 2006, 08:59 »
Gracias a los dos, lo volveré a intentar en los próximos días y ya comentaré los resultados. Que vaya bién!  :)

24
Visual C++ / Re: Programar On/off De Una Bombilla
« en: Miércoles 10 de Mayo de 2006, 15:47 »
No he conseguido hacer funcionar el programa. Me da un error, y es el siguiente:
c:\documents and settings\2141270\escritorio\pruebas\parallelport\parallelportdlg.cpp(4) : fatal error C1853: 'Debug/ParallelPort.pch' is not a precompiled header file created with this compiler

y me indica que el error está aquí:

>> #include "stdafx.h"

si comento este include, me sale otro error, el siguiente:

c:\documents and settings\2141270\escritorio\pruebas\parallelport\parallelportdlg.cpp(294) : fatal error C1010: unexpected end of file while looking for precompiled header directive

25
Bueno, ya he logrado hacerlo por mi propia cuenta, por si a alguien le interesa saber cual sería el código, pues bién, sería el siguiente:

Entity PISO is
    port(trama:in std_logic_vector(9 downto 0);
           reset, clk, load, enable:in std_logic;
           TxD:out std_logic
          );
end PISO;

Architecture ARC_PISO of PISO is
    begin
       signal S: std_logic_vector(9 downto 0);
       process(trama,reset,clk,load,enable)
          begin
              if reset='1' then
                 TxD='0';
              elsif enable = '0' then
                 if (clk='1' and clk'event) then
                     if load='1' then
                         TxD <= S(0) & S(9 downto 0);
                     endif;
                 endif;
              endif;
          end process;
    end ARC_PISO;

Páginas: [1] 2