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

Temas similares

27/04/2009 #1
Visitante


Programar PICs y usar MPLAB desde 0
Bueno, reslta que he olvidado TODO lo que aprendi sobre programacion de pics, y resulta frustrante puesto que llege a hacer casi un game of life en 1D, hace algun tiempo cambie de SO y ayer me baje el MPLAB a ver si el WINe me lo movia, al final con buenos resultados, sin embargo y por desgracia me di cuenta que ya no tenia ni puta idea de usar el mplab.

En concreto neceesito saber su funcionamiento basico, por ejemplo, yo escribo codigo, y ¿a que boton le doy despues? ¿en que formatos me compila? ¿que formatos necesito? ¿me saca directamente un HEX?

Si, ya se que resulta un poco dificil asumir que olvide todo esto, pero es cierto!, me da que segui alguna guia que me decia que hacer sin explicar el porque y de ahi que se me olvide (siempre me preocupo de saber el porque de las cosas).

Tengo mil dudas mas, pero creo que estas son las primeras que he de despejar, tengo un codigo con el puedo ir probando sin miedo a que este mal compilado.

Echadme una mano porfa.
27/04/2009 #2


Mira aqui, tiene mucha información acerca de los pic, asi como links para información adicional

http://www.forosdeelectronica.com/f2...c16f877-13694/
27/04/2009 #3
Visitante


Ese hilo ya le tengo mirado, pero lo que necesito son respuestas simples a preguntas simples, mucha parte de la base ya la tengo, lo que tambien tengo son unos huecos terribles en esa base, de ahi este tema, necesito "arrancar", no ahogarme en un mar de información, y para el que use MPLAB a diario responder estas 4 preguntas no supone ningun esfuerzo
27/04/2009 #4


En concreto neceesito saber su funcionamiento basico, por ejemplo, yo escribo codigo, y ¿a que boton le doy despues?
Salvalo como asm, y luego oprime quickbuild miarchivo.asm


¿en que formatos me compila?
basicamente en asm, si tienes terceros programs puedes acoplarlo (PIC C , PIC nbasic, etc.)

¿que formatos necesito?
elaborate please

¿me saca directamente un HEX?
cuando lo compilas si
27/04/2009 #5
Visitante


mabauti dijo:
En concreto neceesito saber su funcionamiento basico, por ejemplo, yo escribo codigo, y ¿a que boton le doy despues?
Salvalo como asm, y luego oprime quickbuild miarchivo.asm


¿en que formatos me compila?
basicamente en asm, si tienes terceros programs puedes acoplarlo (PIC C , PIC nbasic, etc.)

¿que formatos necesito?
elaborate please

¿me saca directamente un HEX?
cuando lo compilas si
Wuo wuo! mil gracias!

Mas dudas:

"¿que formatos necesito?" Quiero decir, se supone que es el HEX el que mando al icprog, pero ¿necesito algun otro formato?, ademas, cuando lo he compilado me han salido como 4 archivos mas ¿para que son?


¿porque me pide un .err un .cod y no se que mas si abro un asm que no he echo yo?

¿como puedo hacer para que me marque colores (estos colorines para discriminar funciones facilmente) antes de guardar en asm?

¿para que sirve la ventana pequeña llamada "unlited workspace"?

¿como es eso de PIC C? ¿puedo programar directamente en C y me saca el HEX?
28/04/2009 #6


Hola a todos , le cuento que soy nuevo en el tema y estaba buscando información de como escribir el programa en mplab v7.40 ( algunos ejemplos simples como prender un led) porque la verdad hice un curso hace un año aprox y no me acuerdo mucho, por ejemplo , el programa se escribia en "program memory" pero despues no me acuerdo como era para ver si tenia errores y todo eso.
Desde ya les agradezco y espero sus respuestas, gracias! (x ahora)
28/04/2009 #7
Visitante


marco_chip dijo:
Hola a todos , le cuento que soy nuevo en el tema y estaba buscando información de como escribir el programa en mplab v7.40 ( algunos ejemplos simples como prender un led) porque la verdad hice un curso hace un año aprox y no me acuerdo mucho, por ejemplo , el programa se escribia en "program memory" pero despues no me acuerdo como era para ver si tenia errores y todo eso.
Desde ya les agradezco y espero sus respuestas, gracias! (x ahora)
Abri el tema para mi y pensando en gente como tu, la vedad, con las instrucciones ya dadas me ha funcionado bien, no se que no has pododo entender. para mirar si has echo algo mal, solo se que te dize que no ha podido construir, ahora, donde esta el error ya no lo se.
28/04/2009 #8
Visitante


Nueva duda con un programa, bueno, pues usando un programa del otro hilo que he abierto: Ejercicios de simulacion y entrenamiento PIC 16F870 decidi hacerme uno simple para ir viendo, me hize este:

Código:
;
;Control de los leds RB0 y RB1 desde el interruptor RC0. RB0 refleja el estado de RC0,
;RB1 el complemento de RC0
		
		List	p=16F870		;Tipo de procesador
		include	"P16F870.INC"	;Definiciones de registros internos

		ORG	0xB0

Inicio	        clrf 	PORTB		;Borra los latch de salida
		bsf	STATUS,RP0	;Selecciona banco 1
		clrf	TRISB		;Puerta B se configura como salida
		movlw	0xFF
		movwf	TRISC		;Puerta C se configura como entrada
		bcf	STATUS,RP0	;Selecciona banco 0

Loop		clrwdt			;Refresca el WDT timer
		btfsc	PORTC,0		;RC0 = 1 ?
		goto	RC0_es_1	;Si
		bcf	PORTB,0		;No, desconecta RB0
		bsf	PORTB,1		;Conecta RB1
		goto	Loop		;Buble sin fin

RC0_es_1	bsf	PORTB,0		;Activa RB0
		bcf	PORTB,1		;Activa RB1
		goto	Loop		;Bucle sin fin

              end
Basicamente enciende un led si un interruptor esta activado, y si esta desactivado lo apaga y enciende otro, todo listo le hize esta modificacion para que me encendiese otros leds con otro interruptor a la par:

Código:
;
;Control de los leds RB0 y RB1 desde el interruptor RC0. RB0 refleja el estado de RC0,
;RB1 el complemento de RC0
		
		List	p=16F870		;Tipo de procesador
		include	"P16F870.INC"	;Definiciones de registros internos

		ORG	0xB0

Inicio	        clrf 	PORTB		;Borra los latch de salida
		bsf	STATUS,RP0	;Selecciona banco 1
		clrf	TRISB		;Puerta B se configura como salida
		movlw	0xFF
		movwf	TRISC		;Puerta C se configura como entrada
		bcf	STATUS,RP0	;Selecciona banco 0

Loop		clrwdt			;Refresca el WDT timer
		btfsc	PORTC,0		;RC0 = 1 ?
		goto	RC0_es_1	;Si
		bcf	PORTB,0		;No, desconecta RB0
		bsf	PORTB,1		;Conecta RB1
		goto	Loop		;Buble sin fin

RC0_es_1	bsf	PORTB,0		;Activa RB0
		bcf	PORTB,1		;Activa RB1
		goto	Loop		;Bucle sin fin

Loop2		clrwdt			;Refresca el WDT timer
		btfsc	PORTC,1		;RC1 = 1 ?
		goto	RC1_es_1	;Si
		bcf	PORTB,2		;No, desconecta RB2
		bsf	PORTB,3		;Conecta RB3
		goto	Loop2		;Buble sin fin

RC1_es_1	bsf	PORTB,2		;Activa RB2
		bcf	PORTB,3		;Activa RB3
		goto	Loop2		;Bucle sin fin

		end			;Fin del programa fuente
Peeero no funciona, se me queda encendido siempre un led, y el segundo opera en funcion al primer interruptor, y el segundo interruptor no haze nada, los leds adicionales previstos no encienden.

¿alguien me puede indicar el error cometido?
28/04/2009 #9


Gracias Hemp por contestar , pero he aqui una de mis grandes dudas: ¿porque el programa esta escrito en codigo fuente? ¿no se puede escribir en "program memory"? (en mplab) porque asi es como me enseñaron en el curso . ¿sera que es mas complicado?
28/04/2009 #10

Avatar de Vegetal Digital

sobre los .err .cod no se para que estan, no son necesarios (capaz que los use el mplab por las dudas no los borres).

Ic prog usa solamente el .hex

Para que te marque con colores y todo re bonito tenes que agregar el archivo al proyecto
(Proyect->Add files to proyect y seleccionas el asm(c en mi caso :p))
Despues vas a view->proyect y en source files seleccionas el archivo
ahora te pinta todo
Al menos yo hago asi, hay que aclarar que yo uso ccs y quiza no sirva con ensamblador

Por ultimo:
un programa en C necesita ser compilado y necesito un programa aparte que ejecuta el mplab
con ensamblador no necesite nada, le di a un botoncito que decia make y me iso el .hex

Espero que te sirva...
28/04/2009 #11


Hemp dijo:
Nueva duda con un programa, bueno, pues usando un programa del otro hilo que he abierto: Ejercicios de simulacion y entrenamiento PIC 16F870 decidi hacerme uno simple para ir viendo, me hize este:

Código:
;
;Control de los leds RB0 y RB1 desde el interruptor RC0. RB0 refleja el estado de RC0,
;RB1 el complemento de RC0
		
		List	p=16F870		;Tipo de procesador
		include	"P16F870.INC"	;Definiciones de registros internos

		ORG	0xB0

Inicio	        clrf 	PORTB		;Borra los latch de salida
		bsf	STATUS,RP0	;Selecciona banco 1
		clrf	TRISB		;Puerta B se configura como salida
		movlw	0xFF
		movwf	TRISC		;Puerta C se configura como entrada
		bcf	STATUS,RP0	;Selecciona banco 0

Loop		clrwdt			;Refresca el WDT timer
		btfsc	PORTC,0		;RC0 = 1 ?
		goto	RC0_es_1	;Si
		bcf	PORTB,0		;No, desconecta RB0
		bsf	PORTB,1		;Conecta RB1
		goto	Loop		;Buble sin fin

RC0_es_1	bsf	PORTB,0		;Activa RB0
		bcf	PORTB,1		;Activa RB1
		goto	Loop		;Bucle sin fin

              end
Basicamente enciende un led si un interruptor esta activado, y si esta desactivado lo apaga y enciende otro, todo listo le hize esta modificacion para que me encendiese otros leds con otro interruptor a la par:

Código:
;
;Control de los leds RB0 y RB1 desde el interruptor RC0. RB0 refleja el estado de RC0,
;RB1 el complemento de RC0
		
		List	p=16F870		;Tipo de procesador
		include	"P16F870.INC"	;Definiciones de registros internos

		ORG	0xB0

Inicio	        clrf 	PORTB		;Borra los latch de salida
		bsf	STATUS,RP0	;Selecciona banco 1
		clrf	TRISB		;Puerta B se configura como salida
		movlw	0xFF
		movwf	TRISC		;Puerta C se configura como entrada
		bcf	STATUS,RP0	;Selecciona banco 0

Loop		clrwdt			;Refresca el WDT timer
		btfsc	PORTC,0		;RC0 = 1 ?
		goto	RC0_es_1	;Si
		bcf	PORTB,0		;No, desconecta RB0
		bsf	PORTB,1		;Conecta RB1
		goto	Loop		;Buble sin fin

RC0_es_1	bsf	PORTB,0		;Activa RB0
		bcf	PORTB,1		;Activa RB1
		goto	Loop		;Bucle sin fin

Loop2		clrwdt			;Refresca el WDT timer
		btfsc	PORTC,1		;RC1 = 1 ?
		goto	RC1_es_1	;Si
		bcf	PORTB,2		;No, desconecta RB2
		bsf	PORTB,3		;Conecta RB3
		goto	Loop2		;Buble sin fin

RC1_es_1	bsf	PORTB,2		;Activa RB2
		bcf	PORTB,3		;Activa RB3
		goto	Loop2		;Bucle sin fin

		end			;Fin del programa fuente
Peeero no funciona, se me queda encendido siempre un led, y el segundo opera en funcion al primer interruptor, y el segundo interruptor no haze nada, los leds adicionales previstos no encienden.

¿alguien me puede indicar el error cometido?
bueno lo primero es que empiesas en la direccion 0xb0 y por lo menos a mi no me lo simula si en 0x00
segundo detalle no apagas todo el puerto b antes de empezar con el programa principal y tercero a esta rutina
Código:
Loop2      clrwdt         ;Refresca el WDT timer 
                btfsc   PORTC,1      ;RC1 = 1 ? 
               goto   RC1_es_1   ;Si 
      bcf   PORTB,2      ;No, desconecta RB2 
      bsf   PORTB,3      ;Conecta RB3 
      goto   Loop2      ;Buble sin fin
nunca llega el programa no pasa por no llamarla en ningun momento distinto seria si en loop haces un call a loop2


pdta no me estas cargando no?
29/04/2009 #12
Visitante


diego_z dijo:
bueno lo primero es que empiesas en la direccion 0xb0 y por lo menos a mi no me lo simula si en 0x00
segundo detalle no apagas todo el puerto b antes de empezar con el programa principal y tercero a esta rutina
Código:
Loop2      clrwdt         ;Refresca el WDT timer 
                btfsc   PORTC,1      ;RC1 = 1 ? 
               goto   RC1_es_1   ;Si 
      bcf   PORTB,2      ;No, desconecta RB2 
      bsf   PORTB,3      ;Conecta RB3 
      goto   Loop2      ;Buble sin fin
nunca llega el programa no pasa por no llamarla en ningun momento distinto seria si en loop haces un call a loop2


pdta no me estas cargando no?
Primero de todo, gracias por atenderme. Ire por partes:
bueno lo primero es que empiesas en la direccion 0xb0 y por lo menos a mi no me lo simula si en 0x00
Supongo que querras decir: "bueno lo primero es que empiesas en la direccion 0xb0 y por lo menos a mi no me lo simula si no esta en 0x00" solo que no entiendo que es eso de 0xb0 y 0x00

segundo detalle no apagas todo el puerto b antes de empezar con el programa principal
No se ni como apagarlo ni para que sirve apagarlo.

El tercer punto ya le consegui entender, he estado probando, mando al loop2 desde el loop, y al final de loop2 mando a loop, solo que no consigo el efecto deseado, consigo hacer una especie de compuerta and, tendre que estudiar un poco la parida que hize, te la posteo por si te guia:

Código:
;
;Control de los leds RB0 y RB1 desde el interruptor RC0. RB0 refleja el estado de RC0,
;RB1 el complemento de RC0
		
		List	p=16F870		;Tipo de procesador
		include	"P16F870.INC"	;Definiciones de registros internos

		ORG	0xB0

Inicio	        clrf 	PORTB		;Borra los latch de salida
		bsf	STATUS,RP0	;Selecciona banco 1
		clrf	TRISB		;Puerta B se configura como salida
		movlw	0xFF
		movwf	TRISC		;Puerta C se configura como entrada
		bcf	STATUS,RP0	;Selecciona banco 0

Loop		clrwdt			;Refresca el WDT timer
		btfsc	PORTC,0		;RC0 = 1 ?
		goto	RC0_es_1	;Si
		bcf	PORTB,0		;No, desconecta RB0
		bsf	PORTB,1		;Conecta RB1
		goto	Loop2		;Buble sin fin

RC0_es_1	bsf	PORTB,0		;Activa RB0
		bcf	PORTB,1		;Activa RB1
		goto	Loop		;Bucle sin fin

Loop2		clrwdt			;Refresca el WDT timer
		btfsc	PORTC,1		;RC1 = 1 ?
		goto	RC1_es_1	;Si
		bcf	PORTB,2		;No, desconecta RB2
		bsf	PORTB,3		;Conecta RB3
		goto	Loop		;Buble sin fin

RC1_es_1	bsf	PORTB,2		;Activa RB2
		bcf	PORTB,3		;Activa RB3
		goto	Loop2		;Bucle sin fin

		end			;Fin del programa fuente
pdta no me estas cargando no?
Si por cargando quieres decir entendiendo, no mucho la verdad; si te refieres a cargarlo en el pic, pues si, es la unica forma de testarlo puesto que no se emularlo.
29/04/2009 #13
Visitante


marco_chip dijo:
Gracias Hemp por contestar , pero he aqui una de mis grandes dudas: ¿porque el programa esta escrito en codigo fuente?
No soy un experto, pero diria que si no lo escribes en codigo fuente... no se en que otra cosa lo puedes escribir.

marco_chip dijo:
¿no se puede escribir en "program memory"? (en mplab) porque asi es como me enseñaron en el curso . ¿sera que es mas complicado?
Lo lamento, no se que es program memory
29/04/2009 #14
Visitante


Vegetal Digital dijo:
sobre los .err .cod no se para que estan, no son necesarios (capaz que los use el mplab por las dudas no los borres).

Ic prog usa solamente el .hex

Para que te marque con colores y todo re bonito tenes que agregar el archivo al proyecto
(Proyect->Add files to proyect y seleccionas el asm(c en mi caso :p))
Despues vas a view->proyect y en source files seleccionas el archivo
ahora te pinta todo
Al menos yo hago asi, hay que aclarar que yo uso ccs y quiza no sirva con ensamblador

Por ultimo:
un programa en C necesita ser compilado y necesito un programa aparte que ejecuta el mplab
con ensamblador no necesite nada, le di a un botoncito que decia make y me iso el .hex

Espero que te sirva...
En proyect->add files no me sale "highligth" (remarcado) no puedo selecionarlo, y no encuentro view->proyect.
:(
29/04/2009 #15

Avatar de Meta

Re: Programar PICs y usar MPLAB desde 0
Hemp dijo:
Bueno, reslta que he olvidado TODO lo que aprendi sobre programacion de pics, y resulta frustrante puesto que llege a hacer casi un game of life en 1D, hace algun tiempo cambie de SO y ayer me baje el MPLAB a ver si el WINe me lo movia, al final con buenos resultados, sin embargo y por desgracia me di cuenta que ya no tenia ni puta idea de usar el mplab.

En concreto neceesito saber su funcionamiento basico, por ejemplo, yo escribo codigo, y ¿a que boton le doy despues? ¿en que formatos me compila? ¿que formatos necesito? ¿me saca directamente un HEX?

Si, ya se que resulta un poco dificil asumir que olvide todo esto, pero es cierto!, me da que segui alguna guia que me decia que hacer sin explicar el porque y de ahi que se me olvide (siempre me preocupo de saber el porque de las cosas).

Tengo mil dudas mas, pero creo que estas son las primeras que he de despejar, tengo un codigo con el puedo ir probando sin miedo a que este mal compilado.

Echadme una mano porfa.
Estoy aprendiendo con el libro http://www.pic16f84a.org/

Es lo mejor para empezar y hacer maravillas.

http://www.ra-ma.es/libros/MICROCONT...-84-7897-917-2



Prueba de ellos en:
http://www.youtube.com/metaconta

Saludo.
29/04/2009 #16


Re: Programar PICs y usar MPLAB desde 0
Meta dijo:
Estoy aprendiendo con el libro http://www.pic16f84a.org/

Es lo mejor para empezar y hacer maravillas.


Saludo.
si el libro es muy bueno , pero tiene la contra que te da todo echo y si sos comodo no te da la posibilidad de aprender todos los recursos del pic , ya que en las librerias esta todo echo ,
29/04/2009 #17

Avatar de Meta

Lo que te da todo hecho es para aprender de él. Si eres cómodo y no lo haces tu, el problema eres tu, no el libro.
29/04/2009 #18


Hemp dijo:
Supongo que querras decir: "bueno lo primero es que empiesas en la direccion 0xb0 y por lo menos a mi no me lo simula si no esta en 0x00" solo que no entiendo que es eso de 0xb0 y 0x00
imaginate esto , te mandan a hacer compras , primero a la ferreteria de pedro a comprar un tornillo que esta en la direccion 0x00 despues a la de jose a buscar una tuerca para ese tornillo que esta en la direccion 0x0b si vas primero a lo jose como vas a saber que tuerca comprar , algo parecido ocurre aca , primer direccion de memoria asignada para escribir el codigo es la 0x00 por eso pones
Código:
org 0x00 y empiezas a escribir en caso que desees usar interrupciones debes poner 
org 0x00  
goto empieza 
0x04 ; direccion de interrupciones 
codigo
codigo
codigo
empieza ; escribes tu codigo 
ya que si no harias asi solo tendrias solo 3 o 4  lineas para escribir codigo entre 0x00 y 0x04, empieza lo puedes poner en cualquier direccion
No se ni como apagarlo ni para que sirve apagarlo.
lo borras o apagas con clrf puerto , o bcf bit depende lo que necesites , debes apagarlo ya que a veces si no lo haces un bit de un determinado puerto al iniciar el micro puede quedar en alto , imagina una prensa que al encendrla empieze a bajar el bastago sin control ! seria un desastre caro
El tercer punto ya le consegui entender, he estado probando, mando al loop2 desde el loop, y al final de loop2 mando a loop, solo que no consigo el efecto deseado, consigo hacer una especie de compuerta and, tendre que estudiar un poco la parida que hize, te la posteo por si te guia:.
puedes hacerlo asi o incluir tu rutina en el programa principal por ej
Código:
;
Loop		clrwdt			;Refresca el WDT timer
		btfsc	PORTC,0		;RC0 = 1 ?
		goto	RC0_es_1	;Si
		bcf	PORTB,0		;No, desconecta RB0
		bsf	PORTB,1		;Conecta RB1
		btfsc	PORTC,1		;RC1 = 1 ?
		goto	RC1_es_1	;Si
		bcf	PORTB,2		;No, desconecta RB2
		bsf	PORTB,3		;Conecta RB3
		goto	Loop		;Buble sin fin
Si por cargando quieres decir entendiendo, no mucho la verdad; si te refieres a cargarlo en el pic, pues si, es la unica forma de testarlo puesto que no se emularlo .
lo digo por lo que dices en el primer post y me parece improbable que no te acuerdes ni como se borra un puerto jeje
hay unos videos que hizo leon elec , que me ayudaron un monton
29/04/2009 #19


Meta dijo:
Lo que te da todo hecho es para aprender de él. Si eres cómodo y no lo haces tu, el problema eres tu, no el libro.
yo dije lo contrario ?
29/04/2009 #20
Visitante


diego_z dijo:
Hemp dijo:
Supongo que querras decir: "bueno lo primero es que empiesas en la direccion 0xb0 y por lo menos a mi no me lo simula si no esta en 0x00" solo que no entiendo que es eso de 0xb0 y 0x00
imaginate esto , te mandan a hacer compras , primero a la ferreteria de pedro a comprar un tornillo que esta en la direccion 0x00 despues a la de jose a buscar una tuerca para ese tornillo que esta en la direccion 0x0b si vas primero a lo jose como vas a saber que tuerca comprar , algo parecido ocurre aca , primer direccion de memoria asignada para escribir el codigo es la 0x00 por eso pones
Código:
org 0x00 y empiezas a escribir en caso que desees usar interrupciones debes poner 
org 0x00  
goto empieza 
0x04 ; direccion de interrupciones 
codigo
codigo
codigo
empieza ; escribes tu codigo 
ya que si no harias asi solo tendrias solo 3 o 4  lineas para escribir codigo entre 0x00 y 0x04, empieza lo puedes poner en cualquier direccion
No entendi muy bien el simil, perdona.

diego_z dijo:
No se ni como apagarlo ni para que sirve apagarlo.
lo borras o apagas con clrf puerto , o bcf bit depende lo que necesites , debes apagarlo ya que a veces si no lo haces un bit de un determinado puerto al iniciar el micro puede quedar en alto , imagina una prensa que al encendrla empieze a bajar el bastago sin control ! seria un desastre caro
El tercer punto ya le consegui entender, he estado probando, mando al loop2 desde el loop, y al final de loop2 mando a loop, solo que no consigo el efecto deseado, consigo hacer una especie de compuerta and, tendre que estudiar un poco la parida que hize, te la posteo por si te guia:.
puedes hacerlo asi o incluir tu rutina en el programa principal por ej
Código:
;
Loop		clrwdt			;Refresca el WDT timer
		btfsc	PORTC,0		;RC0 = 1 ?
		goto	RC0_es_1	;Si
		bcf	PORTB,0		;No, desconecta RB0
		bsf	PORTB,1		;Conecta RB1
		btfsc	PORTC,1		;RC1 = 1 ?
		goto	RC1_es_1	;Si
		bcf	PORTB,2		;No, desconecta RB2
		bsf	PORTB,3		;Conecta RB3
		goto	Loop		;Buble sin fin
Wow, no se me ocurrio esa forma, hoy me he llevado la PDA y he estado estudiandolo en el autobus, le encontre solucion, pero mas compleja:
Código:
;
;Control de los leds RB0 y RB1 desde el interruptor RC0. RB0 refleja el estado de RC0,
;RB1 el complemento de RC0
		
		List	p=16F870		;Tipo de procesador
		include	"P16F870.INC"	;Definiciones de registros internos

		ORG	0xB0

Inicio	        clrf 	PORTB		;Borra los latch de salida
		bsf	STATUS,RP0	;Selecciona banco 1
		clrf	TRISB		;Puerta B se configura como salida
		movlw	0xFF
		movwf	TRISC		;Puerta C se configura como entrada
		bcf	STATUS,RP0	;Selecciona banco 0

Loop		clrwdt			;Refresca el WDT timer
		btfsc	PORTC,0		;RC0 = 1 ?
		goto	RC0_es_1	;Si
		bcf	PORTB,0		;No, desconecta RB0
		bsf	PORTB,1		;Conecta RB1
		goto	Loop2		;Buble sin fin

RC0_es_1	bsf	PORTB,0		;Activa RB0
		bcf	PORTB,1		;Activa RB1
		goto	Loop2		;Bucle sin fin

Loop2		clrwdt			;Refresca el WDT timer
		btfsc	PORTC,1		;RC1 = 1 ?
		goto	RC1_es_1	;Si
		bcf	PORTB,2		;No, desconecta RB2
		bsf	PORTB,3		;Conecta RB3
		goto	Loop		;Buble sin fin

RC1_es_1	bsf	PORTB,2		;Activa RB2
		bcf	PORTB,3		;Activa RB3
		goto	Loop		;Bucle sin fin

		end			;Fin del programa fuente
Sin embargo le escribi de esta forma que no me ha dejado compilar, a ver si puedes decirme porque:
Código:
	List	p=16F87
	incluide	"P16F87.INC"

	ORG	0xb0

Inicio	clrf	PORTB
		bsf	STATUS,RP0
		clrf	TRISB
		movlw	0xFF
		movwf	TRISC
		bcf	STATUS,RP0

Loop1	clrwdt
		btfsc PORTC,0
		goto SubLoop1
		bcf PORTB,0
		bsf PORTB,1
		goto Loop2

SubLoop1	bsf PORTB,0
		bcf PORTB
		goto Loop2

Loop2 clrwdt
		btfsc PORTC,1
		goto SubLoop2
		bcf PORTB,2
		bsf PORTB,3
		goto Loop1 

SubLoop2	bsf PORTB,2
		bcf PORTB,3
		goto Loop1 

		end
Ahora cuando vuelva del gimnasio probare tu metodo, aunque solo sea por aprender, el mio he comprobado que funciona. ¿que diferencia hay entre ambos, cual es mejor y porque?

diego_z dijo:
Si por cargando quieres decir entendiendo, no mucho la verdad; si te refieres a cargarlo en el pic, pues si, es la unica forma de testarlo puesto que no se emularlo .
lo digo por lo que dices en el primer post y me parece improbable que no te acuerdes ni como se borra un puerto jeje
hay unos videos que hizo leon elec , que me ayudaron un monton
Lo hize copipasteando como ahora y no funcionaba del todo. ¿me puedes pasar la url de esos videos?
¿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.