|
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
1
« 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
« 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
« 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á. ;AETC Pràctica: Quinze-Puzle ;Cognoms i Nom: ; ;Lliurar el fitxer amb el nom: cognom1_cognom2_nom.asm ;Data de lliurament: ---------- .model small .stack 1024 DOSSERVICE EQU 21H ; serveis DOS BIOSSERVICE EQU 10H ; serveis BIOS TicksSegon EQU 18 ; Ticks per segon VECT_R EQU 08h ; vector de rellotge .data Tauler db 'Tauler de Joc';Tauler de joc que es mostra a l'inici del programa db ' 0 1 2 3 ' db ' ÚÄÂÄÂÄÂÄ¿ ' db ' 0³ ³ ³ ³ ³ ' db ' ÃÄÅÄÅÄÅÄ´ ' db ' 1³ ³ ³ ³ ³ ' db ' ÃÄÅÄÅÄÅÄ´ ' db ' 2³ ³ ³ ³ ³ ' db ' ÃÄÅÄÅÄÅÄ´ ' db ' 3³ ³ ³ ³ ³ ' db ' ÀÄÁÄÁÄÁÄÙ ' db '00 Moviments' db '00 Segons ' ;Quan lliureu la pràctica deixeu la matriu inicialitzada amb aquests valors. Fitxa db 'ABCD';Matriu 4x4 on tenim les fitxes db 'FGHI' db 'JK Z' db 'OPNM' Estat db 1 ; 0: Hem pitjat la tecla 'q' per sortir, sortir del programa. ; 1: Continuem jugant. ; 2: Guanyat, Totes les lletres estan ordenades, indicar-ho i acabar. ; 3: Temps exhaurit, indicar-ho i acabar. ; 4: Nombre de moviments exhaurits, indicar-ho i acabar ; 5: Masses caselles en blanc, indicar-ho i acabar. ;FilCur i ColCur indicaran la posició del cursor en tot moment. FilCur db ? ; '0': Fila 0, '3': Fila 3 ColCur db ? ; '0': Columna 0, '3': Columna 3 Moviments db 99; Moviments que podem realitzar. Ticks db 0 ;variable que indica els Ticks de rellotge transcorreguts Segons dw 0 ;variable per comptar els segons RAI_R_Seg dw ? ; adreça de segment de la RAI de rellotge original RAI_R_Dir dw ? ; desplaçament dins del segment de la RAI de rellotge original MsgPerdut5 db 'Tauler incorrecte, masses caselles en blanc.','$' MsgPerdut4 db 'Has perdut! Moviments exhaurits','$' MsgPerdut3 db 'Has perdut! Temps exhaurit ','$' MsgGuanya db 'Ho has aconseguit, tot ordenat!','$' MsgSortir db 'Has premut (q) per sortir ','$' .code ;******************************************************************************* ; Esborra la pantalla completament escrivint espais en blanc ; Paràmetres d'entrada: Cap ; Paràmetres de sortida: Cap ;******************************************************************************* EsborraPantalla: push AX push BX push CX push DX ;Inicialització per posicionar el cursor mov bh,00h ;pagina mov dh,00h ;fila inicial mov dl,00h ;columna inicial mov ah,02h ;servei per posicionar el cursor int BIOSSERVICE mov bh,00h ;pagina mov bl,07h ;atribut mov cx,2000 ;80*25nombre de caracters a escriure mov al,' ' ;caracter mov ah,09h ;servei per escriure caracter. int BIOSSERVICE pop DX pop CX pop BX pop AX Ret ;******************************************************************************* ; Mostra el Tauler de joc sense Dades, és a dir, mostra la matriu Tauler ; ; Paràmetres d'entrada: Cap ; Paràmetres de sortida: Cap ;******************************************************************************* MostraTauler: push AX push BX push CX push DX push SI ;Inicialitzar registres mov bh,00h ;pagina mov dh,06 ;fila inicial mov dl,33 ;columna inicial mov bl,07h ;atribut mov cx,1 ;escriurem 1 caracters cada cop mov si,0 ;index per accedir al tauler bucleMT: mov ah,02h ;servei per posicionar el cursor int BIOSSERVICE mov al,Tauler[SI];caracter mov ah,09h ;servei per escriure caracter. int BIOSSERVICE inc si ;incrementem l'índex per accedir a les dades ;Actualitzem posició del cursor (fila i columna) inc dl ;columna cmp dl, 46 ;Quan arribem a la columna 46 ens posem a l'inici jl bucleMT ;de la següent fila. mov dl, 33 inc dh ;fila cmp dh, 19 ;Quan arribem a la fila 19 vol dir que hem acabat jl bucleMT ;de dibuixar el tauler. pop SI pop DX pop CX pop BX pop AX ret ;******************************************************************************* ; Buscar posició Inicial per començar a jugar. ; Buscar on hi ha l'espai en blanc i verifica que només hi hagi un espai en ; blanc a la matriu Fitxa. Si només hi ha un espai en blac posiciona el cursor ; en aquella casella. Si hi ha més d'un o cap espai en blanc posem Estat=5 per acabar. ; Paràmetres d'entrada: Cap ; Paràmetres de sortida: Cap ;******************************************************************************* PosIni: ret ;******************************************************************************* ; Actualitza el contingut del Tauler de Joc amb les dades de la matriu Fitxa ; i mostra els moviments que podem realitzar a pantalla cridant a la subrutina ; MostraDigits. El cursor ha de quedar en el mateix lloc que estava. ; Paràmetres d'entrada: Cap ; Paràmetres de sortida: Cap ;******************************************************************************* ActualitzaTauler: ret ;******************************************************************************* ; Converteix un valor decimal (entre 0 i 99) en dos caràcters ASCII. ; S’ha de dividir el valor entre 10, el quocient representarà les desenes i ; el residu les unitats, després s’han de convertir a ASCII. ; Mostra els 2 digits ASCII a la posició de pantalla indicada a través de la pila. ; El valor i la posició es passen per la pila. ; Paràmetres d'entrada: valor [bp+6] i posició (fila,columna) [bp+4] ; Paràmetres de sortida: cap ;******************************************************************************* MostraDigits: ret ;******************************************************************************* ; Llegim una tecla utilitzant el servei 08h de les crides al DOS. ; Segons la tecla llegida cridarem al procediment corresponent. ; [‘i’,’j’,’k’ o ’l’] cridar al procediment MouCursor ; ‘<espai>’ cridar al procediment MouFitxa ; ‘q’ posa Estat=0. ; (per la lectura de teclar utilitzar només crides als serceis del DOS). ; Paràmetres d'entrada: Cap ; Paràmetres de sortida: Cap ;******************************************************************************* LlegirTecla: ret ;******************************************************************************* ; Mou el cursor segons la direcció indicada per AL i actualitza FilCur i ColCur ; segons la direcció que s’haig seleccionat ; Paràmetres d'entrada: AL indica la direcció del moviment ('i', 'j', 'k' o 'l') ; Paràmetres de sortida: Cap ;******************************************************************************* MouCursor: ret ;******************************************************************************* ; Mira si hi ha una casella buida al costat (dalt, baix, esquerra o dreta) de ; la casella actual del cursor, si és així fem el moviment de la fitxa i ; decrementa en un el número de moviments, si estem a la casella buida o si ; la casella buida no està al costat de la casella on estem, no moure cap fitxa ; ni descomptar moviments. ; Paràmetres d'entrada: Cap ; Paràmetres de sortida: Cap ;******************************************************************************* MouFitxa: ret ;******************************************************************************* ; Verifica si el tauler està ordenat, és a dir, les fitxes estan ordenades ; d’esquerra a dreta i de dalt a baix, quedant la casella buida a la última ; posició (baix-dreta), si és així canviar l’estat a 2 (Guanya). ; Verifica si s'han esgotat els moviments disponibles, si és així posa estat a 4 ; (moviments exhaurits) ; Paràmetres d'entrada: Cap ; Paràmetres de sortida: Cap ;******************************************************************************* VerificaFi: ret ;******************************************************************************* ; Mostra el missatge indicat per SI. ; Paràmetres d'entrada: SI: adreça del missatge que volem mostrar ; Paràmetres de sortida: Cap ;******************************************************************************* MostraMissatge: ret ;******************************************************************************* ; Instal·lació de la rutina d'atenció d'interrupció de rellotge ; Paràmetres d'entrada: Cap ; Paràmetres de sortida: Cap ;******************************************************************************* InstalRAI: ret ;******************************************************************************* ; Desinstal·lació de la rutina d'atenció d'interrupció de rellotge ; Paràmetres d'entrada: Cap ; Paràmetres de sortida: Cap ;******************************************************************************* DesInstalRAI: ret ;******************************************************************************* ; Rutina d'atenció de l'interrupció del rellotge ; Paràmetres d'entrada: Cap ; Paràmetres de sortida: Cap ;******************************************************************************* RAIrellotge : push ax push dx push ds mov ax,@DATA mov ds,ax ;codi de la RAI FiRAIrel: mov al,20h out 20h,al pop ds pop dx pop ax iret ;******************************************************************************* ; Programa Principal ;******************************************************************************* inici: STARTUPCODE Call EsborraPantalla Call MostraTauler ;El vostre codi EXITCODE 0 end inici
4
« 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
« 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
« en: Martes 20 de Marzo de 2007, 16:02 »
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
« 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
8
« 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
« 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
« 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
« 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
« 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
« 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
14
« 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: bcf STATUS,RP0; bcf STATUS,RP1 movf param01_rd_flsh,w bsf STATUS,RP1; movwf EEADR; bcf STATUS,RP1; movf param00_rd_flsh,w bsf STATUS,RP1; movwf EEADRH bsf STATUS, RP1; bsf STATUS, RP0; bsf EECON1,EEPGD; bsf EECON1,RD; nop nop bcf STATUS,RP0
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
« en: Lunes 12 de Marzo de 2007, 11:05 »
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
« en: Viernes 9 de Marzo de 2007, 11:34 »
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 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
« en: Viernes 9 de Marzo de 2007, 10:33 »
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 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). ya tomaste encuenta lo que te dije
el problema es que NUNCA se retorna de la interrrupcion
Sí, lo tomo en cuenta, pero al hacer esto void interrupt(void) { disable_interrupt(GIE); clear_bit(INTCON,INTF); //esto en realidad es lo mismo que disable_interrupt, no? asm reset; //no se si hago bien con este reset }
no estoy reiniciando el programa con el reset? o quizás falta la rutina de retorno de interrupción RETFIE?
18
« en: Viernes 9 de Marzo de 2007, 00:21 »
Tu y yo también estábamos escribiendo al mismo tiempo Huguen_aus_Tirol jejeje 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
19
« en: Viernes 9 de Marzo de 2007, 00:13 »
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. 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 avanceBuscando por ahí he logrado lo siguiente: #include <system.h> asm { list p=16F84A __config H'3FF1' include "p16F84A.inc" } void interrupt(void) { disable_interrupt(GIE); clear_bit(INTCON,INTF); //esto en realidad es lo mismo que disable_interrupt, no? asm reset; //no se si hago bien con este reset } main() { int j,k,i,m; set_bit( STATUS, RP0 ); OPTION_REG= 01010000b; set_tris_b(0); clear_bit( STATUS, RP0 ); j=0; PORTB=1; while(1) { while(j<3) { for(k=0;k<8;k++) { for(i=0;i<255;i++) { for(m=0;m<55;m++); } PORTB = PORTB * 2; } j++; PORTB=1; } enable_interrupt(INTE); enable_interrupt(GIE); asm { sleep } } }
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
« 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: #include <system.h> asm { list p=16F84A __config H'3FF1' include "p16F84A.inc" ORG 0x00 goto INICIO ORG 0x04 BCF INTCON,GIE ;pongo el GIE a 0 para que no haya otra interrupción hasta ;que no acabe la secuencia goto INICIO ;vuelvo a inicio ya que lo que quiero es reinicializar el ;desplazamiento de las luces INICIO: ;esto no debería dar problema no?? a partir de aquí se mete en el ;main() otra vez directamente, no? } main() { int j,k,i,m; set_bit( STATUS, RP0 ); OPTION_REG= 01010000b; //al estar el bit 6 a 1 (INTEDG), se activará la //interrupción por flanco de subida, no? set_tris_b(0); clear_bit( STATUS, RP0 ); . . ;hago correr la luz . asm { BSF INTCON,GIE ;activo el permiso para interrupciones BSF INTCON,INTE ;activo el permiso para interrupción externa INT/RB0 sleep }
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
« 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: #include <system.h> asm { list p=16F84A __config H'3FF1' } main() { int j,k,i,m; set_bit( STATUS, RP0 ); OPTION_REG= 01010000b; set_tris_b(0); clear_bit( STATUS, RP0 ); while(1) { j=0; PORTB=1; while(j<3) { for(k=0;k<8;k++) { for(i=0;i<255;i++) { for(m=0;m<255;m++); } PORTB = PORTB * 2; } j++; PORTB=1; } PORTB=0; asm { sleep } } }
Agradezco vuestra ayuda.
22
« 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??
23
« 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
« 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
« en: Viernes 5 de Mayo de 2006, 12:02 »
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;
|
|
|