# Curso tutorial del PIC16F877



## snakewather (Abr 14, 2008)

Espero les agrade esta idea, propongo hacer un tutorial de pics basado el el 16F877 para a quellos que les interese Pueden cooperar con lo que sepan:

Espero su respuesta y Aqui Publico un articulo que Yo mismo diseñe espero les agrade para que vean que esto va en serio podemos empezar por lo basico e ir mejorando con aplicaciones a programas que realicen algo en especifico.

Nos vemos saludos desde MEXICO.


----------



## snakewather (Abr 17, 2008)

Me gustaria hacer un llamado a todos los del foro incluyendo aquellos que tienen la inquietud de aprender para que se animen a participar podemos 
ir explicando la teoria jumto con la practica.

Pronto publicare mas!


----------



## Apollo (Abr 29, 2008)

Hola snakewather:

Muchas gracias por el aporte a la comunidad .

Muchos tenemos la inquietud o la necesidad de aprender a usar este tipo de dispositivos, aunque al principio resulta confuso y/o  difícil (Hablo de mi caso en particular), pero con aportes  como estos, comienza a verse la luz al final del túnel.

Saludos al foro


----------



## Leon Elec (Abr 29, 2008)

Hola a todos. La idea me parece magnífica.

Un punto importante para aclarar es en ¿qué lenguaje se va a enseñar?, en el primer post, veo que citó las instrucciones en assembler, pero no esplica como es el lenguaje assembler.

Si aún no deciden el lenguaje, propongo que sea el CCS porque es un lenguaje de más alto nivel que el assembler y nos servirá como escalera para avanzar a la serie 18 que ya uno se ve obligado a utilizar el C para poder hacer mejor los programas. Además, cada vez mas personas utilizan este lenguaje.

Yo estoy aprendiendo este lenguaje, por lo que algo puedo aportar de apoco.


----------



## snakewather (Abr 30, 2008)

Hola a todos y gracias por su apoyo bueno Leon elec en el tutorial que hice me avoco al lenguaje enzamblador por que creo que es la base para poder aprender mas de cerca como funciona el pic y ademas es facil de aprender por eso propongo ese.

Mas sin embargo no conozco el que tu dices pero estaria bueno checarlo.

Proximamente publicare unos programas sencillos con su respectiva explicacion de las instruciones, y registros ademas creo conveniente que podamos ver la manera de que se explique tambien como simularlo en MPLAB.

Este software nos sirve para compilar nuestro programa en enzamblador ademas nos crea 
un archivo .HEX el cual utilizaremos para poder cargarlo al PIC.

pueden descaragarlo en este Link: 

http://www.microchip.com/stellent/i...E&nodeId=1406&dDocName=en019469&part=SW007002



Ademas tambien Podemos emriquecer este curso Metiendo la simulacion en proteus del programa.

por el momento eso es todo espero su apoyo


----------



## caeg (May 5, 2008)

Me parece bien la iniciativa, pero por falta de información sobre el tema hubiera preferido un pic con USB para jugar un rato con el, tambien que en vez de usar assambler que ni siquiera se con que se come hubiera preferido algo mas facil de aprender como mikrobasic, pero bueno espero que pongan buenos aportes para poder aprender sobre este pic, por cierto alguien tiene un programador que lo soporte
Saludos


----------



## snakewather (May 5, 2008)

Hola caeq estoy de acuerdo contigo de hecho es una buena idea pero empiezo por este tema con 877 ya que es muy completo y ademas si aprendes enzamblador creeme te sera facil manejar otros lenguajes, por lo pronto disculpen que no he publicado algo se esta cocinando lo que pasa que la escuela a veces puede ser muy absorvente pero empezre explicando algunos programitas que estan muy sencillos.

por lo del circuito grabador caeq no te preocupes publicare el que yo utilizo junto con el software que puede ser ic-prog o winpic800 el primero efectivo para windows98
el segundo para win98 y xp.
espero aportes y el viernes tengo ya la siguiente información.

chao!


----------



## caeg (May 5, 2008)

Le e estado echando una hojeada al documento que dejaste en word y veo el 16f877 muy interesante.
Saludos tambien desde Mexico


----------



## genofonte (May 6, 2008)

Me anoto para el curso! no, nos dejen a fuera.


----------



## Leon Elec (May 6, 2008)

snakewather dijo:
			
		

> por lo del circuito grabador caeq no te preocupes publicare el que yo utilizo junto con el software que puede ser ic-prog o winpic800 el primero efectivo para windows98
> el segundo para win98 y xp.



Aca debo decirte que estás equivocado. Actualmente yo uso el ic-prog en win xp sin problemas y no lo he probado en win vista, porque en la máquina en que tengo este SO, no tiene salida RS232.


----------



## u2okn (May 7, 2008)

Me parece muy buena la idea. Chequense tambien de repente la datasheet del microcontrolador de MicroChip. Esta muy buena e interesante y les puede servir mucho


----------



## snakewather (May 7, 2008)

yo te digo lo del ic prog por que si tu le cargas al pic por ejemplo a un 16f628 un programa que te acupe por lo menos 3/4 de la memoria del pic en XP el ic prog se traba y se te  queda trabado mientras que el winpic800 es mas aguantador.
pero en casos de que sea un programa muy grande.


----------



## burren (May 17, 2008)

hola pues un saludo y creo que es muy buena la opcion de los tutoriales en este foro y bueno creo que hay algunos puntos sueltos, como por ejemplo antes que nada se necesita un programador para iniciar por que de poco sirve tener el programa y no poder probarlo fisicamente en los que mencionan en el foro existen los mencionados ic-prog, etc. pero pensando en el futuro no muy lejano por no decir ahora el puerto mas comun en un cpu es el USB entonces trabajar en RS232 es buena opcion pero creo que lo mejor seria actualizarnos , aqui sucede algo que normalmente pasa desapercivido cual lenguaje es el que se tiene que aplicar como se a mencionado anterior mente existen variedad de compiladores (ccs, micropic, ensamblador, pic basic, etc.)bueno en mi opinion los lenguajes de alto nivel son lo ideal por que se reduce el tiempo de programacion en gran medida pero tambien pasa que el programa que hacemos no corre como lo esperamos y que ocurre que necesitamos saber los puntos finos que tiene el ensamblador para configurar detalladamente los perifiericos, entonces seria bueno tener algo fijo y echarnos la mano si ocupamos de algo de ensamblador. y en lo que consierne a la simulacion el isis esta muy bien. bueno creo que ya teniendo definido:

1) que progaramador usar (yo diria que el usb seria lo mejor)
2) el programa a usar (el ccs o c seria lo mejor creo yo para poder escalar a la familia 18y           luego a los DSP`s)
3) ejemplos en isis seria bueno


----------



## randall (May 27, 2008)

Hola amigos del foro, yo estoy comenzando con los micro y me he encontrado en internet con un libro de Universidad Pontificia de Salamanca (Madrid), en la cual hacen una detalla vista del PIC16F877, la cual me parecio demasiado buena, va desde las caracteristicas principales hasta llegar al control de motores paso a paso; este libro aun no me lo he leido pero por lo q vi se q esta muy bueno, lo q paso es q necesito saber si se puede subir aca al foro, como el libro es de una universidad y no lo compre solo lo encontre en la web, no se si puedan cerrar el foro por subirlo, espero q alguna de las personas encargadas del foro me de la autorizacion de subirlo y lo hago con mucho gusto.

Aca les dejo el contenido del libro para que vean que tan interesante es.


----------



## platanit087 (May 29, 2008)

Bueno mi primer aporte para este curso es armar tu propia tarjeta economica y facil de hacer, el pic que yo manejo es el PIC16f877A el cual tuliza la misma configuracion que para la version que se maneja en este foro, el unico problema son las velocidades que maneja este PIC, pero is hay algun problema pueden postear y aqui los ayudamos , el motivo el cual use esa version de ese pic fue que lo pueden pedir gratis hasta sus casas gg, yo aun soy estudiante de universidad y se me hiso caro un pic de $100  por eso lo pedi en la pagina de micro chip, el circuito impreso lo pueden hacer en PCWIZARD ese les recomiendo, si tienen problemas en conseguir el pic gratis pues = postean o comprenlo, les recomiendo que diseñe su propia tarjeta ya que aprenden mucho, y les dejo la conexion para hacer su PCB, tiene que dejar la salida de sus puertos, haci como la polarizacion para poder polarizacion de interfazes externas = si tienen dudas de como poner sus salidas etc posten, lo unico que hay que cambiarle a la tarjeta es el cristal, el cristal que se usa para la version normal es de 20MHZ, y el que se usa para la version A es el de 4MHZ, entonces para hcer calculos internos del pic se usa esta formula   fint=fext/4, si tiene un cristal de 20MHZ la fin=5MHZ, esto significa que su pic trabaja a una frecuencia de oscilacion interna de 5MHZ.


----------



## snakewather (Jun 2, 2008)

hola a todos disculpen que no me haya metido anteriormente es que la escuela me ha mantenido acupado aqui les dejo el esquematico que yo utilizo ya esta probado para grabar los pics con el programa WInpic800 espero ya hayan leido el tutorial.

si desean armar uno que sea para usb les recomiendo que entren a esta pagina por que este tambien sirve.

http://ingeniebrio-peru.blogspot.com/2006/07/gtp-usb-lite-final-part.html

solo bajen los esquematicos y armar se ha dicho si funciona.

el que ustedes escojan les funcionara solo que el que es por serial es mas rapido de hacer.
y lo que nos interesa es programar ya.
tambien tienen que tener el MPlab para ensamblar el programa a teclear y generar el archivo .HEX que es el que cargaremos al pic 16F877.

ojala haya mas aportes y nos vemos pronto para empezar a programar.


----------



## ortega (Jun 2, 2008)

saludos colegas, tambien me anoto al foro......... hace tiempo hice unos cursos de microcontroladores, aunque estoy un poco oxidado por falta de tiempo, pero creo k si cada uno de nosotro aportamos este foro va a tener buena calidad y eso es lo k hay k lograr............

una nota para lo k se estan iniciando en este interesante mundo y tienen poco conosimiento de electronica o cualquier razon k no kieran o puedan contruir su grabador de pic, pueden integrar el mplab al proteus, asi pueden ir simulando su circuito  y probandolo sin tener k hacer invertir $$$$$$ y pueden probar con numerosos pic y no limitarse a k no puedo hacer eso por k no puedo conseguirlo.......................

les dejo un manual para k puedan integrar el mplab en su proteus.......... se cuidan colegas hasta la proxima y espero buenos aportes para el foro.......


----------



## cancerian0 (Jul 3, 2008)

hola a todos y felicitarlos por la iniciativa bueno snakewather te entendi casi todo pero una consulta despues de grabar el pic como pruebo mi programa ya fisicamente como es la configuracion del pic se q ya detallaste los pines pero fisicamente como estarian conectados el crsital y todo eso gracias por su atensión


----------



## julio (Jul 6, 2008)

me gusta la idea de este curso ya que me 
interesa aprender sobre microcontroladores pics


----------



## carloscm (Jul 8, 2008)

Hola, alguien tendra el programa ccs compiler, del que habla, lo que pasa es que a la hora de querer abrir el puerto serial no lo abre, creo que no esta completo, espero me puedan ayudar, soy nuevo por aca, y este curso me parece muy interesante, espero existan mas avances.


----------



## jose carlos pereda rumin (Jul 11, 2008)

me parece buena la idea de este curso ya q estoy estydiando microcontroladores y me ha tocado trabajar con este  pic 16f877 y he podido ver lo completo y facil de maniobrar q es


----------



## sangreaztk (Jul 12, 2008)

Camara bros!
Este tema me ha llamado la atención y y también me ha emocionado, puesto que yo estudie este pic en la escuela, aunque solo fue ensamblador y es mi primer contacto con los PICs por lo tanto no se aun de todo lo que son capaces.
El Internet me ha ofrecido mucha información y por todo eso siento la necesidad de regresar algo a la comunidad y por eso me apunto pa contribuir en este "tuto".
Pero la neta no se desde donde comenzar, deberia de comenzar desde lo básico?, en el documento de snakeW vi que ha explicado como esta integrado el 877 la conexion del reset y del cristal y tambien explico el set de instrucciones.
Pero pues para ocupar los pics es necesario saber utilizar el sistema binario y el hexadecimal, también saber las funciones lógicas, los diferentes tipos de memoria, lo que son la pila, los registros de uso general y específicos, el acumulador, el contador de programa, las banderas.... etc, etc. Todos saben que es eso? debería de tratar de explicarlo? o deberia de comenzar un poco mas adelante?
A los iniciados en los PICs (igual para todos) les pido su opinión


----------



## sangreaztk (Jul 13, 2008)

Hola de nuevo, aquí les dejo mi primer contribución del tuto.
Pero pa que sigan este tuto es indispensable que comienzen a conseguir un PIC16F877/A, algún quemador de pics para 40 pines con su respectivo software o controlador, el MPLAB (Windows) o el PikLab (Linux), una protoboard y el respectivo material para armar los circuitos requeridos o armar una tarjeta entrenadora.

Aun no comenzare con practicas, apenas con la teoría así que tienen tiempo pa conseguir lo necesario.

Pa los que ya saben de PICs espero que corrijan mis equivocaciones.

Hasta la próxima compas.

Nota: El archivo fue hecho en OpenOffice espero que pueda ser abierto correctamente en Word.


----------



## sangreaztk (Jul 14, 2008)

Antes de seguir con el "tuto" les presento un repaso de algunas cosas que debemos de saber.


----------



## sangreaztk (Jul 15, 2008)

Pues nadie a comentado nada pero de todos modos seguiré subiendo documentos ya que me sirve de repaso.

Ahora el documento se trata del registro STATUS y repasaremos el set de instrucciones, además se ven unas cuantas cosillas más que siempre es bueno saber.
Tal vez en el siguiente documento se vea un programa de ejemplo.

Si alguien tiene dudas de lo que presento por favor notifiquenlo en este foro.

Hasta luego!


----------



## Andres Cuenca (Jul 15, 2008)

sangreaztk, gracias por tus aportes a la comunidad.

Saludos.


----------



## asherar (Jul 16, 2008)

Hola "sangreaztk": 
Veo que lo que has subido hasta ahora es para toda la familia 16X87X. 
Está bueno tener lo básico a la vista. 
Te comento que ando con el 876 pero pienso incursionar en el 877 en mi camino 
hacia algo más potente. 
Cuando entres en la parte específica del 877 seguro te seguiré más de cerca. 
Por ahora ya me suscribí a este tema.
Saludos.


----------



## sangreaztk (Jul 17, 2008)

El primer ejemplo en ensamblador, es un programa fácil pero no estoy seguro de haberlo explicado muy bien, a los que tengan dudas pues pregunten.
Después pondré más ejemplos y luego pondré como usar el MPLAB.
Hasta luego kamaradas!

Nota: Si el archivo no tiene una buena presentación notifiquenmelo puesto que estoy usando OpenOficce y a veces no hay buena compatibilidad entre formatos.


----------



## sangreaztk (Jul 19, 2008)

Hola a todos!
Un documento más con un nuevo ejemplo!
Nos vemos Kamaradas!


----------



## fragmir (Jul 19, 2008)

Hola yo copero con un sencillo codigo en mc18 de mplab para encender un led con un boton-
# include <p18f1320.h>
# include <delays.h>
# pragma config IESO=OFF, FSCM=OFF, OSC=HSPLL
# pragma config BORV=42, BOR=ON, PWRT=ON
# pragma config WDTPS=32768, WDT=OFF
# pragma config MCLRE=ON
# pragma config DEBUG=OFF
# pragma config  LVP=OFF, STVR=OFF
# pragma config CP1=OFF, CP0=OFF
# pragma config CPD=OFF, CPB=OFF
# pragma config WRT1=OFF, WRT0=OFF
# pragma config WRTD=OFF, WRTB=OFF, WRTC=OFF
# pragma config EBTR0=OFF, EBTR1=OFF
# pragma config EBTRB=OFF
# define SW1 LATAbits.LATA0
# define D1 PORTBbits.RB0
         //todas estas directivas son "fuses" del pic 18f1320, las cuales son necesarias para programar el pic.
void main(void ){

ADCON1=0b01111111;
TRISA=1;//porgramamos puerto A 1 input 0 output
LATA=0;//ponemos en 0 lógico el puerto A
TRISB=0;//puerto porgramado como salia
LATB=0;//ponemos en 0 el puerto B
INTCON2bits.RBPU=0;//Activamos resistencias de pull-up
while(1){  //bucle infinito
if(SW1==1){ //si se presiona el switch aqui se puede agregar un funcion para evitar el rebote pero 
//por ahora solo trato de definir funciones muy basicas para que vean como es este rollo.
D1=1; //prendemos el led
}

Delay10KTCYx(10);    //fucnion de delay es lo mas basico pero mas util usar interrupciones
D1=0;   //apagamos el led
}

}//este programa esta funcionando y es demasiado sencillo, espero les sirva como inicio.
espero les sirva
un saludo


----------



## carloscm (Jul 19, 2008)

Tus anexos se me hacen interesante, pero hay muchas cosas que no se entienden muy bien, por ejemplo esta linea " INTCON2bits.RBPU=0;//Activamos resistencias de pull-up "a que se refiere esto? y en el que esta en word tambien, en que lenguaje esta? o como lo explicas?


----------



## carloscm (Jul 19, 2008)

Bueno aqui les dejo un programa el cual prende todo el puerto b en ruleta, es decir que prende un led y esta va de izquierda a derecha y resgresa, espero les sirva creo que es un poco mas facil de entender, se los dejo a su consideracion

//                        CARLOS


#include <16F877.h>     // Def. el Micro a Usar
#fuses HS,NOWDT,NOPROTECT,NOLVP  // Config. de los fusibles
#use delay(clock=10000000)    // Velocidad Cristal
#int_rtcc  

void Ini_puertos()  // Procedimiendo Inicio el perifericos 
   {                                          
   output_high(PIN_B1);    // Activamos a "1" el Pin (Colocamos 5Volts ó "1"Logico)
   delay_ms(500);          // Retardo en miliSegundos    
   output_low(PIN_B1);    // Mandamos a Gnd (Cero Volts ó "0" Logico)
   delay_ms(500);        // Retardo en miliSegundos     
   output_high(PIN_B1);  // Activamos a "1" el Pin (Colocamos 5Volts ó "1"Logico)
   delay_ms(500);       // Retardo en miliSegundos    
   output_low(PIN_B1); // Mandamos a Gnd (Cero Volts ó "0" Logico)
   }

void main()                                     // Programa Principal
{
   Ini_puertos();                               // Mando a traer la funcion que inicia perifericos

   while(1)                                     // Ciclo infinito
   {        
   output_high(PIN_B0);    // Activamos a "1" el Pin (Colocamos 5Volts ó "1"Logico)                     
   delay_ms(1000);         // Retardo en miliSegundos                       
   output_low(PIN_B0);     // Mandamos a Gnd (Cero Volts ó "0" Logico)   


   output_high(PIN_B1);                        
   delay_ms(1000);                                  
   output_low(PIN_B1);                         

   output_high(PIN_B2);                        
   delay_ms(1000);                               
   output_low(PIN_B2);       

   output_high(PIN_B3);                        
   delay_ms(1000);                               
   output_low(PIN_B3);       

   output_high(PIN_B4);                        
   delay_ms(1000);                               
   output_low(PIN_B4);       

   output_high(PIN_B5);                        
   delay_ms(1000);                               
   output_low(PIN_B5);       

   output_high(PIN_B6);                        
   delay_ms(1000);                               
   output_low(PIN_B6);

   output_high(PIN_B7);                        
   delay_ms(1000);                               
   output_low(PIN_B7);

   output_high(PIN_B6);                        
   delay_ms(1000);                               
   output_low(PIN_B6);  

   output_high(PIN_B5);                        
   delay_ms(1000);                               
   output_low(PIN_B5);       

   output_high(PIN_B4);                        
   delay_ms(1000);                               
   output_low(PIN_B4);  

   output_high(PIN_B3);                        
   delay_ms(1000);                               
   output_low(PIN_B3);   

   output_high(PIN_B2);                        
   delay_ms(1000);                               
   output_low(PIN_B2);  

   output_high(PIN_B1);                        
   delay_ms(1000);                               
   output_low(PIN_B1);  
   }

}




si alguein quiere el .hex se los puedo enviar.
sigamos con las aportaciones


----------



## fragmir (Jul 20, 2008)

Ok refiriendome al codigo que yo puse, es lenguaje c que se programa con mplab con un compilador que se llama mcc 18 si no lo consigues yo te lo puedo subir al skydrive y de ahi te lo bajas. 
Respecto a las resistencias de pull-up, son resistencias que se colocan entre una señal loigca y la fuente de alimentacion, y sirven simplemente para evitar una confusion entre un uno y un cero logico, solamente que con este pic y otros mas, no es necesario colocar esas resitencias sino que ya las trae colocadas internamente. Una ventaja no?


----------



## carloscm (Jul 21, 2008)

Ok, he escuchado de mplab, pero la verdad no he trabajado con el, te agradeceria que lo subieras y me pasaras el link para ver si nos podemos familiarizar, y por lo que veo tu ya estas con uno de la familia 18f, es un gran avance, en ese tipo de micros como activo la conexion usb?
sigamos adelante con las aportaciones


----------



## fragmir (Jul 21, 2008)

Carlos no comprendo bien tu pregunta pero el dispositivo cuenta con puerto de recepcion y transmisión sincrona y asincrona, respecto a lo del usb no quisiera contestarte algo incorrecto.
Yo subiré hoy el mplab y todo eso al skydrive y seguro mañana posteo el link para todos.
Un saludo


----------



## carloscm (Jul 21, 2008)

Mi pregunta es como declaro para activar la conexion usb en la familia de los 18f, para poderse comunicar con la pc y viserversa. , por ejemplo en la familia de los 16f, es la que he ocupado y para activar la conexion serial, es <include>rs232..., pero ahora estoy empezando con los 18f y no se como activar el usb. si es mucho pedir haber si tambiensi tienes algun diagrama te lo agradeceria mucho
gracias por tu atensión


----------



## fragmir (Jul 21, 2008)

Bueno si a eso te refieres el Mcc18 tiene la libreria usart.h y sw_uart.h con una trae las definiciones de las funciones y la sw es software uart ahí vienen esas librerías, disculpa respecto al diagrama pero no he realizado programas que manejen esta característica del pic.
un saludo.


----------



## carloscm (Jul 21, 2008)

Ok, gracias, espero el link para el mplab


----------



## fragmir (Jul 21, 2008)

Sale Muchachos
Aqui esta el link del mplab y el mcc 18
Usenlo y pss ojala todos nos nutramos de estos aportes.
un saludo
http://cid-538e3dabc62b77b3.skydrive.live.com/browse.aspx/Mplab


----------



## erko (Jul 22, 2008)

Bueno, ya lei todo este hilo y me he encontrado con muchas cosas que desconocia, como por ejemplo la forma en la que ustedes crean el codigo... gracias y a leer se ha dicho.

Pasando a otras cosas y espero me puedan ayudar, hace como 2 años usaba MPLAB y PICCLITE para crear y simular codigo, para el 16F877solo que lo habia dejado un buen rato, y ahora que he dejado de usar el s.o. de las ventanas y me he instalado con el pingüino me ha vuelto ha entrar el gusanito por el tema de los microcontroladores, me he encontrado con que hay ides como piklab (ya lo he descargado, al igua que sdcc) pero no he podido configurarlo correctamente, y este es el problema, que no puedo compilar el codigo que creo, aqui les pongo un ejemplo de lo que es mi ultimo proyecto y que deje inconcluso...:


```
#include<pic.h>

/*Definición de entradas y salidas*/

#define		v1	RB0

#define		v2	RB1

#define		v3	RB2

#define		v4	RB3

#define	       paro	RD0

#define	      arranque	RD1

#define		m1	RD2

#define		m2	RD3

#define		m3	RC4

#define		m4	RC5



/*Inicio de Programa.*/



void ciclo (void);

void main (void)

{

/*Declaración de los puertos como entradas o salidas.*/

TRISD=255;TRISC=255;TRISB=0;

/*Declaración de variables.*/

v1=0;v2=0;v3=0;v4=0;

/*Inicio de secuencia.*/

while(1)

   { 

   if(arranque==0)

      {

      while(paro==1)

         {

         v1=1;

         v2=0;

         v3=0;

         v4=1;ciclo1();

         v1=1;

         v2=0;

         v3=0;

         v4=0;ciclo2();

	 v1=1;

         v2=0;

         v3=1;

         v4=0;ciclo3();

	 v1=0;

         v2=1;

         v3=1;

         v4=0;ciclo1();

	 v1=0;

         v2=0;

         v3=1;

         v4=0;ciclo2();

	 v1=1;

         v2=0;

         v3=1;

         v4=0;ciclo3();

         }

      }

   if (arramque==1)

      {

      while (paro==0)

         {

	 v1=1;

	 v2=0;

	 v3=1;

	 v4=0;

 	 }

      while (paro==1)

	 {

	 while (m1==0)

      }

   }

}

void ciclo1 (void)

{

int cont=0,cont2=0;

OPTION=8;TMR0;T0IF=0;

for (cont=0;cont<120;cont++)

	{

	for (cont2=0;cont2<255;cont2++)

		{

		if (paro==0)

			{

			cont=1250;

			cont2=64;

			}

		else

			{

			while (T0IF==0);T0IF=0;

			}

		}

	}

}

void ciclo2 (void)

{

int cont=0,cont2=0;

OPTION=8;TMR0;T0IF=0;

for (cont=0;cont<48;cont++)

	{

	for (cont2=0;cont2<255;cont2++)

		{

		if (paro==0)

			{

			cont=1250;

			cont2=64;

			}

		else

			{

			while (T0IF==0);T0IF=0;

			}

		}

	}

}

void ciclo3 (void)

{

int cont=0,cont2=0;

OPTION=8;TMR0;T0IF=0;

for (cont=0;cont<1;cont++)

	{

	for (cont2=0;cont2<255;cont2++)

		{

		if (paro==0)

			{

			cont=1250;

			cont2=64;

			}

		else

			{

			while (T0IF==0);T0IF=0;

			}

		}

	}

}
```

falta simplicficar procesos, pero debe de funcionar correctamente... bueno, si pongo ese codigo en piklab y trato de compilar con sdcc simplemente se cierra piklab, pero si pongo el siguiente codigo (un preliminar del codigo anterior):


```
#include<pic.h>

#define		v1	RB0

#define		v2	RB1

#define		v3	RB2

#define		v4	RB3

#define	       paro	RD0

#define	      arranque	RD1

void ciclo (void);

void main (void)

{

TRISD=255;TRISB=0;

v1=0;v2=0;v3=0;v4=0;

while(1)

   { 

   if(arranque==0)

      {

      while(paro==1)

         {

         v1=1;

         v2=0;

         v3=0;

         v4=1;ciclo();

         v1=1;

         v2=0;

         v3=0;

         v4=0;ciclo();

         }

      }

   }

}

void ciclo (void)

{

int cont=0,cont2=0;

OPTION=8;TMR0;T0IF=0;

for (cont=0;cont<1;cont++)

	{

	for (cont2=0;cont2<255;cont2++)

		{

		if (paro==0)

			{

			cont=1250;

			cont2=64;

			}

		else

			{

			while (T0IF==0);T0IF=0;

			}

		}

	}

}
```

 aparecen los siguientes errores:



> sdcc -mpic14 -p16f877 -V --debug -I/home/erko/Piklab/ -c Seca.c
> + "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -I"/home/erko/Piklab/" -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=270 -DSDCC_pic14 -D__pic14 -DSDCC_PROCESSOR="16f877" -I"/usr/bin/../share/sdcc/include/pic14" -I"/usr/share/sdcc/include/pic14" -I"/usr/bin/../share/sdcc/include" -I"/usr/share/sdcc/include" -I"/usr/bin/../share/sdcc/include/pic" -I"/usr/share/sdcc/include/pic"  "Seca.c"
> Seca.c:1: 16: error: pic.h: No such file or directory
> 
> ...



A que se debera esto...? por mas que busco y busco no he encontrado mucha información sobre como configurar piklab, se debera a que la forma en la que creo el codigo es diferente a como ustedes lo hacen...?

bueno, me despido y espero me puedan ayudar o guiarme y postear algunos links donde se explique como configurar piklab, que yo intento mientras con algun codigo de ejemplo que aqui an posteado y de antemano gracias por su tiempo...


----------



## fragmir (Jul 22, 2008)

hola erko , nunca he programado pics en programas que no sean mplab o proview 32 aunque este ultimo sea de atmel jaja pero por lo que yo he aprendido, ese error puede tener dos posibilidades:
1. Normalmente la librería de los pics se identifican con la matricula ejemplo: # include "pic16f877.h" en vez de # include "pic.h" y de ser este error, de ahi vienen los otros errores de  deconocimiento de variables como RB0,RB1 etc. caxay?
2. Si tu librería es correcta, entonces debes checar que las rutas de los directorios esten configurados correctamente es decir, si la ruta de tu libreria h esta en c:\compilador\h y en las opciones tienes definida la ruta c:\users\desktop\compilador\h, nunca encontrara ni  el pic.h ni todas las variables.
Espero sirva esta respuesta.
un saludo


----------



## erko (Jul 22, 2008)

primero que nada gracias por tu respuesta....

acabo de checar lo que me dices, si pongo "#include<pic16f877.h" al ultimo programa solo me aparece el siguiente error:

sdcc -mpic14 -p16f877 -V --debug -I/home/erko/Piklab/ -c Seca.c
Seca.c:67: error 20: Undefined identifier 'OPTION'
+ "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -I"/home/erko/Piklab/" -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=270 -DSDCC_pic14 -D__pic14 -DSDCC_PROCESSOR="16f877" -I"/usr/bin/../share/sdcc/include/pic14" -I"/usr/share/sdcc/include/pic14" -I"/usr/bin/../share/sdcc/include" -I"/usr/share/sdcc/include" -I"/usr/bin/../share/sdcc/include/pic" -I"/usr/share/sdcc/include/pic"  "Seca.c" 
*** Salida con estado: 1 ***

haciendo referencia a OPTION de void ciclo (void), con lo que concluyo que las rutas de los directorios estas bien dirigidas (o eso creo yo).... alguien mas sabra por que....? mientras tanto sigo intentando con otros codigos... y nuevamente gracias fragmir....


----------



## fragmir (Jul 22, 2008)

Para resolver eso debes revisar la librería del pic16f877.h  para buscar la variable option, si tu "identifier" es correcto, en la librería deberá aparecer declarado.
De no ser así deberás buscar el identificador correcto quiza es opt u options o algo así que se yo jeje pero de no ser así quiza estas omitiendo alguna librería que trae ese identificador 
salu2


----------



## sangreaztk (Ago 9, 2008)

Saludos a todos, esta vez he subido un documento acerca de la primera practica que tuve en la materia de _programación de sistemas en tiempo real_ donde se explica muy bien el uso de *MPLAB*, el documento fue escrito por el profesor David Arturo Gutiérrez Begovich al que le agradezco por todo lo que nos enseño a mis compañeros y a mi acerca de los PICs.

Hasta la próxima camaradas!!!


----------



## snakewather (Ago 28, 2008)

PASOS EN MPLAB:

Bueno colegas  aqui esta mas información para seguir con este tema, adjunto esta imagen que describe los 
pasos a seguir en el MPLAB para crear un nuevo Programa espero ya hayan hecho su grabador 
y tengan instalado el MPLab. 

ademas de como Escribir Nuevo program MPLAB:

En esta imagen describo como se abre el editor de MPlab diran algunos que esto ya es mas que 
ridiculo describir paso a paso pero creo que es conveniente ya que estoy seguro de hay nuevos 
en el tema y se preguntaran como hacerle.


----------



## snakewather (Ago 28, 2008)

esta es la otra imagen


----------



## snakewather (Ago 28, 2008)

Primeros ejemplos del TUTORIAL:

Estos son los primeros ejemplos del tutorial espero les agrade los hice con comentarios para 
su mejor comprension empiezen a checar por orden ya que asi le entenderan mejor.

1.-Un bit x PORTC_16F877
2.-Puerto_B con 16F877
3.-Un bit ON-OFF x PUERTO C 16F877

Se que a lo mejor son sencillos para algunos  pero creanme son la base del aprendizaje en PICS.


----------



## snakewather (Ago 28, 2008)

USO del Sistema Minimo:

Esta imagen les ayudara a probar el pic con los ejemplos ya vistos claro antes tienen que grabar el 
PIC con el Winpic800.


----------



## hhpp (Ago 30, 2008)

Hola soy nuevo y quisiera pedirles una ayuda con el manejo de tablas en microcontroladores PIC.

La verdad estuve unas nuevas funciones o algo parecido que no logro entendedr como trabajan.

movlw LOW(table_ram)
movlw HIGH(table_ram) 
bueno no se como trabajkan high y low. Agradeceria su ayuda 
Héctor Pita


----------



## snakewather (Sep 7, 2008)

gracias alejandro que checo la información que envie me hizo un comentario de un codigo que puse mal y ademas no entendia por que lo ponia ahi, si me equivoque en esa linea de codigo
la instruccion correcta es clrf portc y la explifcacion de esto es que antes de configurar los puertos pongo esta instruccion  para que cuando se prenda el pic y realice su tarea no aparesca en el puerto información no deseada lo que muchos llaman (bits basura)

Aqui pongo el codigo donde me equivoque para que lo chequen y ademas les señalo donde fue.

;********************Un bit ON-OFF x PUERTO C 16F877.asm*****************
;***************************SNAKEWATHER****************************

;El Programa hace que en el puerto C del pic16f877 el bit #0 este presente un intermitancia
;RC0=prende y apaga.

;ZONA DE DATOS*************************************************

List P=16F877       ;En la zona de datos especifico el pic e incluyo la libreria a utilizar 
                          ;que contiene el mapa de memoria y especificaciones de dicho PIC.

#include<p16f877.inc>

PDel0  EQU   20h   ;Estos son los registros para el retardo EQU nos dicen que equivalen 
PDel1  EQU   21h   ;a una direccion de memoria en nuestro caso 20 y 21h espacio libre 
                         ;en nuestro PIC del mapa de memoria (ver hoja de datos BANCO 0)

;ZONA DE CODIGOS (Aqui pongo las instrucciones para el pic)*****************

                         org    0x00             ;El programa comienza en la direccion 0 de la                                                     ;memoria de programa.

*clrf   PORTC* 

                         bcf   STATUS,RP1    ;Se pone a uno el bit RP1 del registro status
                         bsf   STATUS,RP0    ;Se pone a uno el bit RP0 del registro status
                                                     ;con esto se selecciona el banco 1 del pic.
                         bcf   TRISC,0          ;Se pone a cero el bit 0 del puerto C con                                                     ;esto el Bit 1 del Pto B esta configurado como                                                     ;salida.  

                         bcf   STATUS,RP0    ;Se pone a cero el bit RP0 del registro status
                         bcf   STATUS,RP1    ;Se pone a cero el bit RP1 del registro status
                                                     ;(seleccion del banco cero).


         ON            bsf    PORTC,0         ;Pone un 1 logico en el bit cero del PTo B.
                         call   RETARDO        ;brinca a la rutina retardo
                         bcf    PORTC,0        ;apaga el bit cero de Pto B
                         call    RETARDO       ;brinca a retardo
                         goto   ON               ;prendelo otravez.


----------



## PedroPotter (Sep 15, 2008)

Si, es muy fino. También hay que aprender a programar en C y montarlos en el PIC, porque a la larga nos va a solucionar muchos problemas, t sobre todo ahorrar tiempo...


----------



## asherar (Sep 16, 2008)

carloscm dijo:
			
		

> Bueno aqui les dejo un programa el cual prende todo el puerto b en ruleta, es decir que prende un led y esta va de izquierda a derecha y resgresa, espero les sirva creo que es un poco mas facil de entender, se los dejo a su consideracion
> 
> ```
> //                        CARLOS
> ...



Esta es una forma de hacer lo mismo, pero con un código _mucho más corto_. 
Dependiendo del compilador, los nombres de las variables pueden ser diferentes 
pero lo que me interesa es proponer la idea de multiplicar o dividir por 2 
para girar el bit del puerto. 

1.- Para girar el bit a izquierda:


```
void main()                                     // Programa Principal
{
   Ini_puertos();   // Mando a traer la funcion que inicia perifericos
   PORTB=1;         // Activamos a "1" el Pin (Colocamos 5Volts ó "1"Logico) 
                    // PORTB es el nombre del registro completo (8 bits)
   while(1)  // Ciclo infinito
   { 
   delay_ms(1000);    // Retardo de 1 segundo

   PORTB *= 2;          // Corre el bit a IZQUIERDA

   if(PORTB==0)  PORTB=1;   // Para el caso de desborde
   }
}
```

2.- Para girar el bit a derecha:


```
void main()                                     // Programa Principal
{
   Ini_puertos();  // Mando a traer la funcion que inicia perifericos
   PORTB=1;        // Activamos a "1" el Pin (Colocamos 5Volts ó "1"Logico)
   while(1)  // Ciclo infinito
   { 
   delay_ms(1000);    // Retardo de 1 segundo

   PORTB /= 2;            // Corre el bit a DERECHA

   if(PORTB==0)  PORTB=128;  // Para el caso de desborde
   }
}
```

Espero que les resulte útil este pequeño aporte. 

Saludos!


----------



## fidodido18 (Sep 20, 2008)

Ojala fuera visto este foro una semana antes, no saben lo que luche con este pic para un parcial! y saben porque? Estaba trabajando con un cristal de 10 MHz y tenia dos capacitores de 100 nF   No se porque me confundí y coloque esos capacitores, pero como por arte de magia cuando coloque los de 15 pF todo funciono como debia ser 

Estaba viendo el manual que esta en la primera pagina (no se si ya lo editaron) que no tiene las recomendaciones según el cristal, de los capacitores a utilizar. Seria ideal que agregaramos esos pero en grande, para que otras personas no cometan mi error..   

Bueno por ahí veo que están programando en C, pues yo también lo intenté y con otro programa llamado NIPLE pero mis profesores de microcontroladores I y II me dijeron que con estos no podrás controlar los ciclos de maquina exactos, al menos que después editaras. Bueno es algo difícil de explicar escribiendo pero por lo general trato de hacer mis códigos con mplab.

Saludos!


----------



## fidodido18 (Sep 20, 2008)

Bueno ya me presente, acá va mi primer aporte a la causa! 

Yo tengo un impreso de 5 cms x 6 cms en el cual tengo mi PIC16F877A le coloque unos pines de salida y así de esta forma utilizar los que necesito en una portoboard o en otro impreso.

Lo hice en EAGLE y esta con plano a tierra para que no se demoren media hora con la baquela dentro del ácido   dentro de la carpeta esta un pdf con el impreso, no se preocupen si ven unas lineas blancas, no se porque se ven asi, pero hagan un zoom y verán que no tiene nada.

Ojo si van a imprimir el pdf en un computador tienen que quitar una opción que tiene por defecto Adobe Reader. Cuando vayan a imprimir el pdf, HACEN LO SIGUIENTE: FILE, Print, una vez se abre la ventana buscan la opción "PAGE SCALING" abren una lista y colocan "NONE", una vez hecho esto si pueden imprimir con toda seguridad. Si no lo hacen y dejan que Adobe imprima con otra opción se va dañar todo la escala y todo va quedar mal.

PD. les coloque tambien el resto de archivos de EAGLE por si lo quiere editar.

Saludos!


----------



## snakewather (Sep 24, 2008)

hola fidodido18 que bien que te integres al equipo sobre lo que comentas del cristal que utilisaste a mi me 
funcionado con cristales de 4,10,15 y 20 MHZ ademas de los capacitores de 22 ó 30pF. 

Pero fijate que todo lo que he programado la mayoria esta en enzamblador, en C no me gusta mucho para 
aplicaciones muy sencillas y he notado que si haces un programa muy sencillo como prender y apagar leds
o algo por el estilo en C, el codigo del archivo .exe que se graba al PIC es mas grande que si lo hicieras en enzamblador por eso digo que es mejor utilizar C para aplicaciones mas extensas o laboriosas.

Y con respecto al Programa NIPLE mejor cambia ese Programa lo checque una ves y creeme para aplicaciones 
mas exigentes no sirve genera un codigo muy extenso y hace al microcontrolador lento.

Bueno eso es todo nos vemos y saludos desde mexico ¡hay me saludas a las chicas de colombia estan 
muy bien!


----------



## picrocker (Sep 26, 2008)

Muy bueno este foro, les comento que hasta ahora he programado el PIC 16F84A pero utilizando basic, utilizo un programa llamado JAL, pero les confieso que he intentado hacer ciertas cosas y no he podido, tambien he programado en C usando una herramienta llamada HI-TECH que se instala con el MPLAB y me funciona muy bien, estoy muy interesado en programar en ASM pero se me ha hecho complicado... pero estoy seguro que lo lograre...

Lo que he hecho es un robot que funciona con dos motores de paso y dos sensores opticos reflectivos y me funciona bien para seguir una línea... lo unico es que los motores son muy pequeños y no mueven el robot muy bien... pero en cuanto a programacion esta bien... me Construí un programador, el JDM que es por puerto serie y me funciona bien...


----------



## fidodido18 (Sep 26, 2008)

hola snakewather, gracias por la bienvenida, pues si vengo con ganas de aportar al foro, ahora mismo estoy haciendo un convertidor analógico digital pero este tiene la facultad de filtrar el ruido, ahora que lo termine se los muestro por si acaso a alguien le sirve.

picrocker hiciste el proyecto del robot con el 16f84a?  por ahí vi que estaban haciendo un concurso en una universidad de hacer un robot que pasara por un laberinto siguiendo una linea, y además fuera recogiendo unas latas en el camino, algo interesante si te das cuenta que ya hiciste una parte...


----------



## picrocker (Sep 26, 2008)

Se ve muy interesante... mas o menos es lo que busco hacer, estoy esperando que me llegen unos servos motores que encargue para reemplazar los steppers que utilizo para mover las ruedas y con estos steppers realizar algun mecanismo para recoger objetos...


----------



## asherar (Sep 26, 2008)

Por si todavía alguno lo anda buscando el MPLAB 8.10 se baja gratis de Microchip, 
desde aquí


----------



## opaitopepe (Oct 22, 2008)

hola amigos:
Bueno, estamos en un hilo de aprender. Cualquier aporte será estupendo
pero creo que deberia ceñirse al 16f87x.
si alguien tiene algún proyecto que quisiera desarrollar, entre todos podriamos aportar algo. 
recomiento como entorno de trabajo el PROTEUS. Y así poder seguir la evolucion antes de grabar.
saludos y que n decaiga.


----------



## Julio Cesar12 (Nov 4, 2008)

ya checaron el niple v5.2 vealo y despues me dicen creo que puede ayudar para la programacion de pic


----------



## opaitopepe (Nov 4, 2008)

hola juliocesar:
estoy bajando la demo a ver que se cuenta...
creo que es muy parecido al flowcode.
el problema que yo le veo a estos programas es que generan gran cantidad de codigo innecesario.
haré algo sencillo y veremos la diferencia.
saludos.


----------



## Julio Cesar12 (Nov 4, 2008)

la verdad si realiza mas codigos de los necesarios pero la ventaja es que mas grafico solo realizas un diagrama de flujo y el te realiza el codigo la verdad no conosco el flowcode


----------



## DMag00 (Nov 19, 2008)

Esta es mi aportación a la causa;

Epero les sirva de algo.

Es un proyecto para controlar un servomotor Futaba S3003

https://www.forosdeelectronica.com/f24/llave-electronica-pic-16f877-16637/

Saludos.

Dmag00


----------



## cristian_elect (Nov 26, 2008)

Hay un copilador en C que es el cc5x que te ofrece hasta un 30% mejor optimizacion de codigo que lo demas como el ccs, iar, hi tech.


----------



## Lithiumrd (Dic 4, 2008)

Hola espero en algun momento poder ayudar a alguno de los que por aqui pasa asi como me han ayudado a mi que estoy por presentar un parcial y lo que entendia sobre programas un 16f87x era NADA.
Los ejemplos que posteo sangreaztk son bastante didacticos y muy buenos para por lo menos empezar a entender que se esta haciendo GRACIAS!


----------



## snakewather (Dic 5, 2008)

hola Lithiumrd empieza por checar el tuto que postee ademas subi unos programas en enzamblador 
basicos y todos estan comentados ya despues podrias compararlos con los de sangre azteca y veras que no cambian mucho.


----------



## Lithiumrd (Dic 6, 2008)

gracias por el apoyo y por la idea snakewather ya hice lo que me sugieres y es gracias a eso que estoy avanzando en mi estudio para el parcial. Ambos subieron buenos tutoriales y ejemplos espero poder cooperar un poco mas adelante con algo. 

Por el momento estoy recopilando información de aqui y de alla en lo que tenga un buen resumen o la información compactada y seleccionada la subo al post


----------



## sangreaztk (Dic 6, 2008)

La información de snakewather y la que yo subí es muy similar. Lo que he subido no es para 'competir' contra lo de snakewather, simplemente es para que el lector tenga más referencias, aunque en los códigos de snakew he encontrado cosas que para mi sobran o algunas equivocaciones, por ejemplo el acumulador W se llama así por 'Work' (trabajo) y no por 'Word' (Palabra).
Ahora que ya estoy de vacaciones, seguiré con mis contribuciones.
Kamara kamaradas!
Buena Vibra!

Nota: Si han encontrado equivocaciones en lo que he subido, porfavor comuniquenmelo.


----------



## Lithiumrd (Dic 6, 2008)

Hola sigo en mi estudio y uno de los ejercicios que nos facilito el profesor nos pide escribir datos en una memoria RAM 256kx8. como podria hacer para hacer eso y disculpen la joda pero de verdad quiero salir bien, primero porque quiero pasar la materia y segundo porque me gusta y me gustaria especializarme en esa rama


----------



## snakewather (Dic 8, 2008)

con que quieres competir sangre azteca bueno te aguantas................................No te creas veo que si checaste la información eso es bueno tambien te creo con eso del registro word peperdoon work, en eso si tienes razon es que esos programas los hice a la rapida y de hecho se me fue un teclaso o teclasos bueno el chiste es que funcionan, ademas gracias por los aportes son buenos espero ahora que salga de vacaciones podamos armar un proyecto para realizarlo aqui en el foro que te parece.


----------



## snakewather (Dic 8, 2008)

hola Lithiumrd eso de la ram tienes primero que checar cual vas a usar ademas que datos vas a grabar 
con su respectiva direccion, y necesitas un programador para cargarle el programa a la memory bueno 
yo hice unas practicas en el TEC y utilizaba el romax, bueno es que no me acuerdo muy bien lo voy a checar, bueno ojala pongas mas información de lo que quieres hacer y con cual memory.


----------



## DMag00 (Dic 8, 2008)

Si; yo tambien espero por la infromación de la memoria; a mi tambien me interesa trabajar con memorias. Espero que Lithiumrd suba pronto la información.


----------



## dOlPhiN (Dic 10, 2008)

Que tal saludos a snakewather, nos ha ido muy mal en la escuela verdad? 
felicidades a todos por el trabajo realizado, este es muy buen tutorial, y snakewather ha sacrificado los estudios por dedicarse a programar, por lo que pueden confiar en sus lecciones, claro todos tenemos errores sangreaztek, tienes razon en lo de el registro W, pero a todos nos pasa.
respecto a lo de la memoria RAM, primero nesesitas especificar que tipo de memoria es , serial o paralela, si es serial, comunmente se utiliza la comunicacion i2c, o SPI, pirmero que nada debes de bajar la hoja de datos de la memoria, ahi se especifica el tipo de comunicacion, asi como los comandos nesesarios de escritura y lectura, los cuales debes de comandar por medio del pic, afortunadamente el pic16f877 cuenta con un registro que maneja estos dos protocolos, lo cual lo hacen mas facil de programar. checa en la hoja de datos del pic16f877 y en algunos ejemplos de la red busca lo referente a SPI, o i2c segun sea el protocolo de la memoria.
El manejo de estos protocolos por medio del pic son muy importantes, ya que son muy utilizados en memorias EEPROM , RAM, conversores A/D, incluso tengo un sintonizador de FM comandado por el protocolo I2C es el SP3767 y lo tienen la mayoria de los reproductores de mp3.
Saludos


----------



## sangreaztk (Dic 12, 2008)

Hey!
Saludos kamaradas!
Antes que nada, si mis comentarios anteriores sonaron como si subestimara el trabajo de snakewather la neta que esa no era mi intención, aprecio mucho el trabajo de él y de tantas personas que permiten que el conocimiento sea libre para todos nosotros, Gracias SnakeW!
Ya después de las aclaraciones y de no haber publicado nada desde hace ya bastante tiempo, acá les dejo un pequeñisimo ejemplo, creo que ya estoy perdiendo la practica ( si es que algún día la tuve, jajaja), pero espero que la explicación sea clara, sino entienden, pss preguntan.
Les adelanto que estoy preparando ya una practica un poco más compleja, pero denme chance que me distraigo muy fácilmente con otras cosas, jejeje.
Buena Vibra!


----------



## sangreaztk (Dic 12, 2008)

Jjejeje
Se me olvido responderle a SnakeWather.
Sobre lo de armar un proyecto, claro bro! estaría chido pa no estar de ocioso!
jejeje
Buena Vibra!


----------



## dOlPhiN (Dic 12, 2008)

ok sangreztk yo le entro en lo ue pueda ayudar.
Saludos a todos!


----------



## marcelo26 (Dic 12, 2008)

Hola alguien tiene algo para la lectura de la eeprom?


----------



## snakewather (Dic 12, 2008)

Hola a Todos la verdad si me fue mal en la escuela con dos materias amigos como dijo dolphin que estudia conmigo pero la verdad es que me dedique a la programacion,pero lo bueno es que no fue por estar de ocioso. Dolphin es un excelente electronico ma da gusto que alla visto el foro ojala podamos 
armar algo y sangreaztk no te preocupes por los comentarios no soy de aquellos que no aguantan
saludos y a todos.

Si alguien tiene alguna propuesta de un proyecto para la comunidad para armar publiquenla y entre todos vemos cual escoger y como hacerle que les parece.

espero respuestas y disfruten sus vacaciones y feliz navida!

jajajajajajajajajajajajajajaj....................................................jojojojojojojojojo


----------



## Lithiumrd (Dic 19, 2008)

Hola a todos heme aqui cumpliendo con lo acordado de subir la información que prometi.

En genral la información subida por snakewather y sangreaztk esta muy buena, yo solo quiero complemetar y ayudar a otros que se encuentre en la situacion en la que estuve

MI INTENCION NO ES OFENDER A NADIE NI MENOSPRECIAR TRABAJO SOLO INTERTAR PONER UN POCO DE ORDEN 
CON TODA LA INFORMACION SUBIDA

_Resumen de información_

    Los ejemplo subidos anteriormete AYUDAN mucho!

    La guias de MPLAB que dio sangreaztk esta completa para usar el programa y sus opciones de compilacion, mientras que la que subio snakewather es una guia rapida y basica para iniciar con el programa.

    El link para MPLAB que subio compañero snakewather ya no funciona lo pueden conseguir al final aqui
http://www.microchip.com/stellent/i...E&nodeId=1406&dDocName=en019469&part=SW007002

    Para ver como trabajan los retardos puden visitar los siguientes links (a mi me ayudaron aunque tienen un  error en la formula para calcular el tiempo del retardo)

http://micropic.wordpress.com/2007/02/09/retardos-por-software/
http://micropic.wordpress.com/2007/02/02/tutorial-1-led’s-segunda-parte/

    Siempre es mejor hacer primero el diagrama de flujo y luego el codigo asm  

    Tambien consegui este programita que genera el codigo necesario para hacer los retardos al final esta el link  

    Pronto tambien subire ejemplos y lo que encuentre para continuar colaborando...

Espero les ayude y no ofenda a nadie pues en ningun momento fue mi intensión solo quiero ayudar


----------



## sangreaztk (Dic 19, 2008)

Saludos Lithiumrd!

Esta chido que más gente quiera compartir el conocimiento!  muchas gracias bro!
Y yo? ya tengo el código y circuito del prox ejemplo, pero soy bien huevón (entiendase 'huevón' como flojo, sin ganas de trabajar) y no he hecho el escrito. Espero ya no distraerme tanto y hacerlo, jejeje

Buena Vibra!


EDITO:

Ajua, le eche un poco de ganas y ya termine una contribución más.
Se trata de una pequeña 'calculadora' (muy tonta pero me parece muy buen ejemplo) que realiza la suma, resta y multiplicación de dos datos.
Si tienen dudas/sugerencias/reclamaciones/correcciones/agradecimientos/loquesea ya saben que aquí pueden hacer evidencia de ello y tratare de que todo quede OK.

Kamara kamaradas, hasta la próxima!

Antes de despedirme, que hongo con ese 'proyecto'? Vamos, sugieran algo! 

Buena Vibra!


----------



## jokelnice (Dic 26, 2008)

hey que tal muchachos soy nuevo en el foro me gustaria aportar conocimientos y en cuanto a lo de proponer proyectos me gusta el tema de la comunicacion ( serie , paralelo , usb) y seria bueno algun proyecto de estos .
saludos y a la orden


----------



## Neokdevil (Dic 26, 2008)

Hola a todos!
son muy buenas sus aportaciones
pero tengo una duda
veran yo quiero usar un pic para generar una melodia, donde tenga las 88 frecuencias de un piano
pero no se como
el pic que quiero usar es el 16f877a 
cualquier ayuda se los agradeceria


----------



## Moyano Jonathan (Dic 26, 2008)

hay una librería en c de ccs que se encarga de generar tonos de frecuencia y duración programables


----------



## Neokdevil (Dic 26, 2008)

hola Moyano Jonathan!
gracias por tu respuesta
pero el problema es que yo uso mas assemble
y tengo muy pocos conocimientos de c aunque si lo he manejado
pero cual es la libreria?
ocupa mucha memoria un vez compilado el programa?


----------



## Moyano Jonathan (Dic 26, 2008)

y más o menos . la librería es la siguiente:


----------



## Neokdevil (Dic 26, 2008)

muchas gracias por la libreria
voy a ver si puedo hacer el programa 
una vez que acabe lo voy a subir
gracias


----------



## Moyano Jonathan (Dic 26, 2008)

no de nada espero que podás llevar a buen termino tu proyecto.


----------



## EinSoldiatGott (Dic 30, 2008)

Hola estoy trabajando un pic 16f877-20/P.

Ya terminé mi programa y todo funciona bien, solo quiero activar el "CODE PROTECTION".

El el pic 16f84 solo tenía que cambiar el OFF por ON como en la siguiente palabra de configuración
*__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_ON & _LVP_OFF & _DEBUG_OFF & _CPD_OFF*

Si lo compilo así, no hay errores y todo funciona bien.

Pero si le cambio a "ON" lo hago en este PIC 16f877 al compilar con el quick build me sale el siguiente error:
*--->> __CONFIG _CP_ON & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_ON & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
*
*-->> Error[113]   E:\DOCUMENTOS\PROGRAMACIóN\PIC\SENSORCOLOR\SERIE+ADC.ASM 3 : Symbol not previously defined (_CP_ON)*

Alguien sabe como escribir correctamente esa palabar de config, habilitando el Code protection?

Lo que noté es que si por ejemplo yo en al cabecera pongo que estoy usando el PIC16f877A me sale aún 1 error más:
*-->> Error[113]   E:\DOCUMENTOS\PROGRAMACIóN\PIC\SENSORCOLOR\SERIE+ADC.ASM 3 : Symbol not previously defined (_WRT_ENABLE_ON )*

Entonces pareciera que entre diferentes modelos no aceptan algunas opciones, pero acaso el PIC16f877 no acepta Protección de código?

Agardecería si alguien me pasa esa línea de la palabra de configuración, de preferencia así en texto 

Saludos y gracias


----------



## sangreaztk (Dic 30, 2008)

Por lo general para la palabra de configuración prefiero utilizar un número, por lo que no sé mucho acerca del método que utilizas, pero viendo el datasheet del chip se ve que son varias configuraciones para el 'code Protection'



> bits 12 y 13 _ CP1 y CP0: Protección de código
> 0 0 Protección desde la posición 0000h hasta 1FFFh
> 0 1 Protección desde la posición 1000h hasta 1FFFh
> 1 0 Protección desde la posición 1F00h hasta 1FFFh
> 1 1 Sin protección



Ahora viendo un segmento del archivo C:/Archivos de programa/Microchip/MPLAB IDE/Device/PIC16F877.dev



> field (key=CP mask=0x3030 desc="Code Protect")
> setting (req=0x3030 value=0x3030 desc="*Off*")
> checksum (type=0x0 protregion=0x0-0x0)
> setting (req=0x3030 value=0x2020 desc="*1F00:1FFF*")
> ...



lo que esta en negritas, creo yo que es la orden que se debe poner en la linea de configuración, no lo probé, así que si funca, pss avisas.
Buena Vibra!


----------



## EinSoldiatGott (Dic 30, 2008)

sangreaztk dijo:
			
		

> Por lo general para la palabra de configuración prefiero utilizar un número, por lo que no sé mucho acerca del método que utilizas, pero viendo el datasheet del chip se ve que son varias configuraciones para el 'code Protection'
> 
> 
> 
> ...



Hola, con núemeros si me había funcionado, solo que enviaba la configuración completa como por ejemplo 0x3FF, solo que me hubiera gustado manejarlo con palabras para así solo estar cambiando el ON por el OFF sin pensar en Hexa.
Pero gracias por la información.

Saludos y feliz Fin de Año¡¡¡¡¡


----------



## sangreaztk (Ene 1, 2009)

no intentaste con:

__CONFIG _CP_ *ALL*& _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_ON & _LVP_OFF & _DEBUG_OFF & _CPD_OFF

Buena Vibra!


----------



## EinSoldiatGott (Ene 2, 2009)

sangreaztk dijo:
			
		

> no intentaste con:
> 
> __CONFIG _CP_ *ALL*& _WDT_OFF & _BODEN_ON & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_ON & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
> 
> Buena Vibra!



Hola, gracias por respodner, pero si ya hab÷ia intentado as÷i.

Esa forma de configurar la copie alguna vez de un ejemplo y me gust÷o. 
Como que ya me acostumbr÷e a usarlo as÷i desde el pic16f84, por eso estaba intentando con este pic.

Gracias pro todo 
Saludos


----------



## Marisela (Ene 3, 2009)

Hola buen dia a todos, me he leido practicamente todo lo del foro y bueno hay un monton de cosas que a lo mejor por falta de tiempo para prestarle atensión no comprendo, pero la cuestion es esta, me dieron un tema de tesis que es un modulo de enseñanza y aprendizaje de microcontroladores y practicamente ni sabia como comenzar, ahora que leo esto pues veo que este tema que me dieron no es tan complicado cierto? (please digan que no   ) . Veo que primero crearon un circuito multiproposito que podria usar como base para hacer practicas sencillas para esta propuesta de laboratorio, lo que me hace entender que el pic 16f877 es amigable y se pueden hacer muchos proyectos con el. Ya he descargado varias cosas de aca pero Como hago para tener mas información de lo que han hecho? Les agradeceria muchiiisimo su ayuda ya que estoy bien limitada d tiempo con esto . Me parece lo maximo esto que hacen los felicito de verdad que si.. gracias y espero sus respuestas...


----------



## sangreaztk (Ene 4, 2009)

Hey Marisela!
Saludos!. Como bien lo dices, el mundo de los PICs no es complicado, solo baste entender la 'lógica' y usar tu 'imaginación' para crear cosas locas y útiles.
Disculpa lo tarde de mi respuesta.
Acerca de tu modulo de enseñanza te recomiendo que trates de conseguir algún buen texto, muchos han empezado con el PIC16F84 y un libro referente a este (no tengo a la mano la bibliografía exacta), aunque de hecho aprender un lenguaje, como el Ensamblador (Assembly), puedes aplicarlo para usar cualquier PIC (o por lo menos de la gama baja y media).
Claro está que te puedo apoyar con cualquier duda o consulta, siempre que este a mi alcance aún soy novato.
Cuentanos más acerca de lo que quieres para seguir apoyándote.
Buena Vibra!


----------



## Marisela (Ene 4, 2009)

Hola...! gracias por tu respuesta...  
   Bueno te cuento estoy haciendo como una propuesta de un laboratorio de microcontroladores para mi tecnologico, porque solo vemos ese tema en una materia y de verdad queda uno como corto de conocimiento. Para esto quiero crear como un modulo donde el alumno pueda hacer varias practicas que pueden ser estos pequeños proyectos y hasta alguno mas ambicioso no se si me explico. Por eso les pregunto que si el circuito que hicieron al principio es como multifuncional, es decir si se pueden hacer varios proyectos cambiando solo la programacion del pic.. Por fa si no me explico me dicen, y buenon me van preguntando que preguntas tienen para yo seguir explicando.

   Ah otra cosa te digo lo del 877 porque es como comun usarlo en el tecnologico aunque voy a leer las especificaciones de el 864 que me dices a ver como es... un millon de gracias !


----------



## Marisela (Ene 4, 2009)

ah disculpen la redundancia de lo de "van preguntando que preguntas" jejeje estoy como medio dormida


----------



## sangreaztk (Ene 4, 2009)

Te cuento:
Yo en mi escuela igualmente solo he llevado una materia de PICs, pero me toco un buen profe, me dio las bases y ya solo es cuestión de leer/investigar/experimentar un poco más para crear aplicaciones más interesantes. La teoria/practica que nos enseño fue muy buena, trato de traer esos apuntes aquí pero la neta que a veces soy muy flojo o me distraigo facilmente y no lo he hecho, pero un poco de presión externa , como tu, puede animarme a seguir contribuyendo.
Las practicas que hice (las que recuerdo) fueron una calculadora tonta (que fue el ultimo aporte que escribí en este tema), un contador de tres dígitos, un teclado matricial para la generación de sonidos, un termómetro digital (donde se usaron el CAD y un LCD) y por ultimo el proyecto final que fue un mostrador de mensajes en el aire.
En cada una de esas practicas se avanzó en un tema diferente acerca de los recursos del PIC, por lo que son buena idea en que las tomes en cuenta para crear tus propias practicas.
Como ya te lo mencione, cuentas con mi ayuda para lo que se te ofrezca.
Buena Vibra!

Nota: que horas son en Venezuela? aca en México van a ser las 10pm


----------



## Marisela (Ene 5, 2009)

Si es que he ido leyendo y bajando bastante información de tus guias y eso y estan super, estoy viendo como consigo un buen texto como me aconsejaste. Con respecto a lo del horario Aca eran como las 11 y algo casi las doce.

  Pero mi pregunta es, esos proyectos tu lo montabas con una misma tabla? como te explico, con un mismo circuito base? o si le agregaban algo mas, porque noto que los montajes que hiciste en tu clase tienen LCD todos..... porque podria hacer tambien un modulo o un montaje donde pueda probar varias cosas eso es lo que realmente necesitaria lograr.. si me entiendes?


----------



## sangreaztk (Ene 6, 2009)

Yo no tengo una tarjeta entrenadora, los circuitos los armo en una protoboard (tablilla de pruebas) supongo que si las conoces, no? a lo mejor la conoces con otro nombre, no sé. Esto me da más flexibilidad para saber que pines usar de entrada o salida. Aunque igual armar una tarjeta entrenadora es una buena experiencia y te ahorra algo de tiempo a veces.
En casi todos los circuitos existen similitudes como usar un cristal con sus capacitores, conectar a VCC el reset con una resistencia, para las entradas usar resistores pull-up y para las salidas si uso leds con sus respectivos resistores limitadores de corriente, etc.
Buena Vibra!


----------



## vanfanel (Ene 21, 2009)

Marisela dijo:
			
		

> Si es que he ido leyendo y bajando bastante información de tus guias y eso y estan super, estoy viendo como consigo un buen texto como me aconsejaste. Con respecto a lo del horario Aca eran como las 11 y algo casi las doce.
> 
> Pero mi pregunta es, esos proyectos tu lo montabas con una misma tabla? como te explico, con un mismo circuito base? o si le agregaban algo mas, porque noto que los montajes que hiciste en tu clase tienen LCD todos..... porque podria hacer tambien un modulo o un montaje donde pueda probar varias cosas eso es lo que realmente necesitaria lograr.. si me entiendes?




http://www.pic16f84a.org/index.php?option=com_content&view=article&id=66&Itemid=87

pues aqui hay unas practicas de un libro que venden...
en este caso, los primeros 12 capitulos los cubren con el mismo circuito, espero que te sirva


----------



## Marisela (Ene 21, 2009)

Hola vanfanel un millon de gracias de verdad esta buenisimo mas para lo que estoy haciendo... Esta muy bueno chicos revisen...


----------



## snakewather (Ene 22, 2009)

HOLA maricela mira estuve leyendo tus mensajes bueno te aconsejo que empiezes por decidirte que 
compilador quieres usar uno en lenguaje C o uno en lenguaje enzamblador para partir de eso tambien 
ver como lo vas atacar digamos por donde vamos a empezar.

mira como vi que te proporcionaron información del 16F84 yo tengo algunos archivos pronto los subire al foro
y ademas una guia de programacion en enzamblador por si te interesa bueno y sobre la placa de entrenamiento
subire una para el 16F84 si te sirve.

bueno nos vemos y porfax pon tu foto a todos nos gustaria conocer a la chica detras de esa hambre de conocimiento te aseguro que mas de un de aqui del foro te lo agradeceria ya que no se ven mujeres muy segudo por aqui.

aqui te dejo unas paginas que te pueden servir a ver si las escribo bien:

http://www.todopic.com.ar/
http://www.micropic.es/
http://ingeniebrio-peru.blogspot.com/ : esta te puede servir para armar tu propio grabador de pics por usb.
http://www.diselc.es/
www.PicManíabyRedraven.com           :aqui hay un link para ver ejemplos hechos en varios lenguajes.


----------



## Marisela (Feb 5, 2009)

hola...! un millon de gracias de verdad no seben como les agradezco tanta ayuda que hermosos jejeje... fotos...mmm... creo que las voy a deber pero si soy toda una venezolana (bella obvio jajaja) y bueno si me gusta bastate esto de los micro, el lenguaje que tengo pensado usar es el C, lo considero mas sencillo para este tipo de situaciones.. Estamos en contacto... y nuevamente gracias son lo maximo..


----------



## shingo_64 (Feb 12, 2009)

Aprovecho tambien para tratar de aclararme una duda, ¿Hay alguna forma de simplificar este codigo?. Es para guardar texto en Arrays.

MYARRAY var byte[5]

MYARRAY[0] = "H"
MYARRAY[1] = "O"
MYARRAY[2] = "L"
MYARRAY[3] = "A"
MYARRAY[4] = 0 ' Terminacion NULL

LCDOUT $FE,$D4, str MYARRAY\4

Me refiero a que en el codigo para Proton hay 2 formas:

-------------------------------- Forma 1 -----------------------------------
DIM MYARRAY[5] AS BYTE
STR MYARRAY = "HOLA" , 0 'el cero es la terminacion NULL

-------------------------------- Forma 2 -----------------------------------
DIM MYARRAY[5] AS BYTE 'sobra un byte
STR MYARRAY = "HOLA" 'solo guarda 4 bytes

Y no se si hay alguna forma de poder hacerlo en MicroCode Studio (con PicBasic Pro). Gracias.


----------



## pupo22 (Feb 16, 2009)

es muy interesante hacer parte de este curso, todo el material que puedan facilitarnos es de mucho valor para nostros los que estamos comenzando en el mundo de los pic


----------



## V. Avellaneda J (Feb 17, 2009)

Salut a todos
Soy nuevo en esto de los foros
Nescesito un pequeño programa en assembler que me permita entender los Delays para un PIC16F877
, Para un programa que los requiere.
Me Pregunto si en estos casos se llama a una sub rutina y en ella se utiliza el nop ó sí se puede hacer de otra forma
Gracias de ante mano


----------



## sangreaztk (Feb 17, 2009)

V. Avellaneda J dijo:
			
		

> Salut a todos
> Soy nuevo en esto de los foros
> Nescesito un pequeño programa en assembler que me permita entender los Delays para un PIC16F877
> , Para un programa que los requiere.
> ...



Justo ese era el siguiente tema que estaba construyendo, pero por huevón* como que ya tengo abandonado todo este pex....................... si, lo sé, soy muuuuuuuuuuy huevón!*  
Pero si mi memoria no falla en este mismo tema ya se comentó sobre eso, creo que en un ejemplo se posteó una sub de tiempo hecha con un programita de PC, y en otro comentario se anexo un link sobre subrutinas de tiempo.

Buena Vibra!

* en México la palabra 'huevón' significa flojo, sin ganas de trabajar. ese significado es el que estoy empleando.


----------



## dOlPhiN (Feb 17, 2009)

Si se le llama subrutina, normalmente la mandas llamar con un "CALL" y regresas con el "RETURN", en cuanto a tu pregunta de que si se utiliza el nop, eso depende de que retardo quieres lograr, normalmente el nop se utiliza gastar tiempo, por ejemplo, si tienes un cristal de 4Mhz, cada "nop" que hagas te va a tardar 1 microsegundo en ejecutarse, supongamos si quieres hacer un retardo de 26 microsegundos, y con una rutina de decremento de un registro (DECFSZ) solo logras 25 us entoces le agregas un NOP para completar los 26 us, en pocas palabras el NOP sirve para rellenar los retardos en el caso de que requieras un retardo muy exacto.

este es un ejemplo de un retardo de 25 us, mandas llamar la subrutina "DEMORA" con un CALL y al regresar ya tienes un retardo de 25 us, recuerda que La instruccion CALL y la instruccion RETURN tambien gastan tiempo, lo puedes checar en la hoja de datos y depende de el cristal que uses, en el ejemplo se utiliza un cristal de 4 Mhz. este retardo lo generó un programa llamado "Picdel", y te ahorra el calcular todo.


DEMORA  movlw     . 5                   ; se carga a W numero de repeticion en este caso el 5
               movwf      REGISTRO      ; luego se mueve ese 5 a "REGISTRO" 
   Loop   clrwdt                              ;  se borra el watchdog (en caso de que lo tengas activado)
               decfsz      REGISTRO, 1  ; decrementa "REGISTRO" en 1, y se brinca si el resultado es cero
               goto         Loop              ; si no es cero se regresa a "LOOP"
               return                            ; Fin.
                                                     ;Delay de 25 ciclos (incluyen  call+return)

Bueno lo del NOP seria asi en caso de que queramos 26 us, somo solo nos faltan 1 us para completarlo, pues le agregamos una instruccion que consuma 1 us y que no nos afecte en nuestro programa, las intrucciones que sirven pueden ser:  NOP, el CLRWDT, etc.  Generalmente siempre se usa el NOP, bueno el codigo quedaria asi:

DEMORA  movlw     . 5                   ; se carga a W numero de repeticion en este caso el 5
               movwf      REGISTRO      ; luego se mueve ese 5 a "REGISTRO" 
   Loop   clrwdt                              ;  se borra el watchdog (en caso de que lo tengas activado)
               decfsz      REGISTRO, 1  ; decrementa "REGISTRO" en 1, y se brinca si el resultado es cero
               goto         Loop              ; si no es cero se regresa a "LOOP"
               nop                                ; el microsegundo que nos faltaba
               return                            ; Fin.
                                                     ;Delay de 26 ciclos (incluyen  call+return)

Ten cuidado de no poner el nop dentro de un ciclo, pues si lo pones dentro entonces le sumaras  1us a por cada ciclo que hagas. por eso lo pongo despues del   "goto         Loop     " , asi cuando termina el ciclo el NOP se ejecuta una solo vez. 

Para verificar si efectivamente, obtienes el tiempo de retardo exacto, lo puedes simular en el MPLAB, con el Stopwatch, que esta en el boton Debugger, pero eso ya es otro tema.

Saludos.


----------



## V. Avellaneda J (Feb 18, 2009)

Muchas gracias por la ayuda..........
Saludes


----------



## jhozate (Mar 10, 2009)

hola a todos son nuevo en el foro, mis conocimientos son bastante limitados pero en lo q les pueda servir con gusto, como veo q estan iniciando con el 16F877, aqui les pongo una tarjeta modular para ese micro, esta cuenta con la habilitacion de todos los puertos B,C,D,E y para el puerto A esta habilitado para q se pueda utilizar con las entradas analogas y de igual forma como I/O digital, tambien dispones de  cristal de 4 y 20MHZ para seleccionar con jumper, conector para utilizar la USART, 1 led indicador de alimentacion.
Ahora de q no dispone: programacion ICSP, fuente 5V

bueno tambien tengo el mismo diseño pero con fuente incluida(5V), conversor TTL-RS232

la pcb esta hecha en ARES


----------



## jhozate (Mar 10, 2009)

bueno no se si han posteado algun manual del 877, yo tengo unos sin derechos de copia q a mi personalmente me parecieron buenisimos, utilizan el assembler, espero q les sea util
http://www.4shared.com/file/83461416/e8eb6f26/Manual_PIC16F87X.html
http://www.4shared.com/file/83461412/ef86ab3f/Curso_Basico_PIC16F877.html


----------



## Juancho ortiz (Mar 11, 2009)

Que tal a todos

Soy tecnico en Automatizacion y estoy empezando mi carrera de Tegnologia en Electroncia necesito su ayuda para comenzar a programar, ya se algo de progrmacion en Basic y lader utilizados en PLC"s pero me gustaria programar pics en Lenguaje C y no tengo el programa para practicar los tuturiales que aqui se comparten en Ares se pueden descargar algunos pero no corren al instalarlos, les agradesco su colaboracion.

Juagao


----------



## troyano42 (Mar 12, 2009)

Que tal al igual que tu no sabia nada de pic's pero contenacidad logre programarlos 
aqui te doy unos tips:
1 bajate el manual o datasheet de microcip es gratis y lo encientras en su paguina
2 busca en maixmail el manual del pic 16f877 esta bien explicado y te sibe para toda la familia 16F claro con algunas variaciones 
3en los foros encontraras muchas alpicaciones y codigos que te orientaran y talves encuentres la aplicacion que buscas 
4 te aconsejo que aprendas a programar en ensamblador y te bajes el mplab de microchip(es el que yo utilizo) que es gratis en la pagina de microchip
por ultimo si te puedo ayudar en algo no dudes en pedirlo


----------



## Juancho ortiz (Mar 13, 2009)

ok troyano42, gracias por los concejos los tendre en cuenta, se que poco a poco ire avanzando con "Tenacidad" y la 


ayuda de personas como tu.

saludos


----------



## shguerraz (Mar 17, 2009)

Saludos, estoy comenzando a estudiar el pic 16f877 y los estoy programando en c, si me pueden ayudar sobre como manejar el driver KBD.C le agradecería.


----------



## JCJC (Mar 27, 2009)

Hola a todos estoy en la busqueda de un programa para el manejo de un lcd dos lineas por 16 caracteres con el hc11 que funcione en cuatro bits, si alguien conoce alguno por favor enviemelo.

gracias.


----------



## tortugatortuga (Abr 5, 2009)

Hola a todos, me he estado leyendo las respuestas de este hilo dedicado a la programación de PIC y he conseguido información muy útil y que seguro me servirá para seguir aprendiendo sobre estos estupendos dispositivos, gracias a todos por compartir . He visto que mucha gente está interesada en programar estos dispositivos utilizando el lenguaje C a mí el compilador que más me gusta es el PCW CCS, buscando por la red encontre está página que habla sobre como programar estos dispositivos en C empezando prácticamente desde cero espero que le sea de utilidad a alguien.

aquihayapuntes.com

Saludos


----------



## snakewather (Abr 14, 2009)

Hola a todos perdonen que he andado un poco desaparecido, pero la escuela, el trabajo y la family
baya que absorven tiempo pero bueno he estado leyendo sus mensajes y veo que unos han batallado 
para bajar progranas que compilen e C para pics bueno aqui les tengo una sujerencia.

CCS PCWH V3.203 PIC C Compiler: Lo pueden bajar de esta direccion www.shared.com

solo ponen el nombre del programa y buscar, Lo que es el Proteus(diseño de circuitos)
y el CCs PCWH los consegui de ahi.

Chequenlo! nos vemos seguire intentando preparar el siguiente tema a tratar en el foro nos vemos haber si el tiempo me deja jajajajajaj.


----------



## alumno (Abr 15, 2009)

hola muchachos.... tengan un cordial saludo....me parece muy bueno lo que ud escriben y aportan...........bueno queria pedir un favor como puedo controlar un tanque de nivel de liquido que puede contener agua...
 con un pic..... y un lcd


----------



## DMag00 (Abr 22, 2009)

Muy buena la información que han compartido;
Ahora; estaba pensando porque no incluir tambien una tarjeta entrenadora para pics de esas que cuentan con LCD 16X2, teclado matricial, leds, pot para entrada analogica etc. he estado en busca de alguna sin mucha suerte; además creo que seria super que en este tutorial se compartiera un proyecto para una tarjeta entrenadora.

Espero me puedan ayudar; no la he hallado hasta ahora en esta web; no reo que sea la unica persona agradecida por su ayuda.

Gracias; felicitaciones a todos por sus aportes.


----------



## alumno (Abr 22, 2009)

DMaq00 como estas ... ps mira tengo una información en mi  PC sobre tarjeta entrenadora...... la adquiri por un profesor de la universidad sobre pic16f84 no se si te pueda servir de auyda................ como hago para hacerlas llegar a ud .... ps seria bueno que me des tu correo y yo te las envio...


----------



## solucion-electronica (Abr 22, 2009)

Hola Marisela ¿ Como va tu proyecto ? Veo que te han ayudado bastante bien pero ¿ como vas ?

Ese proyecto me parece muy interesante ,de hecho donde estudie tienen una maqueta donde realizamos todas las practicas con pic , primero lo simulamos en protheus y despues lo grabamos en la maqueta , de esta manera observamos que es real jajaja!  tienes que tener en mente que elementos externos quieres tener para tu minilaboratorio :

display , pulsadores , pantalla lcd ,motores dc , pulsadores ,leds, potenciometros , de manera que puedas trabajar la mayoria de las funciones que nos ofrece el pic.


----------



## DMag00 (Abr 22, 2009)

Hola Alumno; porque no la posteas aqui en el foro; más de alguno te agradecera la información,

Habria la posibilidad de conseguir una tarjeta para los 16F87X o 18F?


----------



## GIJAVIER (Abr 23, 2009)

Debo quitarme el sombrero ante ustedes, espero poder retribuir con mis conocimientos en el corto plazo, la ayuda que en este instante me prestan de manera tacita. Invito a cualquier otra persona a confiar en el contenido publicado por esto compañeros, ya que he tenido la oportunidad de corroborar algunas de las propuestas con bastante exito..  Suerte a todos y continuen con esta valiosa misión...
hasta la proxima.


----------



## crisaguilar (Abr 27, 2009)

bueno yo le agradezco mucho todos los aportes dados en este tutorial.

en realidad yo nunca he programado pics pero si he programado en assembler y se de hexa y binario.

me parecen muy buenos muchos aportes aunque en realidad hay unos un poco avanzados.

seria bueno que colocaran ejemplos basicos que con esos es mas facil iniciar. Aparte de que alguien indique detalladamente que programas usar he leido del mplab y otros pero quisiera saber especificamente cuales son mas comunes o con cuales me recomiendan iniciar para poder proseguir luego con otros pics mas avanzados.

por otro lado de preferencia que los programas sean gratuitos por que para iniciar no quiero pagar por los programas eso sera despues de un tiempo que ya tenga un rumbo definido y sepa cual programa vale la pena pagar.

si me pudieran explicar del sofware para hacer programas como complilar y luego convertir en hex para grabarlo en el pic

y si existe algun programa para simular el pic (ya vi uno por alli pero ando perdido no lo tengo claro) y asi poder hacer algunas pruebas sin montar el circuito ok

gracias


----------



## picrocker (Abr 28, 2009)

Con este PIC 877 puedo construirme un osciloscopio capturando los datos y enviandolos por puerto serial a la PC... Como pudiera hacer esto?


----------



## Chemontes (Abr 30, 2009)

Genial todo esto tuttorial para quienes no sabemos y para lo que si saben, me gustaria pedir apoyo si alguien tiene algun manual con el cual trabajar un pic16f690 ya que hace dos dias compre el pickit 2 y traia ese pic y la verdad que ni duermo tratando de leer todos lo manuales que trae pero como se imaginaran a cada pagina me enpeloto mas jajaja se nota que soy nuevo ?  pero con muchas ganas de aprender, asi que si alguien quiere guiar a este servidor se lo voy a agradecer mucho y asi yo poder devolver lo que aprenda a alguien mas que lo necestie  gratzie


----------



## mecabot (May 2, 2009)

hola 
yo puedo contribuir con algunos sencillos programas en asm claro con su explicacion y tambien con algunos programas en c de igual forma son progrmas muy sencillos, con esto yo estoy empezando 
espero sirva de algo


----------



## payasin (Jun 8, 2009)

hola amigos alguien me puede ayudar con un programa o explicarme porq recien estoy aprendiendo a programar en el pic16f877a el programa es trata de unsar un teclado ps2 con l pic y q las teclas se visualicen en l lcd gracias por la ayuda


----------



## cristobal0686 (Jun 9, 2009)

hola muy bueno.. pero tienes ejemplos en ccs?


----------



## andy1 (Jun 15, 2009)

hola compas soy reeenuevo en esto de los pics y me interesa ralizar progamas por ahora sencilos como encender un led .... etc  si alguen me puede colaborar  quiero realizar esto en mplab y con el pic 16f877a  ,  si por ahi hay un tutorial o algo para saber el comportamiento de las intrucciones "q hace cada una"
gracias por su colaboracion 
att: @ndres t


----------



## banistelrroy (Jun 15, 2009)

hola a todosen buena hora que encontre este post saben soy estudiante de electronica y electricidad
y se todolo basico con respecto a electronica tanto digital como analogica y tambien realize proyectos en decir varios proyectos y pero se que muchas veces te puedes ahorrar el trabajo si lo haces con pic pero no se programar pic ,,,,,,,,y quiero saber si alguien me puede ayudar a comenzar a conocer los pic si alguien me recomienda algun manualvideo ,,,,,o algo quiero llegar aprogramar pero no se pordonde comenzar haver invoco a todos para la cual espero su ayuda..........ayudenme porfavor......


----------



## Chico3001 (Jun 15, 2009)

En la primera pagina de este tema vas a encontrar muchos links con tutoriales y ejemplos para programar PICs, y puedes ir posteando las dudas que tengas en este foro....


----------



## koda (Jun 29, 2009)

Hola soy nuevo en el foro y la verdad es muy interesante todo lo relacionado con este tema 
me gustaria aprender mucho mas sobre esto .

He esta investigando por que tengo la inquitud de hacer un pantalla con leds no se si alguien me pueda proporcionar un programa para una memoria eeprom 24c256 o 24lc256 en codigo ensamblador y para el pic 16f877 se los agradeceria mucho.

------ Edit por Chico3001: -------



> 2.9 Los usuarios no pueden publicar, solicitar ni difundir información que promueva el plagio, la piratería, la divulgación de números de serie, crack o similares, o copias no autorizadas de material protegido por derechos de autor.



Tengo algo de información que subire para la comunidad saludos a todos


----------



## armentatron (Jul 4, 2009)

hola que tal, alguien podria ayudarme, estoy trabajando con el pic 16f877, es mi primera vez, habia usado solamente el 16f84, ahora con el 877 quiero grabar un mensaje de voy para despues reproducirlo, se me ocurrio que el boton para grabar el mensaje en el pic fuera con una interrupcion donde ahi escojo el ra0 para la entrada analogica y hacer la convercion pero nose no obtengo nada, aqui les anexo mi interrupcion, ojala me puedan ayudar. muchas gracias.



```
org0
goto inicio 
org4
call grabar

inicio
bsf status,rp0
movlw 0x06
movwf adcon1
movlw b'00001111'
movwf porta
movlw b'00000000'
movwf porte
movlw b'11111111'
movwf portd
movlw b'00000111'
movwf option_reg
movlw b'10010000'
movwf intcon
bcf status,rp0


bsf porta,4


lee btfsc portd,0
call borrar
bcf porte,0
btfsc portd,1
call test
bcf porta,5
goto lee

test
bsf porta,5
return


borrar
bsf porte,0
return

grabar 
call initrans
bsf status,rp0
clrf adcon1
bsf adcon1,adfm
bsf porta,0
bcf status,rp0
movlw 0x01
movwf adcon0
ciclo call delay30 ; hay que esperar 30 microsegundos
bsf porte,1
bsf adcon0,go
esperar btfsc adcon0,go_done
goto esperar  ;espera a que termine la conversion 
movf adresh,w ;carga en w el byte alto del resultado de la conversion
call enviar
bsf status, rp0
movf adresl,w ;carga en w el byte bajo del resultado de la conversion
call enviar
movlw 0x0d ;codigo de retorno 
call enviacod
movlw 0x0a
call enviacod
bcf porte,0
retfie
retfie

initrans
bcf status,rp1
bsf status,rp0 ; banco 1
bcf txsta,brgh ; pone el bit brgh = 0     VELOCIDAD BAJA
movlw 0x017 ; el valor para 9600 baudios   fosc 14.7 Mhz
movwf spbrg ; configra los 9600 baud
bcf txsta,sync ; limpia bit sync     modo asincrono 
bsf txsta,txen ; pone el bit txen=1    habilita transmision
bcf status,rp0
bsf rcsta,spen  ; pone el bit spen= 1   habilita puerto serie
return

enviacod
bsf status,rp0
back btfss txsta,trmt ;checa el buffer de transmision
goto back ; si esta ocupado espera
bcf status,rp0 ;banco 0
movwf txreg
return

delay30 ;con cristal de 14.7 Mhz
pausa movlw 0x23
movwf cont1
rep decfsz cont1,1
goto rep
return

enviar
movwf msnib ;pone byte en msnib
movwf lsnib ;hace una copia 
swapf msnib,1 ;intercambia nibles en lsnib
movlw 0x0f   ;mascara para limpiar el nible alto
andwf msnib,1 ;limpia parte alta de msnib
andwf lsnib,1 ;limpia parte alta de lsnib
movf msnib,w ;carga msnib en w
call enviacod ;lo envia por el puerto serie
movf lsnib,w ; carga lsnib en w
call enviacod
return

end
```
el programa principal no esta completo, no creo tener problemas por eso, solo la interrupcion no se en que error tenga, la simule en picsimulator y me marca un erro algo de stock


----------



## andy1 (Jul 9, 2009)

hola snakewather ese tutorial esta excelente .te comento soy reeenuevo  en esto de la programacion en pics, y la verdad me interesa que publiques la segunda parte   de asm , 
busque por todas la pags de este foro y no esta ,
si ya lo publicaste me podrias decir donde esta ?
gracia por tu atensión y se te agradese por el buen matrerial 

att : @nrdes t


----------



## teopter09 (Jul 16, 2009)

hola , estoy por diseñar un controlador de temperatura con pic 
y no se que pic utiliar ya que necesito uno que tenga entrada analogica si alguien me podria dcir cual es el mas indicado 
se los agradeceria


----------



## TESLA BOY (Jul 19, 2009)

Hola que tal...

Que me he topado con este post, que muy bueno chavales.....

Pero de aqui mi duda, he trabajado con pic's, especifico 16F84, padre de dios que quien no haya trabajado con este!

Bueno que mi problema circula con que me gustaria aprender a trabajar en lenguaje "C", conosco y he trabajado con ASM, pero me han comentado que es mas sencillo trabajar con "C", de ahi que si algun tio tiene un curso o tuto de como programar con "C", ostia que la pasta le doy......

Bueno agradeciendo al tio que me responda me despido......


----------



## Msanduay (Jul 21, 2009)

hola! tengo una duda, nesesito un pic q tenga un maximo de 8 bits de ancho de palabra cm el 16f84a. pero q tenga mas puertas de conexion. ya q nesesito controlar 2 motores DC, un adc0804 q recibe la señal de un sensor, ademas de 4 sensores mas q ocupan  1 pata cada uno. q pic me recomiendan?


----------



## ciro (Jul 27, 2009)

hola teopter: podes usar e l  pic16f877,  este tine el conversor A/D y tenes una bocha de patas libres, para usar comoi entrada o salidas.


----------



## andy1 (Jul 27, 2009)

hola compas como escribo un mnj en un lcd con el pic 16f877 
gracias por su colaboracion


----------



## chrisck87 (Jul 29, 2009)

Bueno, sobre como escribir un mensaje en un LCD depende del programa que estes usando para hacer tu código, te recomiendo el PIC BASIC, aqui te pongo un pequeño ejemplo para un pic 876a, no te hagas mucho lio con el tipo de pic, ya que en si el programa es el mismo.


```
'*****************************************************************
@ DEVICE PIC16F876A,WDT_OFF,PWRT_OFF,BOD_OFF,CPD_OFF,PROTECT_OFF
define osc 20 'Esto es para usar un oscilador de cristal de 20 mhz

'los siguientes "define" son para definir las patitas del LCD que utilizaras
DEFINE LCD_DREG PORTC 'el lcd se colocará en el puerto c del pic
DEFINE LCD_DBIT 0	'Datos sera con las patitas: C0-C3
DEFINE LCD_RSREG PORTC
DEFINE LCD_RSBIT 4	'Bit de registro C4
DEFINE LCD_EREG PORTC
DEFINE LCD_EBIT 5	'Bit de enable C5

ADCON1 = 6 'Puerto A como E/S digital

'escribe en el LCD el texto "Insertar LLave"
LCDOUT $FE,1,"Inserta llave"
'*****************************************************************
```

Eso seria todo, a continuación te pondre los códigos específicos para manipular el LCD con el PICBasic

$FE, 1  --> limpia el visor del LCD
$FE, 2 --> Vuelve al inicio(comienzo de la primera linea)
$FE, $0c --> apaga el cursor
$FE, $0e --> subryado del cursor activo
$FE, $0f --> parpadeo del cursor activo
$FE, $10 --> mover el cursor una posición a la izquierda
$FE, $14 --> mover el cursor una posición a la derecha
$FE, $80 --> mover el cursor al comienzo de la primera linea
$FE, $c0 --> mover el cursor al comienzo de la segunda linea
$FE, $94 --> mover el cursor al comienzo de la tercera linea
$FE, $d4 --> mover el cursor al comienzo de la cuarta linea

siempre debes anteponer el texto "lcdout" y luego el comando

ahora por ejemplo si deseas escribir el valor de una variable sería como sigue.
LCDOUT $FE,$80,"temperatura = ", dec temp

el prefijo dec indica que la variable que se imprimirá se escribirá como valor entero (1byte, 0-255); ten en cuenta que deberias haber declarado antes la variable temp de la siguiente manera:

temp var byte   '0-255 valores posibles


espero te sirva ....


----------



## andy1 (Jul 30, 2009)

compa gracias por tu colaboracion 
el problema es que realizo el codigo por mplab


----------



## snakewather (Jul 30, 2009)

HOLA  compañeros despues de un largo tiempo de ausencia he regresado ahora si que el trabajp no me ha dejado pero aqui seguimos, quiero empezar estas lineas con un muy profundo agradecimiento a todos ustedes que han valorado el tutorial,los programas he información que subi y por lo  cual hoy me doy cuenta que ha servido para alimentar el espiritu de conocimiento de aquellos que van empezando en cuyos zapatos alguna vez yo estuve.

¡¡¡¡¡¡¡Recordatorio!.......A los chavos nuevos por favor chequen bien este POST desde el principio ya que encontraran información para poder empezar desde cero con EL PIC16F877 y ASM ademas de unos cuantos en C.


he leido algunos comentarios y comenzare a responder algunos muy especificos:

1) hola Armentatron cheque tu programa del mensaje y la interrupcion que dices que no te sale, bueno me di a la tarea de compilarlo en MPLAB y me arrojo algunos errores, para corregirlos solo es cuestion de organizar como vas a estructurar tus etiquetas, instrucciones y registros, sobre la interrupcion el problema es que cuando se usa  la instruccion
CALL entonces siempre tienes que regresar de la subrutina que llamaste con un return ya que por el contrario el programa se te cicla y por causa posiblemente la interrupcion nunca se ejecuta, lo de las etiquetas, instrucciones y registros te lo explico en el documento que adjunto.

2) compañero Teopter09 para el diseño del control de temperatura podrias usar el ya famoso sensor de presicion LM35 que te entregara un voltaje equivalente a la temperatura aplicada sobre el integrado y ese voltaje lo puedes meter al ADC del pic16f877.

3) amigo argentino Msanduay creo que el PIC16F877 es mas que suficiente para el proposito de tu proyecto del motor con los sensores y el adc ya que este cuenta con los puertos A,B,C,D y E para su manipulacion, o en otro caso tambien podrias usar el 16F882 ya que cuenta tambien ADC y 3 puertos de 8 bits.

4) colega Crisaquilar bajate el MPlab un compañero de este foro en las paginas anteriores puso un Link para descargar la version 8.1 creo y ademas lee el principio de este tema para que veas el tutorial que publique y los ejemplos y diferente información que se ha subido como la información de Sangreaztk, Alejandro sherar, fidodido18 entre otros mas que han aportado excelente información.


----------



## snakewather (Jul 30, 2009)

¡Y tambien aprovecho para hacer un agradecimiento a todos aquellos que han subido información y que no importa que tan grande o pequeña sea lo importante es la intecion de compartir el conocimiento e invito a los demas a hacer lo mismo no importa si son nuevos en el tema si encuentran algo que ustedes crean conveniente compartir adelante!....


Tambien he visto que muchos tienen la inquietud de programar en C, por mi parte apenas unos meses empeze a programar en C con el PCWHD compiler y creanme se me ha facilitado, pero creo que una de las causas es que ya sabia enzamblador asi que les doy un tip en este foro hay un tema donde un chavo publico un tutorial aqui dejo el link y ademas adjunto el manual que yo he visto que se usa mas en el hambito de la programacion en C...... aqui dejo el Link

https://www.forosdeelectronica.com/f24/curso-programacion-c-microcontroladores-pic-10796/


----------



## snakewather (Jul 30, 2009)

Bueno colegas aqui les dejo la segunda parte del primer tutorial que publique espero les sirva
en el documento digo que es la ultima parte porque me gustaria hacer algo de lenguaje en C pero
a ver que pasa de todos modos si tienen alguna duda contactenme, se aceptan comentarios, aclaraciones
y ya saben hay que seguir practicando.

Saludos a Todos!

el otra vez puse una pagina de donde podian bajar el C, y otros programas pero creo que la escribi mal 
esta es www.4shared.com


----------



## snakewather (Jul 30, 2009)

en el tutorial muestro como se utiliza


----------



## snakewather (Ago 1, 2009)

Aqui les dejo el manual del Winpic800 esta modificado es que lo hice a partir de uno que baje de la pagina del autor 
y estava muy pesado para subir asi que lo resumi espero les sirva.




POn uN poco de TI y Moveras al MUNDO dame un PIC y lo hare Electronico.
                                                                                                snakewather.


----------



## dOlPhiN (Ago 3, 2009)

Que gusto verte de nuevo aqui snakewather, ya te compraste tu adaptador wireless USB?, ya tengo el CD que me pediste, pero no he tenido chance de llevartelo.

Respecto a lo que comentas tienes razon, pues el comenzar con ensamblador te facilita cuaquier otro lenguaje, ya que cual quiera es bueno, pero les recomiendo que si van a usar Basic o C, se apliquen mas por el C, y no olviden seguir practicando el ensamblador, la verdad hay que reconocer la dedicacion de snakewather la publicar este manual, y a tods que han hecho sus aportaciones.


Felicidades!


----------



## dOlPhiN (Ago 3, 2009)

A continuacion adjunto un ejemplo mmuy basio pero secillo del manejo del lcd en el pic16F877A, este programa es muy util porque lo pueden usar para enviar mensajes muy facil en sus proyectos,

Tal ves se les haga raro la parte siguiente:  

```
TEXTO      addwf	PCL
dt "dOlPhIn",0x00
```

Pero esta parte es lo mismo que trabajar con tablas con la instruccion RETLW, es decir esto sustituye a lo siguiente:


```
TEXTO    addwf	PCL,F
              retlw          "d"
              retlw          "O"
              retlw          "l"
              retlw          "P"
              retlw          "h"
              retlw          "I"
              retlw          "n"
              retlw          0x00
```

el 0x00 lo utilizo para indicarle a la subrutina que llama a la tabla "TEXTO" el final del mensaje, y que no se quede ciclado.
Si se dan cuenta es mas facil agregar dentro de las comillas el texto a enviar, por ejemplo si queremos enviar el siguiente texto "Prueba del LCD", solo ponemos los siguiente   dt "Prueba del LCD", 0x00,

Les recomiendo que cheken el manual del lcd,hay muchos en la red, de esta manera podran escribir mas facil en el display, en el codigo hay una rutina llamada "INSTRU" esta sirve para enviar instrucciones como para iniciar el LCD, configurarlo a 8 bits de datos, etc,   Tambien la pueden utilizar para brincar a una posicion determinada en el display, o brincar al segundo reglon etc.


----------



## dOlPhiN (Ago 3, 2009)

```
LIST P=PIC16F877A 
INCLUDE "P16F877A.INC"


cblock	0x20
PDel0
PDel1
TABLA
REGISTRO
endc

__CONFIG    0x3F3A

#define	LCD_EN PORTC,0				;Definciones de I/O
#define	LCD_RS PORTC,1



org     0x00
goto    INICIO
org     0x05

TEXTO		addwf	PCL,F
			dt "Hola",0x00			;Mensaje a enviar la parte de ",0x00" marca el final del mensaje asi es mas facil de neviar los msgs





INICIO	bsf		STATUS,RP0			;Declaracion de entradas y salidas
		movlw	b'00000000'			
		movwf	PORTB
		movlw	b'11111100'
		movwf	PORTC
		bcf		STATUS,RP0
		clrf	TABLA


call		LCD_INI					;Retardo para inicializar el LCD
	    	movlw	0x38			;Configuracion del LCD a datos de 8 bits, .
			call	INSTRU			;llamada a la instruccion (checar la hoja de datos del LCD para mejor entendimiento)
			movlw	0x0C			
			call	INSTRU
			movlw	0x06
			call	INSTRU
			movlw	0x02
			call	INSTRU
			bsf		LCD_RS
			bsf		LCD_EN
	
LCD			bcf		STATUS,Z
			movfw	TABLA
			incf    TABLA,F
			call	TEXTO 
			movwf	REGISTRO
			movf	REGISTRO,F
			btfsc	STATUS,Z
FIN			goto	FIN
			call 	DATO
			goto    LCD



INSTRU		bcf		LCD_RS			;Subrutina de instrucciones
			goto	ENVIO

DATO		bsf		LCD_RS			;Subrutina de envio de datos
			movfw	REGISTRO
ENVIO		bsf		LCD_EN	;E=1
			nop
			movwf	PORTB
			call	DOSMS
			bcf		LCD_EN ;E=0
			nop
			return

;..............................................................................................................................
													RETARDOS
;..............................................................................................................................	

DOSMS   	movlw   .250     
        	movwf   PDel0    
PLoop01 	clrwdt           
PDelL11 	goto 	PDelL21  
PDelL21 	goto 	PDelL31  
PDelL31  
        	decfsz  PDel0, 1  
        	goto    PLoop01   
PDelL41 	goto 	PDelL51   
PDelL51 	clrwdt            
        	return            
                 
		

LCD_INI   	movlw     .255     
        	movwf     PDel0     
PLoop1  	movlw     .253     
        	movwf     PDel1     
PLoop2  	clrwdt              
        	clrwdt              
        	decfsz    PDel1, 1  
        	goto      PLoop2    
        	decfsz    PDel0,  1 
        	goto      PLoop1    
PDelL1  	goto 	  PDelL2        
PDelL2  
        	return        

			end
```


----------



## gervit (Sep 8, 2009)

Estoy tratando de pasar un programa en esembler a hex, pero no se que significan todo estos errores.
Necesito que alguien me aclare el significado de estos errores.
Estoy usando mplab.
Gracias.
Estos son algunos de los mensajes de error

Error[115]   C:\DMX_MPLAB.ASM 244 : Duplicate label ("PS1" or redefining symbol that cannot be redefined)
Warning[207] C:\DMX_MPLAB.ASM 245 : Found label after column 1. (PS0)
Error[113]   C:\DMX_MPLAB.ASM 245 : Symbol not previously defined (OPTION_REG.0)
Error[113]   C:\DMX_MPLAB.ASM 247 : Symbol not previously defined (PIE1.7)
Error[115]   C:\DMX_MPLAB.ASM 247 : Duplicate label ("PSPIE" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 248 : Symbol not previously defined (PIE1.6)
Error[115]   C:\DMX_MPLAB.ASM 248 : Duplicate label ("ADIE" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 249 : Symbol not previously defined (PIE1.5)
Error[115]   C:\DMX_MPLAB.ASM 249 : Duplicate label ("RCIE" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 250 : Symbol not previously defined (PIE1.4)
Error[115]   C:\DMX_MPLAB.ASM 250 : Duplicate label ("TXIE" or redefining symbol that cannot be redefined)
Warning[207] C:\DMX_MPLAB.ASM 251 : Found label after column 1. (SSPIE)
Error[113]   C:\DMX_MPLAB.ASM 251 : Symbol not previously defined (PIE1.3)
Error[115]   C:\DMX_MPLAB.ASM 251 : Duplicate label ("SSPIE" or redefining symbol that cannot be redefined)
Error[108]   C:\DMX_MPLAB.ASM 252 : Illegal character (,)
Error[115]   C:\DMX_MPLAB.ASM 252 : Duplicate label ("CCP1IE" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 253 : Symbol not previously defined (PIE1.1)
Error[115]   C:\DMX_MPLAB.ASM 253 : Duplicate label ("TMR2IE" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 254 : Symbol not previously defined (PIE1.0)
Error[113]   C:\DMX_MPLAB.ASM 256 : Symbol not previously defined (PCON.1)
Error[115]   C:\DMX_MPLAB.ASM 256 : Duplicate label ("NOT_POR" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 257 : Symbol not previously defined (PCON.0)
Error[113]   C:\DMX_MPLAB.ASM 258 : Symbol not previously defined (PCON.0)
Error[113]   C:\DMX_MPLAB.ASM 260 : Symbol not previously defined (TXSTA.7)
Error[115]   C:\DMX_MPLAB.ASM 260 : Duplicate label ("CSRC" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 261 : Symbol not previously defined (TXSTA.6)
Error[115]   C:\DMX_MPLAB.ASM 261 : Duplicate label ("TX9" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 262 : Symbol not previously defined (TXSTA.6)
Error[115]   C:\DMX_MPLAB.ASM 262 : Duplicate label ("NOT_TX8" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 263 : Symbol not previously defined (TXSTA.6)
Error[115]   C:\DMX_MPLAB.ASM 263 : Duplicate label ("TX8_9" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 264 : Symbol not previously defined (TXSTA.5)
Error[115]   C:\DMX_MPLAB.ASM 264 : Duplicate label ("TXEN" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 265 : Symbol not previously defined (TXSTA.4)
Error[115]   C:\DMX_MPLAB.ASM 265 : Duplicate label ("SYNC" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 266 : Symbol not previously defined (TXSTA.2)
Error[115]   C:\DMX_MPLAB.ASM 266 : Duplicate label ("BRGH" or redefining symbol that cannot be redefined)
Error[113]   C:\DMX_MPLAB.ASM 268 : Symbol not previously defined (TXSTA.0)
Error[113]   C:\DMX_MPLAB.ASM 269 : Symbol not previously defined (TXSTA.0)
Error[113]   C:\DMX_MPLAB.ASM 271 : Symbol not previously defined (ADCON1.7)
Error[115]   C:\DMX_MPLAB.ASM 271 : Duplicate label ("ADFM" or redefining symbol that cannot be redefined)
Error[115]   C:\DMX_MPLAB.ASM 272 : Duplicate label ("PCFG3" or redefining symbol that cannot be redefined)
Error[115]   C:\DMX_MPLAB.ASM 273 : Duplicate label ("PCFG2" or redefining symbol that cannot be redefined)
Error[108]   C:\DMX_MPLAB.ASM 274 : Illegal character (,)
Error[113]   C:\DMX_MPLAB.ASM 275 : Symbol not previously defined (ADCON1.0)
Error[113]   C:\DMX_MPLAB.ASM 306 : Symbol not previously defined (PORTA.1)
Error[113]   C:\DMX_MPLAB.ASM 307 : Symbol not previously defined (PORTA.2)
Error[113]   C:\DMX_MPLAB.ASM 308 : Symbol not previously defined (PORTA.3)
Error[113]   C:\DMX_MPLAB.ASM 309 : Symbol not previously defined (PORTA.3)
Error[113]   C:\DMX_MPLAB.ASM 310 : Symbol not previously defined (PORTA.4)
Error[113]   C:\DMX_MPLAB.ASM 311 : Symbol not previously defined (PORTA.5)
Error[113]   C:\DMX_MPLAB.ASM 314 : Symbol not previously defined (PORTB.0)
Error[113]   C:\DMX_MPLAB.ASM 315 : Symbol not previously defined (PORTB.1)
Error[113]   C:\DMX_MPLAB.ASM 319 : Symbol not previously defined (PORTB.3)
Error[113]   C:\DMX_MPLAB.ASM 320 : Symbol not previously defined (PORTB.1)
Error[113]   C:\DMX_MPLAB.ASM 326 : Symbol not previously defined (PORTB.7)
Error[113]   C:\DMX_MPLAB.ASM 329 : Symbol not previously defined (PORTC.0)
Error[113]   C:\DMX_MPLAB.ASM 330 : Symbol not previously defined (PORTC.1)
Error[113]   C:\DMX_MPLAB.ASM 331 : Symbol not previously defined (PORTC.2)
Error[113]   C:\DMX_MPLAB.ASM 332 : Symbol not previously defined (PORTC.3)
Error[113]   C:\DMX_MPLAB.ASM 333 : Symbol not previously defined (PORTC.4)
Error[113]   C:\DMX_MPLAB.ASM 343 : Symbol not previously defined (PORTD.4)
Error[113]   C:\DMX_MPLAB.ASM 344 : Symbol not previously defined (PORTD.5)
Error[113]   C:\DMX_MPLAB.ASM 345 : Symbol not previously defined (PORTD.6)
Error[113]   C:\DMX_MPLAB.ASM 346 : Symbol not previously defined (PORTD.7)
Error[113]   C:\DMX_MPLAB.ASM 349 : Symbol not previously defined (PORTE.0)
Error[113]   C:\DMX_MPLAB.ASM 350 : Symbol not previously defined (PORTE.1)
Error[113]   C:\DMX_MPLAB.ASM 397 : Symbol not previously defined (Flags.6)
Error[113]   C:\DMX_MPLAB.ASM 398 : Symbol not previously defined (Flags.7)
Error[115]   C:\DMX_MPLAB.ASM 410 : Duplicate label ("EEIF" or redefining symbol that cannot be redefined)


----------



## DOA (Sep 8, 2009)

Debes utilizar comas en vez de puntos, por ejemplo PORTE,1 en vez de PORTE.1 y verifica que estes cargando y seleccionado el pic correcto, incluye el asm. Utiliza el buscador para ver ejemplos de programacion


----------



## gervit (Sep 9, 2009)

Gracias por responder.
Mira he reemplazo el punto por la coma como me decis ahi y me sale lo siguiente:
por ejemplo de esta linea    PS1   EQU  OPTION_REG,1
me sale el siguiente error:
Error[108]   C:\DMX_MPLAB.ASM 244 : Illegal character (,)
Error[115]   C:\DMX_MPLAB.ASM 244 : Duplicate label ("PS1" or redefining symbol that cannot be redefined)
Tomo tu consejo de buscar ejemplos.

Seria interesante ya que estamos estudiando los compiladores que alguien traduzca los significados de los errores.

Gracias.


----------



## daac84 (Sep 12, 2009)

Hola a ver si alguien me puede hechar una mano

tengo que realizar una  programa que tenga estos 2 registros y las salidas esten en el puerto c se debe realizar una operacion de divicion  , pero llego a un punto que no se que hacer  ,  se que para este pic debo hacer restas (la division no la permite) pero no se como seguir la secuencia es decir si divido 8 entre 4   , ps primero  8-4  , y luego 4-4 y cuando sea 0 que me muestre el resultado en el puerto c  con unos leds conectados (ademas de eso ahi una condicion de un led ra0  que esta a continuacion)

0    0    0    0    RB3    RB2    RB1    RB0    DIVIDENDO
0    0    0    0    RB7    RB6    RB5    RB4    DIVISOR

se debe realizar diviciones según los registros,  el puerto de salida va a ser el portc , ademas si la division da como resultado un resultado valido ra0 con un led prende si el resultado es invalido apaga (si da numero -1 al realizar las restas)    


```
LIST                        
        DIVIDENDO EQU  20H        definicion de los bits                
        DIVISOR EQU 21H        
        RESP EQU 22H        

        BSF STATUS,RP0        pasamos al banco 1
        MOVLW 0FFH        ponemos a b como entradas
        MOVWF TRISB        
        CLRF TRISC        clareamos c  para ponerlo de salida
        BCF STATUS,RP0        pasamos al banco 0

LEA        MOVF PORTB,0        mueve port b   a w
        MOVWF DIVIDENDO        mueve w a dividendo
        MOVWF DIVISOR        mueve w a divisor
        SWAPF DIVISOR,1         intercambio de nibble queda en el divisor
        BCF DIVIDENDO,04        clarear dividendo
        BCF DIVIDENDO,05        clarear dividendo
        BCF DIVIDENDO,06        clarear dividendo
        BCF DIVIDENDO,07        clarear dividendo
        BCF DIVISOR,04        clarear divisor
        BCF DIVISOR,05        clarear divisor
        BCF DIVISOR,06        clarear divisor
        BCF DIVISOR,07        clarear divisor
        CLRF RESP
```

GRACIAS Y ESPERO ME PUEDAS COLABORAR O SI SABES EN DONDE PUEDO ENCONTRAR ALGO DE INFO YA QUE LO QUE HE ENCONTRADO NO ES MUY CLARO .

pdta; perdonaran pero hasta ahora estoy empezando  con los pics


----------



## DOA (Sep 12, 2009)

Observa este link:
https://www.forosdeelectronica.com/f24/realizar-division-pic-5612/


----------



## Chico3001 (Sep 13, 2009)

Tambien puedes ver la nota de aplicacion 544 de Microchip, encontrar la rutina de division, copiarla y pegarla... primeramente necesito que me confirmes si la division que quieres hacer es de 8 bits sin signo.....


----------



## federico2005 (Sep 13, 2009)

Hola 

   Como dice el título lo que quiero hacer es que 8 pulsadores se comporten como interruptores con un pic 16f84 .... un flip-flop 

Recien estoy empezando a meterme en el mundo de los microcontroladores y me gustaría que me pasen algún programa que funcione y que haga dicha funcion, si está comentado mejor .... leí varios manuales, inclusive los de los microcontroladores de motorola, en la facultad vi algo de microcontroladores, pero no me quedo para nada claro y mi intención es aprender un poco más para implementar este tipo de circuitos.

                  Desde ya muchas gracias !


----------



## David Mentesana (Sep 13, 2009)

hola a todos
quería felicitarlos por el tema, yo comenze hace una semana a programar con el PIC16f877 es mi primer experiencia con PICs y me parece un buen microcontrolador con un buen numero de puertos y lo hacen ideal para el manejo de varios componentes: LCDs, leds, puertos: todo en conjunto. 
aun no he conseguido el PIC fisicamente, sin embargo ya he concluido varios proyectos en el MPLAB y funcionan perfectamente, la depuraciones y simulaciones se pueden hacer con el PICSimulator IDE muy buena opción o el Proteus ...

quisiera saber como puedo conseguir dicho PIC y si se puede desde Argentina a través de Microchip y detalles 

Gracias


----------



## Chico3001 (Sep 13, 2009)

En esta tabla http://witronica.com/tabla_proveedores hay una lista de proveedores en varias partes del mundo... puedes consultarla y modificarla si vez que le hace falta algo... 

Saludos.. .


----------



## daac84 (Sep 14, 2009)

Hola  mira la idea es con este registro realizar las divisiones es decir con 4 bits nada mas , nibble alto y el bajo  es decir lo max que se podra dividir es 15/15

0    0    0    0    RB3    RB2    RB1    RB0    DIVIDENDO
0    0    0    0    RB7    RB6    RB5    RB4    DIVISOR

Muchas gracias

pdta;en que parte de la pagina de microchip consigo la aplicacion 544


----------



## Chico3001 (Sep 14, 2009)

La nota de aplicacion la puedes bajar del sitio web de Microchip (www.microchip.com/AN544/)

No habia visto rutinas de 4/4, pero revisando en google encontre esta pagina que te puede servir para futuras referencias:

http://avtanski.net/projects/math/

De alli obtuve este codigo para una division de 4/4:


```
#include <p16F688.inc>          ; remove this if not necessary

#define PRECISION 4             ; byte size for registers

M_STOR_STATUS macro WHERE
    movf    STATUS,w
    movwf   WHERE
    endm

M_RETR_STATUS macro WHERE
    movf    WHERE,w
    movwf   STATUS
    endm

    cblock 0x20
    REG_XRECISION
    REG_YRECISION
    REG_ZRECISION
    REG_COUNTER
    REG_STATUS
    REG_T1
    REG_T2
    REG_ROT_COUNTER
    endc


M_CLR                           ; clear a register
    movwf   FSR
    movlw   PRECISION
    movwf   REG_COUNTER
M_CLR_loop
    clrf    INDF
    incf    FSR,f
    decf    REG_COUNTER,f
    btfss   STATUS,Z
    goto    M_CLR_loop
    return

M_ROL                           ; rotate a register to the left
    movwf   FSR
    M_STOR_STATUS REG_STATUS
    clrf    REG_COUNTER
M_ROL_loop
    M_RETR_STATUS REG_STATUS
    rlf     INDF,f
    M_STOR_STATUS REG_STATUS
    incf    FSR,f
    incf    REG_COUNTER,f
    movlw   PRECISION
    subwf   REG_COUNTER,w
    btfss   STATUS,Z
    goto    M_ROL_loop
    return


M_ROR                           ; rotates a register to the right
    movwf   FSR
    movlw   PRECISION-1
    addwf   FSR,f
    M_STOR_STATUS REG_STATUS
    clrf    REG_COUNTER
M_ROR_loop
    M_RETR_STATUS REG_STATUS
    rrf     INDF,f
    M_STOR_STATUS REG_STATUS
    decf    FSR,f
    incf    REG_COUNTER,f
    movlw   PRECISION
    subwf   REG_COUNTER,w
    btfss   STATUS,Z
    goto    M_ROR_loop
    return


M_CMP                           ; Z <=> X -> STATUS(C,Z)
                                ; STATUS,C set if Z => X;
                                ; STATUS,Z set if Z == X
    clrf    REG_COUNTER
M_CMP_loop
    movf    REG_COUNTER,w
    sublw   REG_Z+PRECISION-1
    movwf   FSR
    movf    INDF,w
    movwf   REG_T1
    movf    REG_COUNTER,w
    sublw   REG_X+PRECISION-1
    movwf   FSR
    movf    INDF,w
    subwf   REG_T1,f
    btfss   STATUS,Z
    return
    incf    REG_COUNTER,f
    movlw   PRECISION
    subwf   REG_COUNTER,w
    btfss   STATUS,Z
    goto    M_CMP_loop
    return


M_SUB                           ; Z - X -> Z
    clrf    REG_COUNTER
    bsf     REG_STATUS,C
M_SUB_loop
    bsf     REG_T2,C
    movlw   REG_Z
    addwf   REG_COUNTER,w
    movwf   FSR
    movf    INDF,w
    movwf   REG_T1
    movlw   REG_X
    addwf   REG_COUNTER,w
    movwf   FSR
    movf    INDF,w
    subwf   REG_T1,f
    btfss   STATUS,C
    bcf     REG_T2,C
    btfsc   REG_STATUS,C
    goto    M_SUB_no_carry
    movlw   0x01
    subwf   REG_T1,f
    btfss   STATUS,C
    bcf     REG_T2,C
M_SUB_no_carry
    movlw   REG_Z
    addwf   REG_COUNTER,w
    movwf   FSR
    movf    REG_T1,w
    movwf   INDF
    bsf     REG_STATUS,C
    btfss   REG_T2,C
    bcf     REG_STATUS,C
    incf    REG_COUNTER,f
    movlw   PRECISION
    subwf   REG_COUNTER,w
    btfss   STATUS,Z
    goto    M_SUB_loop
    btfss   REG_STATUS,C
    bcf     STATUS,C
    return


M_DIV                           ; Z / X -> Y;  remainder -> Z
    movlw   REG_Y
    call    M_CLR
    movlw   PRECISION*8
    movwf   REG_ROT_COUNTER
M_DIV_rot_loop
    btfsc   REG_X+PRECISION-1,7
    goto    M_DIV_loop
    movlw   REG_X
    bcf     STATUS,C
    call    M_ROL
    decf    REG_ROT_COUNTER,f
    btfss   STATUS,Z
    goto    M_DIV_rot_loop
    bsf     STATUS,Z
    return
M_DIV_loop
    call    M_CMP
    M_STOR_STATUS REG_T2
    movlw   REG_Y
    call    M_ROL
    M_RETR_STATUS REG_T2
    btfsc   STATUS,C
    call    M_SUB
    bcf     STATUS,Z
    bcf     STATUS,C
    movlw   REG_X
    call    M_ROR
    incf    REG_ROT_COUNTER,f
    movlw   PRECISION*8+1
    subwf   REG_ROT_COUNTER,w
    btfss   STATUS,Z
    goto    M_DIV_loop
    return    

    END
```


----------



## moisesmesa (Sep 16, 2009)

hola a todos, tengo un problemilla a la hora de compilar un  programa con el pcw ccs c, utilizo el pic16f877a, y es que no reconoce los registros especiales (ej: undefined identifier txsta, y asi con los demas),  alguien puede ayudarme? 
Soy nuevo en el tema y estoy atascado. Gracias por adelantado.


----------



## Chico3001 (Sep 17, 2009)

cual es tu programa?


----------



## moisesmesa (Sep 17, 2009)

Hola chico3001, gracias por la respuesta, te adjunto un archivo *.txt con el código del programa. Al compilarlo me da error en todos los registros especiales (TXSTA,SPBRG,SPEN,etc.) porque los declara indefinidos. La intención del programa es convertir una señal de analógico a digital (ADC) y transmitirlo por el puerto serie RS232 con el PIC 16F877A.


----------



## gervit (Sep 18, 2009)

Hola a todos, disculpen la interrupcion con el tema que se viene tratando, necesito saber  si un programa que es para 16f870 puede funcionar en un 16f876?
Gracias.


----------



## Chico3001 (Sep 18, 2009)

Moisesmesa: no soy experto pero me parece que no estas añadiendo la libreria para el micro que estas usando y por eso no reconoce los registros especiales

Gervit: si.... debe funcionar en el 876


----------



## gervit (Sep 20, 2009)

Gracias voy a probar


----------



## FLUXWORM (Sep 29, 2009)

hola a todo el foro de electronicos bueno mas que nada me gustaria saber cuale es la notacion de el option registrer para poder usar el TMR0


----------



## daac84 (Oct 6, 2009)

Hola resulta que estoy haciendo un programa que contenga varias operacioens  multiplicacion division y potenciacion , en el momento ya tengo la division y multiplicacion , el problema que tengo es que a la hora de simular en el proteus la respuesta sale intermitente me refiero a que si multiplico 2  *  4   me muestra 8 pero el led prende y apaga que sera .


```
INICIO
   
   movlw    b'00000000'
   
                          subwf    NUM1,W
   
                          btfsc    STATUS,Z   ; salta si z tiene algo si esta en 0 continua a error
   
  goto    ERR      
   
  movlw    b'00000000'
   
  subwf    NUM2,W
   
  btfsc    STATUS,Z          ; salta si z tiene algo si esta en 0 continua a error
   
  goto     ERR
   
  movf    NUM2,0                ;carga w con num2                 
   
  subwf    NUM1,W             ;   resta num1 con w (num2) y lo deja en w
   
  btfsc    STATUS,Z         ;si la resta da 0 (z=1 continua)si da algo z=0 y salta    
   
  goto    potenciacion
   
  btfsc    STATUS,C     ; se verifica que ahi acarreo entonces c=1 y sigue la instruccion 
   
  goto     divi       ;va a division
   
  goto    multiplicacion
   
  divi
   
  movf    NUM1,0  ; Se utiliza un registro TEMP para no modificar NUM1, Se copia NUM1 a W y luego se copia a TEMP
                          
  movwf  TEMP
                          
  movf    NUM2,0  ; Se copia el NUM2 a W para realizar restas sucesivas a TEMP
                           
  goto division
   
  division
  subwf   TEMP,1          ; Se resta W (NUM2) a TEMP (NUM1) y el resultado se gurada en 
  TEMP
              
  btfss   STATUS,C       ;Se verifica el Carry, si el resultado es negativo (C=0) se va a dar el resultado, Si el resultado es positivo o cero (C=1), se va a incremetar el resultado en uno
                          
  goto     RESP
                          
  incf       RESULT,1      ; incremetena la respuesta en uno y lo guarda en el registro                                                                                       
                                         RESULT
                          
   
  goto     division            ; Vuelve al inicio de la rutina dividir
   
  RESP   
   
                          movf    RESULT,0      ; Se pone el valor de la respuesta en el puerto C (salida)
                          
  movwf  PORTC
                          
  goto     INICIO           ; Se vuelve nuevamente a inicio
   
  multiplicacion
                          
  INCF NUM1,1      ;incrementa num 1 y lo guarda en num1
                          
  CLRF RESP        ;clarea resp
   
  DECRE             DECFSZ NUM1,1    ; decrementa num 1 si es 0  se salta la sig instruccion      
                          
  GOTO SUME               ; va a sume
   
                           MOVF RESULT,0               se carga w con el resultado
                          
  MOVWF PORTC              ; se mueve w=resp al puertoc
                          
  GOTO LEER                       ; se va a leer
   
  SUME               MOVF NUM2,0                   ; se carga num2 con w   
                          
  ADDWF RESULT,1                   ; se le suma a la resuslt w y se deja en restult
                          
  GOTO DECRE                               ; va a decre
  potenciación
   
   
   
  ERR
   
  END
```


----------



## daac84 (Oct 12, 2009)

Hola ya se encontro el problema tenia unos goto a donde no deberian estar , muchas gracias .

PDTA; ALGUIEN ME PODRIA COLABORAR CON UNA RUTINA PARA POTENCIA , he estado cacharreando y no me sale como lo pienso 

Gracias


----------



## rfandres (Oct 13, 2009)

Hola necesito Ayuda.... cuando empiezo a grabar el pic salta un error "de escritura en dirección 0x000000" que puede ser??? No se mas que hacer. use ic prog y winpic 800


----------



## snakewather (Oct 13, 2009)

hola en el icprog tienes que configurar en una de las pestañas el puerto que estas utilizando y la velocidad y en el winpic800 tienes que seleccionar en la pestaña de hardware el grabador que estas utilizando.


----------



## rfandres (Oct 15, 2009)

Ok gracias voy a provar


----------



## snakewather (Oct 16, 2009)

Hola a todos, hace poco estaba programando un 18F2550 y lo estaba haciendo con el winpic800 y resulta ser que me daba un error como al del compañero a la hora de caragar el hex al Pic, el problema radicaba que como hardware lo tenia configurado para usar con el JDM, esto me paso por que un dia anterior hice unas pruebas con un Pic16f877 con el Ic-prog pero despues me pase al winpic800 y lo configure con el JDM y asi lo deje.

Por esta razon aqui les dejo un pequeño pero nutrido tutorial para despejar dudas en cuanto al programa IC-prog espero les sirva.

Nota: tome tres articulos de la red que considere excelentes!


----------



## chrisferpiano (Nov 18, 2009)

randall dijo:


> Hola amigos del foro, yo estoy comenzando con los micro y me he encontrado en internet con un libro de Universidad Pontificia de Salamanca (Madrid), en la cual hacen una detalla vista del PIC16F877, la cual me parecio demasiado buena, va desde las caracteristicas principales hasta llegar al control de motores paso a paso; este libro aun no me lo he leido pero por lo q vi se q esta muy bueno, lo q paso es q necesito saber si se puede subir aca al foro, como el libro es de una universidad y no lo compre solo lo encontre en la web, no se si puedan cerrar el foro por subirlo, espero q alguna de las personas encargadas del foro me de la autorizacion de subirlo y lo hago con mucho gusto.
> 
> Aca les dejo el contenido del libro para que vean que tan interesante es.


Hola Randall, soy nuevo en el mundo de los pics y estoy desarrollando mi proyecto de tesis con el PIC16F877 me sería de mucha utilidad que me facilites el libro que comentas, si no es posible a través de esta página por favor envíamelo al mail: chrisferpiano@gmail.com, muchísimas gracias.


----------



## snakewather (Nov 23, 2009)

estaria bueno que  el compañero randall  subiera el libro para que todos lo tuvieramos
como a 4shared .


----------



## doublan2009 (Ene 4, 2010)

Gracias, me baje tu curso y voy a comenzar a leerlo, hace mucho tiempo aprox. 6 años compre el PICSTART PLUS de microchip y trajo un pic16f84a con el aprendí hacer algunos programitas, también hice algunos proyectos que incluían LDC teclados pulsadores, relex y otros. Soy aficionado a los PIC y quiero aprender más, ahora dispongo de tiempo y me gustaría que me orientaras en cuanto al camino a seguir para llegar hasta los modelos de PIC que manejan USB. es decir como decimos en mi país "Comerme las verdes primero..." Saludos y espero contar con tu ayuda...


----------



## snakewather (Ene 12, 2010)

Ok estamos en contacto bajate tambien la segunda parte


----------



## Hernan83 (Ene 14, 2010)

Tenia una prqueña duda,si a este PIC le ponemos un cristal de 20 Mhz,tenemos una ejecucion del programa de 20 Mhz/4 = 5 Mhz?


----------



## doublan2009 (Ene 14, 2010)

Hola snakewather, ya me baje la segunda parte, aun no he leído la primera pero hoy salgo de vacaciones en mi trabajo y pienso dedicarle todo el tiempo libre que tenga para la programación de los PIC, voy a comenzar desde cero ya que he olvidado muchas cosas, este foro me motivo a retomar mi pasión por los PIC.

Tengo un proyecto en mente, voy a ver como me sale: Quiero comunicar un PIC con un teléfono celular. La idea consiste en detectar con el PIC algunos eventos externos como por ejemplo un interruptor que se abre al abrir una puerta y luego enviar un mensaje de texto (SMS) notificando el evento, en este caso “Puerta Abierta”.

Primero voy a ponerme a tono con la programación, luego buscar un aparato celular que me permita esta comunicación, pienso que debería ser a través de comandos AT como lo hacen los MODEM, no se, es lo primero que se me ocurre. Tengo que investigar, si tienes algo a la mano te lo agradezco. Saludos y gracias nuevamente por tus aportes en este foro.   

Si logro hacer este proyecto lo voy a publicar con lujo de detalles para que otros puedan hacerlo. 

Ahora no se si ya alguien ha tratado este tema en este foro. Esto es lo primero que voy a investigar.


----------



## medina jr (Ene 19, 2010)

Soy novato y stoy intentando hacer el juego Pong (o palas) con el pic 16f84 reproducido por pantalla. Pues bien, el problema es saber como hacer la "inteligencia" del programa, es decir, hacia donde tiene q salir la bola rebotada, con que grados, o como sabe cuando ha golpeado la pala... etc. No se si me he explicado.

Agradezco cual*qui*er tipo de ayuda con el programa en general.


----------



## andy1 (Ene 21, 2010)

hola compas ne*c*esito sacar un m*ensaje* por un lcd usando el pic 16f877a ,,,alguien que me colabore estoy trabajando con mplab
gracias por la colaboracion


----------



## Meta (Ene 22, 2010)

medina jr dijo:


> Soy novato y stoy intentando hacer el juego Pong (o palas) con el pic 16f84 reproducido por pantalla.



He querido hacer eso, pero hay ejemplos con el tetris también sobre 16F84A, si quieres los mismos pines está el 16F88 con más memoria RAM. Sobre el 16F877A, ya no se fabrica ni se vende desde la Web de http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1002&mid=10&lang=en&pageId=74

Su sustituto actual es el 16F887.


----------



## snakewather (Ene 25, 2010)

Hola *doublan2009* sobre el proyecto que tienes en mente estaria bien lo que pretendes de hecho ya lo hice en la escuela solo que no maneje la opcion de mensajes sino los tonos DTMF del cel o tel lo hice con un 16f628 pero adelante luego te paso unos links es que ahorita no los tengo a la mano


----------



## StrySG (Ene 26, 2010)

Hola, tengo una  ¶duda acerca del uso del 16f877a aplicado hacia las pantallas Lcd, estuve haciendo un programa en el que se podia programar un temporizador y los resultados se mostraban en la LCD alfanumerica, termine el programa con el CCS, la simulacion Proteus marchaba tal y como queria.

Grabe el Pic sin problemas usando(PUT,HS) con xtal de 12 Mhz(uso el grabador pipo 2 y el software winpic800), una vez que arme el circuito sin la pantalla Lcd conctada, el programa funcionaba bien testeando los resultados con leds pero...

Por alguna razon al conectar la LCD -LMB162GDC- el pic no respondio mas, y logicamente la LCD tampoco mostraba nada, es decir El programa grabado hacia cualquier cosa..
->Me preguntaba si hay algun ajuste especial que debe hacerce a la LCD-LMB162GDC- para       que comience a funcionar aparte del ajuste del contraste no soy experto con lo de las LCD

Si alguien tuviera alguna idea que me pudiera ayudar agradeceria su respuesta.


----------



## medina jr (Ene 27, 2010)

Hola META eso dq tu tmb as intentao hacer eso me gustaria que especificases mas, y si es posible me digas todo lo que puedas o sepas, ya no te digo nada si encima tuvieras algo de código hecho y me lo pudieras pasar, porque me estoy volviendo loco. Se me esta complicando incluso sacar por pantalla algo similar a un tablero de ajedrez =(

Toda ayuda se agradece


----------



## jimenezdalynho (Feb 5, 2010)

hola soy nuevo en esto de los pic y el profe me a dejado una serie de ejercicios para ir practicando este es uno 

5.- Utilizando un PIC16F877 realice un secuenciador de 8 leds de izquierda a derecha y de derecha a izquierda por el Puerto C. Se deben ir encendiendo los leds de 2 en 2 en forma secuencial. (Mientras dos leds estén encendidos todos los demás están apagados). 
	El secuenciador a la izquierda se realiza por medio de la activación de un suiche colocado en RB0 en activo bajo y El secuenciador a  la derecha se realiza por la activación de un suiche colocado en RB1 en activo bajo.

mi duda es que quiere decir con activo bajo ?


----------



## Meta (Feb 6, 2010)

jimenezdalynho dijo:


> Hola soy nuevo en esto de los pic y el profe me a dejado una serie de ejercicios para ir practicando, este es uno:
> 
> 5.- Utilizando un PIC16F877 realicé un secuenciador de 8 leds de izquierda a derecha y de derecha a izquierda por el Puerto C. Se deben ir encendiendo los leds de 2 en 2 en forma secuencial. (Mientras dos leds estén encendidos todos los demás están apagados).
> 
> ...



Puedes sacar ejemplos del ensamblador en www.pic16f84a.org del 16F84A.


----------



## snakewather (Feb 7, 2010)

Hola *jimenezdalynho* sobre el programa que dices de corrimiento de leds de dos en dos solo activa el carry en tu programa de secuenciador de un led izq-der y veras que te saldran los dos leds que quieres se ballan encendiendo y rrecorriendo a un lado y hacia otro.


----------



## Lii (Feb 16, 2010)

Hola a todos! Estoy estudiando 2º de Ing de Telecomunicación y hace poco he empezado a trabajar con el microcontrolador 16f887. Tengo que hacer un proyecto con este micro, pero estoy más que perdida. No se me ocurre qué hacer, más que nada porque no soy capaz de saber qué es asequible para mi, y qué puede ser demasiado difícil... ¿Me pueden dar alguna idea fácil y que pueda llevar a cabo?

Tengan en cuenta que soy principiante, acabo de aprender assembler y tampoco es que lo tenga muy dominado...

Muchas Gracias!


----------



## tecnogirl (Feb 16, 2010)

Lii: Empieza con un micro mas simple como el 16F84A que esta muyyy documentado y hay muchas aplicaciones en la Internet (y aqui en el Foro). Cuando lo domines te pasas al F887 que es mas complejo... Recueda primero se aprende a gatear, luego a caminar y despues a correr. Salu2.


----------



## Lii (Feb 16, 2010)

Ojala pudiese! El problema es que es un proyecto y es obligatorio utilizar el 16f887....
Con que alguien me de algunas ideas de proyectos sencillos me sirve! No intento dominar la programación de microcontroladores de la noche a la mañana... pero me gustaría aprobar este proyecto aunque me lleve tiempo y esfuerzo... Tengo unos 3 meses para desarrollarlo


----------



## dragondgold (Feb 16, 2010)

Es algo complicado porque estas empezando con un micro algo avanzado, si te están pidiendo usar el 877 seguro quieren que uses los conversores A/D, Los módulos capturas, etc. Si es así te recomiendo un libro que me he comprado hacerca de un PIC muy similar (tiene todo lo mismo pero con menos patitas). El libro es económico y está en español se llama:
 Microcontroladores PIC - Diseño práctico de aplicaciones - Segunda parte
 Editorial MC Graw Hill

Es un libro muy bueno ya que explica muy bien y tiene ejemplos utilizando cada recurso del PIC en ASM así como los esquemáticos para realizar el proyecto. Te recomiendo que lo compres ya que es muy útil si vas a seguir con este micro, En cuestión de semanas ya lo tendrás dominado (con mucho esfuerzo).

Si no quieres comprar el libro te convendría buscar algo de info en internet, pero es mas complicado aprender así, más aún porque deberías haber empesado con el PIC 16F84.

Saludos


----------



## javichuvm (Feb 16, 2010)

Hola a todos.

Hace poco que estoy intentando meterme en la programación de pics. Estuve leyendo unos cuantos tutoriales sobre el hardware y la programación en asm. Pero tengo unas cuantas dudas. 

1- tengo algo de experiencia en programación en ensamblador con PCSPIM. Puede considerarse algo parecido?

2- Debo hacer una aplicación que, teniendo en cuenta una entrada (un numero de 2 a 9), cuente los minutos que pasan y cuando los minutos que pasaron sean igual a esos números, active una salida durante 3 ó 4 segundos(si, supongo que será bastante sencillo...). El caso es que he estado intentándolo pero no me sale. Y sobre esto tengo dos preguntas. Para hacer este programa tengo dos opciones, el PIC16F877 o el Atmel AT90S8515, cual considerais mejor? y la otra, es si sabeis de algun tutorial sobre como manejar el tiempo con el pic.

Muchas gracias por vuestra ayuda, y excelente post. Un saludo


----------



## Vlad666 (Feb 16, 2010)

hola medina jr:
De momento no he checado a detalle este programa... espero te sirva...


----------



## tecnogirl (Feb 17, 2010)

y.... puedes estudiar los muchos ejemplos para PICs que hay aqui en el Foro e Internet y lo transcribes para el PIC especifico:

"PIC 16F84A aplicaciones"

Salu2.


----------



## Chico3001 (Feb 17, 2010)

*Lii:*

Uni tu mensaje con este tema por que tienen mucho que ver... pero tambien te recomiendo que te des una vuelta por los siguientes temas que te pueden dar ideas...

https://www.forosdeelectronica.com/f24/ccs-c-programas-hechos-mplab-proyecto-completo-20784/
https://www.forosdeelectronica.com/f24/curso-programacion-c-microcontroladores-pic-10796/

Saludos...


----------



## oberol26 (Feb 17, 2010)

gracias a todos por sus valiososaportes me estan siendo de gran utilidad!!! prometo pronto dejar algo X aki!!


----------



## judaspriest (Feb 20, 2010)

gracias me va a servir mucho


----------



## ceciliapl (Feb 27, 2010)

Hola, estoy impresionada de lo que sabeis de microcontroladores. Yo la verdad sólo llevo unos meses estudiando este tema y sé bien poco.

Tengo un problema y me gustaría saber si alguien sabe que pasa:
Estoy programando un PIC16F877 con MPLAB con el programador PICSTART-Plus. Estoy probando un programa MUY sencillo que ponga una salida del micro a 1. El problema que tengo es que la salida se pone a 5V pero sólo durante unos segundos y luego se vuelve a poner a cero.

No se si el problema viene de los bits de configuracíon que los he puesto:
 -OSC HS
 -WDT Off
 -PUT Off
 -CP Off
 -BODEN On
 -LVP Enabled
 -CPD off
 -WRT_ENABLE Enabled

El programa que utilizo es tan sencillo como:

 #include <16F877.H> 

 #define _16f877

 #use delay(clock=20000000)  

 void main() {  


    do{ 
	   set_tris_b(0x00);  	

	   output_b(0xFF); 

     }while(TRUE);
}


En el circuito, por ahora, sólo he puesto:
 -patitas 11 y 32 a 5v
 -patitas 12 y 31 a 0v
 -patitas 13 y 14: el cristal de 12 MHz con dos condensadores de 15pF.


Estaría muy agradecida si me pudiesen ayudar, no sé que mas probar!

Un saludo


----------



## fox13 (Feb 27, 2010)

Buenas tardes soy nuevo en el foro necesito programar en c , un controlador pid pero no se como hacerlo ya que soy nuevo en el manejo de los pics por favor si me pueden ayudar gracias.

Es que estoy haciendo un proyecto de un regulador de voltaje y este necesita de una señal rectificada que entra a un pin del micro ( la señal AC esta entre 0 y 5 voltios) al entrar se compara con el pwm, y dependiendo del voltaje vario el ancho del pwm pero necesito que se sincronocen las dos señales la de pwm y la rectificada. despues de esto ay que hacer un controlador pid en el tiempo de rectificacion osea aproximadamente 16 ms y todo esto para variar la corriente de una bobina de control que tiene un generador trifasico que es el que produce el voltaje. no se si me entiendan pero la idea del proyecto es q a medida que suba o baje el voltaje de salida senoidal con el microcontrolador producir una corriente DC mas grande o mas pequeña. 


por favor colaborenme con esto gracias


----------



## undreck (Mar 2, 2010)

cual es la diferencia del pic16f877 y el pic16f877A?


----------



## XIMENARANJA (Mar 3, 2010)

hola, mi problema es que diseñe un circuito con el pic 16f877A, pero hoy cuando fui a comprarlo, me dijeron que estaba descontinuado, pero que el pic 16f887 era la misma cosa, que incluso en el programa que ya habia creado para el 16f877a me servia igual y solo era cambiar la referencia del pic... eso es cierto?? necesito ayuda urgente porque es para un trabajo de la U... que diferencias hay entre uno u otro?.. de antemano, gracias.


----------



## mecatrodatos (Mar 4, 2010)

Las unicas diferencias que hay entre el pic 16f877 y el pic 16f877A es que el segundo posee dos comparadores y se lo puede conseguir en mas tipos de Packages.

si no has utilizado ningun comparador,  los registros son iguales y el programa hecho para el pic 16f877A te servira para el 877

para explicarte mejor te anexo documento en pdf


----------



## snakewather (Mar 6, 2010)

Una Pregunta Por que con Pic se puede hacer con un circuito Regulador de cd y otro PID con amplificadores para que quieres el PIC vas mostrar datos en LCD oquieres hacerlo automatico?


----------



## fox13 (Mar 7, 2010)

porque con amplificadores y haciendo analogo el circuito sale muy grande y siempre es complicado, tambien ay que mostrar el valor del pid en un lcd por estos quiero hacerlo con pic, estoy trabajando con un compilador que se llama mikrobasic ya que me lo recomendaron, no soy bueno programando en assembler por lo cual utilizo este compilador pero si ay alguno mas sencillo colaborenme con el compilador y con algo de programación. 

No se si ay algun pic o dspic que tenga el pid incluido si ay alguno por fa ayudenme con estos. 

gracias.


----------



## XIMENARANJA (Mar 7, 2010)

muchas gracias!! me ha servido bastante tu respuesta.. ya queme el pic con el programa antiguo y me funciono muy bien...


----------



## Chico3001 (Mar 7, 2010)

Junte este tema con uno existente del 16F877 para tener una mejor organizacion de los temas en el foro...

Gracias...


----------



## fancor (Mar 11, 2010)

Hermano le agradezco la informacion que a biente tiene usted de suministrarnos, me ha sido muy util, ya que estoy iniciando en esto de la programacion de pic´s, con el 16f877a y tengo que realizar un programa con el que configure un puerto como entrada, otro como salida cargo el nible bajo con un numero y el alto con otro y mostrarlos por el puerto de salida, además otro que el alto sea la base y el bajo el exponente y mostrarlo en el de salida. le agradezco cualquier ayuda.


----------



## m3mho (Abr 22, 2010)

Muchas gracias genial el aporte


----------



## landondonovan (May 7, 2010)

muy bueno el tutorial...
Gracias y muchísimas felicidades, acabo de flipar con tu trabajo.


----------



## cheli (Jun 6, 2010)

Como hago para colocar un retardo de 2 segundos, llevo toda la mañana tratando de hacerla normal y no he podido


----------



## snakewather (Jun 6, 2010)

hola cheli, mira en asm una forma de generar un retardo es haciendo el llamado a una subrutina con la instruccion CALL y que luego esta cargue un valor a un registro despues irlo decrementando de 1 en 1 y asi hasta llegar a cero y regrese al programa despues de la intruccion CALL, a veces esto se tiene que hacer anidado para aumentar el tiempo de retardo pero, si no quieres batallar.

fijate en la 4 pagina de el tuto ahi hay un programita para hecer retardos y mas adelante hay informacion de como usarlo te recomiendo que descargues las dos partes del tuto ya que asi entenderas mejor lo que te digo!!!!!!!!!


----------



## cheli (Jun 6, 2010)

Yo lo hago con el picdel pero luego copio y pego en el mplab y me da errores que no se solucionar y ahi me quedo, mira tu mismo

Error[113] C:\LAB DE MICRO\LED TITILANDO.ASM 49 : Symbol not previously defined (Demora_150ms)
Error[113] C:\LAB DE MICRO\LED TITILANDO.ASM 53 : Symbol not previously defined (Demora_150ms)
Error[113] C:\LAB DE MICRO\LED TITILANDO.ASM 66 : Symbol not previously defined (PDel0)
Error[113] C:\LAB DE MICRO\LED TITILANDO.ASM 68 : Symbol not previously defined (PDel1)
Error[113] C:\LAB DE MICRO\LED TITILANDO.ASM 70 : Symbol not previously defined (PDel2)
Error[113] C:\LAB DE MICRO\LED TITILANDO.ASM 72 : Symbol not previously defined (PDel2)
Error[113] C:\LAB DE MICRO\LED TITILANDO.ASM 74 : Symbol not previously defined (PDel1)
Error[113] C:\LAB DE MICRO\LED TITILANDO.ASM 76 : Symbol not previously defined (PDel0)


Como arreglo esto y que estoy haciendo mal?

Como Symbol previously defined todo ese poco de broma


----------



## snakewather (Jun 19, 2010)

Hola cheli lo que pasa con tu programa es que tines que definir los registros del retardo PDel0, PDel1, PDel0 hasta PDeln registros que tengas y tambien cuando llames al retardo con la instruucion CALL tiene que ser al mismo nombre de la entiqueta del retado en tu caso Demora_150ms

para dar de alta los registros se hace asi al principio de tu codigo:

LIST  P=16F877
#INCLUDE <p16F877.INC>
PDel0  EQU   21H
PDel1  EQU    22H  y asi sucesibamente segun los registros que tengas que dar de alta


----------



## samaelsys (Jun 24, 2010)

Hola amigos todo lo leído hasta el momento me parece más que interesante, pues deseo controlar motores paso a paso con el PIC16F877 , programandolo en PIC C de CCS ó PCW q es lo mismo, y con una interfaz en VB.NET pero la verdad he investigado bastante del PIC pero a la programación no le encuentro como entrarle, espero saber mas de este tema me ha parecido muy interesante.

Ah yo tengo el instalador del CCS PCWH v4.023, mi e-mail: samael.sys@gmail.com


----------



## elzytacogelona (Jun 29, 2010)

gracias te tomare la palabrea, yo voy empezando y me gustaria programar en C, he programado en ensamblador seguiere haciendolo, aunque programas sencillos.


----------



## samaelsys (Jul 1, 2010)

hola amigos les cuento q he iniciado tratando de entender la programación del pic16f877 y quiero encender un led; pero me da error a la hora de simularlo en proteus, les dejo los archivos por si me quieren ayudar, se les agradece.

Saludos!!


----------



## samaelsys (Jul 6, 2010)

hola a Todos!
Alguien me puede ayudar en el error q me da la simulación en proteus, el error dice:

[PIC16] Program not specified

ya busque mas info de este error en internet pero no he encontrado nada.

espero su ayuda, Saludos!!!!!!!!!!


----------



## nietzche (Ago 3, 2010)

pues carga el programa con el HEX

Hola, alguna luz que alguien me de sobre este tema, por favor es importante   https://www.forosdeelectronica.com/f24/duda-modulo-rx-tx-usart-rf-41112/



samaelsys dijo:


> hola amigos les cuento q he iniciado tratando de entender la programación del pic16f877 y quiero encender un led; pero me da error a la hora de simularlo en proteus, les dejo los archivos por si me quieren ayudar, se les agradece.
> 
> Saludos!!


 Si cargaste correctamente el .HEX ????????

adjunto un tutorial de pic en español con la explicacion de las instrucciones de asembler tambien en español


----------



## AriRojas (Ago 5, 2010)

Wooow 
Veo ke han abandonado el tema, muy a mi parecer les agradezco infinitamente los aportes (a todos)pero en especial a sangreaztek, snakewather y dolphin!!
Me fui a examen extraordinario no sabiendo absolutamente nada, mi examen es mañana y con lo que leí aqui me siento al 80% para mi extra.

Ojalá sigan con las aportaciones, harian muy felices a personas ke estamos perdidas, igual a mi antes de encontrar este maravilloooooso foro!!!

Espero seguirme enriqueciendo en esto y dejar algo x aca...


----------



## sbjcm (Ago 18, 2010)

Son muy buenos los videotutoriales, aunque solo sean tres. Creo que se puede complementar con el curso disponible en http://www.cursomicros.com 
Saludos. bye.


----------



## snakewather (Ago 19, 2010)

sbjcm dijo:


> Son muy buenos los videotutoriales, aunque solo sean tres. Creo que se puede complementar con el curso disponible en http://www.cursomicros.com
> Saludos. bye.




vi la pagina y me parecio muy buena en cuanto a teoria exelente aporte, con sus aportes se enriquece el tema saludos desde mexico.


----------



## moizero (Ago 25, 2010)

muy buenos aportes de tutoriales ojala puedan mencionar algo relacionaco con el pic 16F877 y programarlo en C# vale la pena o mejor ni me complico la vida?? saludos a todos!


----------



## Meta (Ago 25, 2010)

Ojalá microchip se dedique en el futuro programar PIC con C#.


----------



## Moyano Jonathan (Ago 28, 2010)

Tiene que sacar algo más poderoso que los PIC32 para hacer eso....ya que es programación orientada a objetos y la memoria RAM que se necesita para esto es mucha  pero hay algo interesante que vi en la web que quizas resuelva estos problemas http://urriellu.net/es/projects-software/pigmeo-compiler-framework-c-sharp-microcontrollers.html


----------



## Meta (Ago 28, 2010)

He oído desde que sacaron los PIC32 en el 2007, que Microchip tiene los de 64 bits hechos pero no los venden. Por algo será.

Siempre he querido C# para programar microcntroladores PIC o el que sea. Es buena idea que cada vez más la gente se dedique a ello.


----------



## moizero (Ago 29, 2010)

gracias por el compilador creo que ahora sera mas sencillo  la transicion del codigo saludos!!


----------



## terabit (Ago 29, 2010)

ortega dijo:


> saludos colegas, tambien me anoto al foro......... hace tiempo hice unos cursos de microcontroladores, aunque estoy un poco oxidado por falta de tiempo, pero creo k si cada uno de nosotro aportamos este foro va a tener buena calidad y eso es lo k hay k lograr............
> 
> una nota para lo k se estan iniciando en este interesante mundo y tienen poco conosimiento de electronica o cualquier razon k no kieran o puedan contruir su grabador de pic, pueden integrar el mplab al proteus, asi pueden ir simulando su circuito  y probandolo sin tener k hacer invertir $$$$$$ y pueden probar con numerosos pic y no limitarse a k no puedo hacer eso por k no puedo conseguirlo.......................
> 
> les dejo un manual para k puedan integrar el mplab en su proteus.......... se cuidan colegas hasta la proxima y espero buenos aportes para el foro.......


perdona pero no se si podrias decirme como paso el programa sacado de proteus seria el pic 16f877 que funciona como calculadora tengo el ejemplo sacado de proteos pero no tiene el asm 
el archivo es  el problema es como lo paso al microcontrolador ya que en la carpeta tiene tre programas en bloc de notas
saludos
Tipo de Archivo: zip  	pic_calculator_132.zip (28,2 KB (Kilobytes), 965 visitas)


----------



## fabiancar9012 (Sep 5, 2010)

gracias por toda la informacion me ha servido demaciado pero necesito un favor necesito hacer un seguior de lines con motoreductores con el pis16f877a si aluno ttiene el codigoq me pueda ayudarle agradeceria mucho


----------



## snakewather (Sep 5, 2010)

Moyano Jonathan dijo:


> Tiene que sacar algo más poderoso que los PIC32 para hacer eso....ya que es programación orientada a objetos y la memoria RAM que se necesita para esto es mucha  pero hay algo interesante que vi en la web que quizas resuelva estos problemas http://urriellu.net/es/projects-software/pigmeo-compiler-framework-c-sharp-microcontrollers.html




 HOLA Moyano Jonathan EL Pigmeo es como el NIPLE nadamas que multiplataforma por asi decirlo una pregunta ya lo haz probado haz programado ya algun pic con este compilador por que la verdad pienso que habria que ver que tanto reduce en tamaño de memoria el .hex que se graba al pic mi duda es si sera equiparable al de un programa compilado en ASM???????


----------



## jcarloss_20 (Sep 5, 2010)

hola a todos soy nuevvo en el foro y quisiera obtener el manual del pic 16f877 en ingles pero con esa descripción: "16f877" sin xxxx, si alguien me puede ayudar por favor.


----------



## Moyano Jonathan (Sep 5, 2010)

> HOLA Moyano Jonathan EL Pigmeo es como el NIPLE nadamas que multiplataforma por asi decirlo una pregunta ya lo haz probado haz programado ya algun pic con este compilador por que la verdad pienso que habria que ver que tanto reduce en tamaño de memoria el .hex que se graba al pic mi duda es si sera equiparable al de un programa compilado en ASM???????



No todavía no lo pruebo....estoy migrando mi plataforma de hardware ahora para hacer pruebas más comodo. En cuanto haga algunas pruebas te digo.

Lo que estoy viendo algo ahora es de una plataforma .NET pero para ARM cortex M3 bastante más poderosa para ejecutar este tipo de aplicaciones.


----------



## snakewather (Sep 11, 2010)

jcarloss_20 dijo:


> hola a todos soy nuevvo en el foro y quisiera obtener el manual del pic 16f877 en ingles pero con esa descripción: "16f877" sin xxxx, si alguien me puede ayudar por favor.



si te refieres al DAtasheet aca esta saludos:

http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010241


----------



## gcgiron (Sep 17, 2010)

Señores, cordial saludo.

Me uno a participar en este hilo para hacer un pequeño aporte, este es un programa basico de encender un led.

__CONFIG _WDT_OFF&_PWRTE_ON&_XT_OSC&_LVP_OFF&_CP_OFF ; Configuración para el programador
LIST p=16F877A
INCLUDE <P16F877A.INC>
N EQU 0x00
cont1 EQU 0x20
cont2 EQU 0x21
ORG 0x00 ; Inicio de programa
BCF STATUS,RP0 ; Accede a banco 0
BCF STATUS,RP1 
CLRF PORTA ; Limpia PORTA
BSF STATUS,RP0 ; Accede a banco 1
CLRF TRISA ; Configura todos las patitas de PORTA como salidas
BCF STATUS,RP0 ; Regresa a banco 0
Encled 
 BSF PORTA,0 ; La línea RA0 de PORTA toma el valor de 1, se enciende el LED
 CALL Retardo ; Llamada a la rutina de retardo
 BCF PORTA,0 ; La línea RA0 de PORTA toma el valor de 0, se apaga el LED
 CALL Retardo ; Llamada a la rutina de retardo 
 GOTO Encled ; Va a la etiqueta Encled
Retardo ;Rutina de retardo
 MOVLW N 
 MOVWF cont1
Rep1
 MOVLW N
 MOVWF cont2 
Rep2
 DECFSZ cont2,1
 GOTO Rep2 
 DECFSZ cont1,1 
 GOTO Rep1
 RETURN ;Retorno a la llamada de rutina de retardo.
END ;Fin de programa

Adjunto un archivo con el ASM, el HEX y la simulacion en ISIS Proteus.


----------



## 18f2550 (Oct 18, 2010)

estoy utilizando lo siguiente, un tecado matricial 4x3(PUERTO B), la libreria kbd.c, una LCD 2x16(PUERTO D), y su libreria , tengo el programa bien echo, lo que pasa es que no se la forma de conectar el teclado al pic para que me muestre todo en la lcd, y ademas, le agradeceria muchisimo si me pueden revisar el programa en busca de errores, el programa es:


```
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,XT
#use delay(clock=4000000)
#include <lcd.c>
#include <kbd.c>
# use fast_io (D)
# use fast_io (b)

void main() {
char k;

//set_tris_d (0xff);
//set_tris_b (0x00);


lcd_init();
kbd_init();

lcd_putc("\fListo...\n");

while (TRUE) {
k=kbd_getc();
if(k!=0)
if(k=='*')

lcd_putc('\f');

else

lcd_putc(k);

}
}
```
tambien voy a colocar el proteus que yo hice de esta conexion, para verificar que es lo que anda mal.

SI PUEDEN POR FAVOR REVISEN MI CONEXION Y MI PROGRAMA Y AYUDENME A MEJORARLO, PERO BIEN EXPLICADO GRACIAS


----------



## marcelo2112 (Oct 28, 2010)

Hola a todos, podrian decirme como inicializar los puertos A como entrada digital correctamente del 16f887 en PBP?porque conecto unos pulsadores a ellos paro no me andan. Gracias.


----------



## snakewather (Oct 30, 2010)

marcelo2112 dijo:


> Hola a todos, podrian decirme como inicializar los puertos A como entrada digital correctamente del 16f887 en PBP?porque conecto unos pulsadores a ellos paro no me andan. Gracias.




Hola la forma de configurarce correctamente es la siguiente todo esta en la hoja de datos del pic 
solo tienes que fijarte que registros se afectan con la configuracion de PORTA:

    'PORTA.

    TRISA     = 1
    ANSEL     = 0                        'Digital I/O en PORTA.
    ADCON0    =%00111100    'ADC Enable bit Deshabilitado.
    CM1CON0.7 = 0               'comparador 1 OFF.
    CM2CON0.7 = 0               'comparador 2 OFF.
    PIE1.6    = 0                        'Disables the ADC interrupt

Para hacer esto en ensamblador se utilizarian las instrucciones BSF, BCF, MOVLW, MOWF & CLRF segun el registro afectado si se modifica un BIT en especifico como en CM1CON0 o CM2CON0 o de lo contrario si es todo el registro como en ANSEL.


----------



## marcelo2112 (Oct 30, 2010)

Gracias, lo probare.


----------



## snakewather (Oct 30, 2010)

18f2550 dijo:


> estoy utilizando lo siguiente, un tecado matricial 4x3(PUERTO B), la libreria kbd.c, una LCD 2x16(PUERTO D), y su libreria , tengo el programa bien echo, lo que pasa es que no se la forma de conectar el teclado al pic para que me muestre todo en la lcd, y ademas, le agradeceria muchisimo si me pueden revisar el programa en busca de errores, el programa es:
> 
> 
> ```
> ...



Hola le heche un vistazo al programa y esta bien en el circuito tienes bien el teclado lo que esta mal es el LCD te falta conectar VSS y VEE a tierra y VDD a 5volts si nadamas vas a sacar datos al LCD podrias Poner R/W a tierra en modo escritura de datos a LCD


----------



## marcelo2112 (Nov 1, 2010)

snakewather dijo:


> Hola la forma de configurarce correctamente es la siguiente todo esta en la hoja de datos del pic
> solo tienes que fijarte que registros se afectan con la configuracion de PORTA:
> 
> 'PORTA.
> ...


 
Todavia me quedan los puertos A 5, 6 y 7 sin funcionar. Estan en estado alto.


----------



## snakewather (Nov 1, 2010)

marcelo2112 dijo:


> Todavia me quedan los puertos A 5, 6 y 7 sin funcionar. Estan en estado alto.



Postea tu Programa para hecharle un vistazo se me ocurre que Antes de comenzar con la rutina de inicio del programa inicializa PORTA = 0

ejemplo:

              'Alias*************************************
              PA5 var PORTA.5 

              'Inicializo Puertos***************************
              PORTA = 0
              PORTB = 0

              'Comienzo con el Programa principal************
inicio      if(PA5 == 1 ) then
              PORTB.5=1

              goto inicio


----------



## ZadKiel (Feb 22, 2011)

necropost----

No se si me contesten pero bueno;

he dado demasiadas vueltas ya no se que hacer :/ me recomendaron este pic necesito hacer lo siguiente:

A traves del pc con mi puerto serial necesito captar 8 bits y enviar 8 bits, supongo que con este pic puedo hacer que el port B y el D uno como entrada y otro como salida pero como puedo configurar el pic?, tengo que grabar algo en la pic?, como hago eso?, soy totalmente nuevo en todo esto pero no tengo tiempo para empezar de 0, necesito algo mas centrado en lo que es la comunicacion rs232 con el pic 16f877 y como capturar sus datos etc, porfa ayudenme :S


----------



## snakewather (Feb 28, 2011)

ZadKiel dijo:


> necropost----
> 
> No se si me contesten pero bueno;
> 
> ...



Mira si no eres estudiante de algo afin o que tenga que ver con la electronica veo muy dificil que puedes realizar comunicacion RS232 con el pic16F877, Primero que nada tienes que empezar desde cero con los dos tutos que tengo en este post y despues planteas algo mas concreto con lo que hayas realizado.

Ademas para trabajar con RS232 tienes que tener conocimientos previos y en tu caso es irremediable empezar desde cero perdona que te lo diga asi friamente pero es la verdad.

Ahora que si quieres algo ya hecho busca en google!


----------



## ZadKiel (Feb 28, 2011)

Buenas estuve trabajando pues me comi los tutoriales de punta a punta e investigue en internet, ahora tengo una duda, estoy trabajando en delphi y he probado varios componentes pero cada vez que envio algun dato al pic del proteus con el virtual serial port solo llega esto þ o algun otro codigo, sera un problema del programa en picc o del delphi?


----------



## snakewather (Feb 28, 2011)

ZadKiel dijo:


> Buenas estuve trabajando pues me comi los tutoriales de punta a punta e investigue en internet, ahora tengo una duda, estoy trabajando en delphi y he probado varios componentes pero cada vez que envio algun dato al pic del proteus con el virtual serial port solo llega esto þ o algun otro codigo, sera un problema del programa en picc o del delphi?




Hola que bueno, mira la verdad yo no he trabajado en delphi, yo estoy acostumbrado al ASM, CCS compiler y PBP. 

El problema puede estar en Proteus si es que no estas dandole la direccion correcta y las opciones correctas al pic(al agregar el Programa al PIC), otra cosa que se me ocurre es Los Fuses o la palabra de configuracion que declaras al principio de tu programa a veces pasa que esta mal configurada o te hacen falta datos, y por eso cuando compilas tu programa y el archivo .exe que te genera la compilacion, a la hora de agregarlo al pic en proteus te queda mal.

Por ultimo puede ser el programa en Delphi y ahi lo siento pero a ese no le se jejejeje.

date una vuelta por aqui https://www.forosdeelectronica.com/f24/programas-pic-c-compiler-tutorial-21770/


----------



## ppbto (Mar 16, 2011)

que tal  sangre azteca  
mira tngo este problema estoy en un seminario de titulacion
el tema de PICs la esta dando el profesor Begovivh
y estamos haciendo praticas con el pic 16f877A, estamos en grupos de 3 y ahora me toco realizar la practica, la vdd no tengo nada de tiempo ya q trabajo todo el dia se q no es excusa pero asi es esto =(, vi q el profesor te dio clases, y tal vz t dejo la misma practica q t adjunto, y seria genial si pudieras mandarme la pract si es q la tienes, t lo agradeceria
salu2


link de la pract

https://269912565273241702-a-180274...akb2WFHFYjewV_krhxsi2GLq17UUZe&attredirects=0


----------



## snakewather (Mar 23, 2011)

En mi opinion seria mejor mandarle un mensaje privado no crees ademas en el foro se plantean dudas, opiniones se te ayuda en base a lo que hayas hecho o avanzado en tu trabajo no se pasan las tareas no es un Kinder.

Tu tarea del Profesor era muy facil demasiado a mi parecer para un curso de titulacion con una 1/2 hora de teoria y dos de programacion la tienes lista, esto siempre y cuando sepas un poco de PICs y su programacion.

Ojala te sirva de algo el tutorial.

PD: para todo hay formas y medios de pedir las cosas.


----------



## maton13 (Abr 21, 2011)

Hola soy nuevo en este foro soy estudiante y en mi clase de microcontroladores estamos analizando los convertidores analogico digital del pic 16f877a y tengo algunos problemas porque mi compilador pic c me marca error en una instruccion para definir que solo lea el AN 0 (A0)
porfavor ayudenme les dejo mi programa a ver si pudieran ayudarme les agradeceria mucho.

lo estoy usando para realizar un termometro digital en una lcd 16 x 2 con un sensor lm35

//termometro digital en lcd by pako

#include "math.h"
#fuses XT, NOWDT
#include  "lcd.c"

         void main( )
 {
     float tr,tv,temp,y,y1;
     int16 valor;
     lcd_init( );
     set_tris_a(0xFF);
     set_tris_d(0x00);
     setup_port_a();
     setup_adc(ADC_CLOCK_INTERNAL);
     setup_adc_channel(0);
     delay_ms(30);
     do
     {
      valor=READ_ADC( );
      tv=5*valor/1024;
      tr=tv*(10000*(5-tv));
      y=log(tv/2000);
      y1=(1/298.5)+(y*(1/4050));
      temp=1/y1;
      temp=temp-273.5;
      lcd_gotoxy(2,1);
      printf(lcd_putc,"T=%4.2f",temp);    //4 enteros 2 decimales
     }while(1);
 }  

marca uun error en la instruccion 
// setup_adc_channel(0);


----------



## snakewather (Abr 25, 2011)

Hola mira esto es lo que puede estar ocurriendo te esta faltando esta instruccion:

setup_adc_ports(AN0);                  /* Usar entrada analógica AN0 */

Para especificar que usaras Bit 0 de PORTA como entrada analogica.


Por que estas que siguen si las tienes:

setup_adc(ADC_CLOCK_INTERNAL); /* Usar reloj interno para el ADC */
set_adc_channel(0);                   /* Usar canal 0 del ADC */

O tambien puede ser (set) en lugar de (setup) en la instruccion setup_adc_channel(0); de tu programa.

Lo cheque asi a la rapida ojala te sirva.


----------



## alex erazo ruiz (Abr 27, 2011)

ortega dijo:


> saludos colegas, tambien me anoto al foro......... hace tiempo hice unos cursos de microcontroladores, aunque estoy un poco oxidado por falta de tiempo, pero creo k si cada uno de nosotro aportamos este foro va a tener buena calidad y eso es lo k hay k lograr............
> 
> una nota para lo k se estan iniciando en este interesante mundo y tienen poco conosimiento de electronica o cualquier razon k no kieran o puedan contruir su grabador de pic, pueden integrar el mplab al proteus, asi pueden ir simulando su circuito  y probandolo sin tener k hacer invertir $$$$$$ y pueden probar con numerosos pic y no limitarse a k no puedo hacer eso por k no puedo conseguirlo.......................
> 
> les dejo un manual para k puedan integrar el mplab en su proteus.......... se cuidan colegas hasta la proxima y espero buenos aportes para el foro.......



excelente aporte...


----------



## pjota08 (May 3, 2011)

Hola a todos quisiera aprender a programas bien este tipo de pics ya que necesito hacer un sensor de nivel y estoy un poco colgado espero que alguien pueda colocaborarme muchas gracias


----------



## snakewather (May 3, 2011)

pjota08 dijo:


> Hola a todos quisiera aprender a programas bien este tipo de pics ya que necesito hacer un sensor de nivel y estoy un poco colgado espero que alguien pueda colocaborarme muchas gracias



Hola lee el post completo y veras que aprendes algo!


----------



## arsfigo07 (Jun 2, 2011)

Hola snakewater, la verdad esta muy padre tu propuesta. Mira yo he avanzado mucho en esto de los pics en especial el 16f877a, estoy haciendo un proyecto algo considerable y bueno mi pregunta es si sabes como comunicar al pic con la PC via serial?? usando visual basic 6 he estado leyendo pero como que no me convence me seria mejor teniendo un ejemplo, algo mas practico. Lo que estoy realizando se puede resumir en lo siguiente.

Comunicacion pic/pic/PC/RF/I2C(Maestro-esclavo). Espero tu respuesta y si te interesa pues subo mi informacion los programas en los pics estan en ensamblador...


----------



## jorje (Jun 2, 2011)

Nesesito orientacion para realizar un proyecto con el pic16f877 y un display lcd , se trata de un contador , incremento, decremento. indicándole con 2 botones cuando tiene q incrementar o decrementar el pulso me lo proporciona un encoder de un motor a pasos, abusando un poco seria posible un diagrama de conexion y el programa de ensamblador o basic? 

agradecería mucho la ayuda

saludos


----------



## snakewather (Jun 3, 2011)

arsfigo07 dijo:


> Hola snakewater, la verdad esta muy padre tu propuesta. Mira yo he avanzado mucho en esto de los pics en especial el 16f877a, estoy haciendo un proyecto algo considerable y bueno mi pregunta es si sabes como comunicar al pic con la PC via serial?? usando visual basic 6 he estado leyendo pero como que no me convence me seria mejor teniendo un ejemplo, algo mas practico. Lo que estoy realizando se puede resumir en lo siguiente.
> 
> Comunicacion pic/pic/PC/RF/I2C(Maestro-esclavo). Espero tu respuesta y si te interesa pues subo mi informacion los programas en los pics estan en ensamblador...





HOLA  mira en cuanto a serial solo lo he usado para muestrear datos del PC  enviados al Pic, ademas el serial como que cada vez se maneja menos en  los pics cada vez se usa mas el usb, ahora si que lo de hoy es el PUERTO  USB con PICS y para eso hay una herramienta muy padre se llama EasyHID  es un programa que te crea el enlace entre el Pic y el Driver USB  generando archivos PBP y Vb.

El archivo PBP tu lo puedes modificar  para ver que entradas o salidas utilizar y agregar rutinas ademas el  archivo en visual basic lo abres y puedes modificar el proyecto  agregando botones, etiquetas, contadores y demas que se te ocurra para  comunicar con el PIC.

Ademas PBP es un lenguaje muy amigable lo aprendes intuitivamente claro sabiendo ASM o C

Por serial hay unos tutos que estan exelentes del colega de aqui del foro: META para RS232

NOTA:  te recomiendo que si quieres compartir tus archivos o que te ayuden en  tu proyecto crea un Post diciendo tus avances y explicando en que tienes  problemas para ayudarte asi toda la info queda en un mismo POST.



jorje dijo:


> Nesesito orientacion para realizar un proyecto con el pic16f877 y un display lcd , se trata de un contador , incremento, decremento. indicándole con 2 botones cuando tiene q incrementar o decrementar el pulso me lo proporciona un encoder de un motor a pasos, abusando un poco seria posible un diagrama de conexion y el programa de ensamblador o basic?
> 
> agradecería mucho la ayuda
> 
> saludos



Hola asi rapido te cuento que en el Libro:

Microcontroladores PIC "Diseño practico de aplicaciones 1era parte" PIC12F508,PIC16F84A
Mac Graw hill 4 ed., jose maria angulo, ariza etxebarria ruiz.

en la Pagina 413 que seria el 4 TALLER de practicas esta lo que buscas en ASM
el codigo esta hecho para el 16F84A pero no hay problema en cambiarlo al 877 solo hay que fijarce la correspondencia de los registros.

El programa que viene ahi hace lo siguiente: sobre 8 leds conectados PORTB se visualizara el binario el numero de pulsos aplicados por RA0 y RA1 determina si la cuenta es ascendente o descendente.

Como veras es la mitad del Programa que necesitas, en tu caso quitarias la parte en que los manda en forma binaria al PORTB para agregar la rutina del LCD y ahi en PORTB conectarias el LCD en modo de 8 bits u 4 bits. 

Te adjunto imagenes para la configuracion del LCD la pata RW se pone a GND si solo se van enviar datos al LCD

Mira aqui estan los LINKS para los tutos que te mencione de RS232 muy buenos

https://www.forosdeelectronica.com/...ie-rs232-pic16f84a-controlado-visual-c-17414/

https://www.forosdeelectronica.com/f24/manual-prueba-vc-vb-sobre-rs232-18631/

 Ojala les sirva la info y mi opinion! saludos


----------



## snakewather (Jun 3, 2011)

Aqui pongo un blog que me encontre por aqui del foro esta bueno esta el libro que te dije de ANGULO:

http://www.electronicapura.com.ar/2009/10/libros.html


----------



## arsfigo07 (Jun 15, 2011)

Muchas gracias snakewather he logrado la mayor parte de mi proyecto. Ya tengo la comunicacion RF, la comunicacion serial y el protocolo I2C; ya solo me faltan detallitos cuando lo termine te lo presento para contribuir a esta guia del 16F877A....


----------



## lexvj (Jun 20, 2011)

Que tal, primero agradezco a las personas que contribuyen y aportan a este gran foro, he aprendido y sigo aprendiendo mucho.

Ahora, desde hace unos meses comencé con esto de la programación de PIC´s y la verdad es muy interesante, ya leí la información que aqui han puesto y me he asesorado con otras personas sobre el tema.

Yo en lo particular, para realizar y compilar mi programa utilizo el software SOURCEBOOST y lo simulo en PROTEUS, para el tipo de prácticas que he realizado (sencillas) no he tenido problemas y en cuanto al programación, incluso compré un MASTERPROG de los que venden en Mercado Libre pero he tenido algunos problemas.

Bueno, una sencilla aportación que les dejo es esta: Es un programa que mediante un dip switch muestra 3 contadores (uno de 15 a 0, otro de 0 a 15 de 3 en 3 y uno mas de 0 a 9) el conteo se muestra en un display de 7 segmentos conectado al puerto B del PIC.

OJO: Utilicé el PIC16F84A pero es lo mismo para el PIC16F877A

```
#include <system.h>

void main()
{
  trisa = 0x07;//Configura a RA0, RA1 y RA2 del puerto A como entradas 
  trisb = 0x00;//Configura el puerto B como salida
  while(1)//Para que el programa se repita
         {
           if(porta==0)//Con esta condición se inicia el contador de 15 a 0
                      {
                              portb = 0x71;//Se le asigna al puerto B el numero 15 letra F
                              delay_ms(1000);
                              portb = 0x79;//numero 14 letra E
                              delay_ms(1000);
                              portb = 0x5E;//número 13 letra D
                              delay_ms(1000);
                              portb = 0x39;//número 12 letra C
                              delay_ms(1000);
                              portb = 0x7C;//número 11 letra B
                              delay_ms(1000);
                              portb = 0x77;//número 10 letra A
                              delay_ms(1000);
                              portb = 0x67;//número 9 
                              delay_ms(1000);
                              portb = 0x7F;//número 8
                              delay_ms(1000);
                              portb = 0x07;//número 7
                              delay_ms(1000);
                              portb = 0x7D;//número 6
                              delay_ms(1000);
                              portb = 0x6D;//número 5
                              delay_ms(1000);
                              portb = 0x66;//número 4
                              delay_ms(1000);
                              portb = 0x4F;//número 3
                              delay_ms(1000);
                              portb = 0x5B;//número 2
                              delay_ms(1000);
                              portb = 0x06;//número 1
                              delay_ms(1000);
                              portb = 0x3F;//número 0
                              delay_ms(1000);
                       }
           if(porta==1)//Con esta condición se inicia el contador de 0 a 15 de 3 en 3
                      {
                              portb = 0x3F;
                              delay_ms(1000);
                              portb = 0x4F;
                              delay_ms(1000);
                              portb = 0x7D;
                              delay_ms(1000);
                              portb = 0x67;
                              delay_ms(1000);
                              portb = 0x39;
                              delay_ms(1000);
                              portb = 0x71;
                              delay_ms(1000);
                       }
           if(porta==2)//Con esta condición se inicia el contador de 9 a 0
                      { 
                              portb = 0x67;
                              delay_ms(1000);
                              portb = 0x7F;
                              delay_ms(1000);
                              portb = 0x07;
                              delay_ms(1000);
                              portb = 0x7D;
                              delay_ms(1000);
                              portb = 0x6D;
                              delay_ms(1000);
                              portb = 0x66;
                              delay_ms(1000);
                              portb = 0x4F;
                              delay_ms(1000);
                              portb = 0x5B;
                              delay_ms(1000);
                              portb = 0x06;
                              delay_ms(1000);
                              portb = 0x3F;
                              delay_ms(1000);
                       }       
         }                                                     
}
```

Como apenas comienzo en esto mi programa está "paso a paso", supongo que debe haber formas más sencillas de hacerlo y en eso estoy, aprendiendo poco a poco.

Saludos desde Guanajuato México y espero les sirva


----------



## snakewather (Jun 21, 2011)

Hola y bienvenido ese soft, no lo habia oido se ve parecido a CCs y si hay otra manera puedes guardar el dato en una variable BYTE e incrementarla o -- en uno despues mostrarla en el puerto que quieras y sensar cuando alla llegado al valor deseado. se puede hacer con un FOR o ifs


----------



## jhaz (Jun 21, 2011)

Hola saludos atodos quiero dar las grasias atodos los q aportaron, me serviran de mucho ya q soy nuevo en el tema de microcontroladores, solo q ria saber si alguien conoce al gun tutorial de visual basic para acer interfaces con los pic por ejemplo con el pic16f877 se los agradeceria mucho,y sigan adelante con este tutorial.


----------



## dannyy (Ago 10, 2011)

amigos por favor alguien me podria decir, que es un verdadero enigma para mi sobre los pics:
porque pusieron al 16f877A comparadores analógicos, si tiene conversores  de analógicos a digital
gracias de antemano

a lo q me refiero es:
porque o con que propósito pusieron los comparadores analógicos al pic 16f877a si con el conversor A/D puedo cumplir la misma función de comparar y tomar decisiones según
las necesidades.
o acaso hay funciones que el comparador analógico pueda cumplir y que el conversor A/D del pic no lo pueda hacer.
y si lo hubiera por favor hazme una lista de ellos, si no fuera mucha molestia
y si pudieras enseñarme sobre ese tema seria magnifico
por favor si fueras tan amable de sacarme de esa duda estaría muy agradecido
saludos


----------



## thunder2 (Ago 11, 2011)

Hola a todos, he estado intentando la aplicación AN1310 de Microchip para microcontroladores que es un bootloader, combinado el circuito FT232RL, pero al ejecutarlo me da error de lectura. Obvio que quemando el bootloader en el PIC con un programador serial.
La pregunta es ¿Hay que configurar los fuses y cuales son?, agradezco cualquier respuesta.

Muchas gracias y saludos.


----------



## jamirto (Ago 12, 2011)

Yo tengo 15 dias que compre el cargador de pic por usb  en Steren  (680)y me funciono bien 
nada mas que hay que tener cuidado con el pic que contiene


----------



## snakewather (Ago 14, 2011)

dannyy dijo:


> amigos por favor alguien me podria decir, que es un verdadero enigma para mi sobre los pics:
> porque pusieron al 16f877A comparadores analógicos, si tiene conversores  de analógicos a digital
> gracias de antemano
> 
> ...



La idea es que con el A/D se puede tomar deciciones en base a un valor binario que equivale a un voltaje sensado, 

y con los comparadores comparas un voltaje a un rango de voltajes pueden ser + o - y tambien se puede hacer inversamente.



thunder2 dijo:


> Hola a todos, he estado intentando la aplicación AN1310 de Microchip para microcontroladores que es un bootloader, combinado el circuito FT232RL, pero al ejecutarlo me da error de lectura. Obvio que quemando el bootloader en el PIC con un programador serial.
> La pregunta es ¿Hay que configurar los fuses y cuales son?, agradezco cualquier respuesta.
> 
> Muchas gracias y saludos.



Cheque la aplicacion asi rapidillo y Se me ocurrio que podria ser asi como te pongo en la imagen solo me queda duda del DEBUG
yo probaria habilitandolo y despues sin habilitar a ver que pasa.



jamirto dijo:


> Yo tengo 15 dias que compre el cargador de pic por usb  en Steren  (680)y me funciono bien
> nada mas que hay que tener cuidado con el pic que contiene



680 pesos se me hace mucho podrias poner una imagen o link y que pics te graba?


----------



## jamirto (Ago 14, 2011)

Este es el linkhttp://www.steren.com.mx/_files/product.asp?d=3329&dt=2&p=2644
si es caro pero por mi desesperacion lo compre ya que el programdor jdm por puerto serial no tuve suerte talves configure mal los fuses dejame checarlo de nuevo y en una semana te digo que paso  .este vale como 160 pesos


----------



## thunder2 (Ago 16, 2011)

Gracias Snakeweather por tu respuesta y a ti jamirto, pero no tengo problemas con mi jdm, he programado PIC16F877A, PIC16F876A, PIC16F628A y PIC16F84A. Pero la imagen es clara para los fuses del programa para grabar el  PIC pero en si, son los fuses del assembler que tiene el bootloader. Para que me entiendan, planeo utilizar el FT232RL como conversor USB - serial, para enviar los programas al estilo arduino. 
Además como se dice en Colombia, el PIC16F877A es una berraquera para sacarte de problemas y deberas lo necesito para no desmontarlo y desmontarlo del programador jdm.

Gracias a todos y mil perdones por mi pregunta.

Si me sale esta adaptación, la subo al foro. Pero ello tiendo una tarjeta FT232RL parecida a la que hace sparkfun, ya que tendria que realizar el impreso para el PIC y el integrado SMD FT232RL. Por ahora lo estoy probando en el proto, pero nada de nada del bootloader.


----------



## electronix (Ago 24, 2011)

Hola esta intresante el foro ,Tambien quisiera aportar algo ,no soy muy experto en el tema pero si me gusta y me facina desubrir cada vez mas nuevas aplicaciones con estos dispositivos y todo lo relacionado.. me dare un tiempo para poder aportar alguito con todos los q amamos este maravilloso mundo....Hasta entonces colegas.

Saludos...


----------



## snakewather (Ago 28, 2011)

Que tal compañeros del Foro me da gusto que este Tuto sigue su curso Monitoreado por los que ya llevamos tiempo aqui y por los nuevos colegas que se integran, a aportar poco o mucho del conocimiento que tengan, en realidad lo que importa es que participen.

Asi sea algo pequeño Todo Gran Proyecto inicia con algo basico.

Sigan visitando el foro y si tienen proyectos ya hechos en ASM aunque sean simples ponganlos.
*
Podemos hacer un Compendio de Programas en ASM explicados para ponerlos como ejercicios anexos a este tutorial.*

_Espero sus aportaciones les cuento que tengo informacion sobre PBP para armar un buen tutorial ya sea con el 877 o con la nueva version pero falta redactarla y armarla bien para aumentar mas este tutorial pero eso sera mas adelante._


----------



## Meta (Ago 29, 2011)

Hola:

Si acaso para el 16F887, ya que el 16F877A no se fabrica   si los conseguen es porque están hasta fin de existencias del stock. 

Puedes leer a partir de la página 71 sobre estos temas en este manual.
http://electronica-pic.blogspot.com/2010/02/mplab-inicio-rapido.html

Hay otra persona que lo explica con más detalle.
*Migrando a los Nuevos PIC Migrando hacia PIC16F88X *

http://electronica-pic.blogspot.com/2010/05/migrando-los-nuevos-pic-migrando-hacia.html

Un saludo.


----------



## snakewather (Ago 29, 2011)

OK gracias Meta era lo que estaba pensando lo tomare en cuenta saludos desde el infinito jejejee​
Muy buen material el que publicas en tu blog Felicidades!


----------



## thunder2 (Ago 30, 2011)

Menos mal hay aqui un espacio para el honorable PIC16F877A, y su hermano menor el PIC16F876A. Pero lo he planteado antes en vez de utilizar el programador seria bueno hacerlo por bootloader, algo como el PIC18F2550 para pinguino.

gracias a todos.


----------



## Meta (Ago 30, 2011)

Puedes sacar código fuente del bootloader hasta módulos ya hechos que puedes ver por aquí.







http://www.microingenia.com/electronics/product.php?id_product=2


----------



## thunder2 (Ago 31, 2011)

Hola Meta, de casualidad es de Argentina la empresa? Y agradezco tu respuesta.

Sera mu caro el envio a Colombia?


----------



## Meta (Sep 1, 2011)

Murcia, España. Por lo que tengo entendido.


----------



## dangoncres (Sep 28, 2011)

snakewather gracia por el aporte recien me inscribi a esta pagina y me parece muy interesante, tal vez me pueden dar un consejo tengo q hacer un proyecto para la universidad con el pic 16f877, tal vez me podrian aconsejar que proyecto hacer, gracias


----------



## snakewather (Oct 1, 2011)

dangoncres dijo:


> snakewather gracia por el aporte recien me inscribi a esta pagina y me parece muy interesante, tal vez me pueden dar un consejo tengo q hacer un proyecto para la universidad con el pic 16f877, tal vez me podrian aconsejar que proyecto hacer, gracias




Hola y bienvenido todo depende de cuanto sepas de pics y tu material disponible, puedes hacer desde un control de luces nivel basico, un control de un motor o motores hasta una comunicacion PC-PIC o PIC- LCD-TECLADO para controlar algo. cuentame como andas en los pics que sabes hacer ya para poderte dar una opinion mas exacta.


----------



## hectorrcm (Oct 20, 2011)

Snakewather, primero que nada quiero felicitarte porque por personas como tu y otros sigue vivo este post por mas de 3 a~nos, estuve trabajando bastante con este pic hace algun tiemppo y desafortunadamente perdi todas mis librerias cuando se da~no mi disco duro, ahora me encuentro en un concurso de seguidores de linea y desidi utilizar el 16f877a, tenia pensado adquir los datos de los sensores(analogicos) mediante el 40106bcn, solo que los voltajes Vth y Vtl finalmente son demasiado grandes para mis mediciones, asi que decidi realizarlo mediante el convertidor analogico digital, recurro a ti porque me gustaria saber si tuvieras algun codigo o una idea que me pudiera servir, tanto para el acdc(manejo voltajes entre 0-1.9V) como para controlar el puente H( en este caso un lm293), te lo agradeceria enormemente y espero poder compartireste proyecto con uds. cuando lo tenga finalizado por si alguien mas se interesa en la robotica. Saludos


----------



## snakewather (Oct 26, 2011)

Hola mira te comparto estos tutos de dos profesores que mis respetos ahi  encontraras los enlaces a sus pagina para que puedas investigar mas  espero te sirva.

y un link para mi nuevo post de librerias.

Recomendacion para tu programa.

Si Vth y Vtl son demasiado grandes usa diodos para limitar su voltaje.

1 .- has primero un programa de lectura de un Voltaje de un potenciometro por ejemplo 100K de 0 a 5v.

2.- Arma tu Puente H y Pruebalo con un motor y un dipswitch que envie la combinacion.

3.- has un programa donde controles 1 motor con 4 señales:
     Izquierda  1  0
     Derecha   0  1
     Paro        0  0
     No aplica  1  1


4.- Despues has tu seudocodigo para tu robot y enlaza todo.

     lectura de voltaje. AN0
     si es menor arranca motor 1  IZQ
     si es mayor arranca motor 1  DER

     lectura de voltaje. AN1
      si es menor arranca motor 2  IZQ
      si es mayor arranca motor 2  DER

Claro es solo una idea muy general pero depende de tus condiciones  espero te sirva dejame busco por ahi entre mis cachibaches a ver si  tengo un codigo por que la verdad una vez hice uno bien sencillo solo  que lo hice diferente sino te paso otro de la web jejejeje.






hectorrcm dijo:


> Snakewather, primero que nada quiero felicitarte porque por personas como tu y otros sigue vivo este post por mas de 3 a~nos, estuve trabajando bastante con este pic hace algun tiemppo y desafortunadamente perdi todas mis librerias cuando se da~no mi disco duro, ahora me encuentro en un concurso de seguidores de linea y desidi utilizar el 16f877a, tenia pensado adquir los datos de los sensores(analogicos) mediante el 40106bcn, solo que los voltajes Vth y Vtl finalmente son demasiado grandes para mis mediciones, asi que decidi realizarlo mediante el convertidor analogico digital, recurro a ti porque me gustaria saber si tuvieras algun codigo o una idea que me pudiera servir, tanto para el acdc(manejo voltajes entre 0-1.9V) como para controlar el puente H( en este caso un lm293), te lo agradeceria enormemente y espero poder compartireste proyecto con uds. cuando lo tenga finalizado por si alguien mas se interesa en la robotica. Saludos


----------



## GoX F4yCk3r DB (Nov 17, 2011)

Hola, que tal ando realizando comunicacion en serie con labview, ya tengo mis programa de LV pero el del pic me esta dando problemas, lo que quiero hacer es que cuando llegue un dato de labview, en este caso un numero encienda un puerto del pic.
Mis datos a recibir son 128,64,32,16,8,4,2,1.

mi estructura es con if
if dat="1" then high portb.0
if dat="2" then high portb.1
if dat="4" then high portb.2
if dat="8" then high portb.3
if dat="16" then high portb.4

con los primeros numeros del  1 al 8 no tengo problemas, pero cuando meto un numero mayor al 10, me salen los siguientes errores:

ERROR Line 24: Bad expression.
ERROR Line 24: Bad expression or missing THEN.
ERROR Line 24: IF without a matching ENDIF.

a que se debe esto?


----------



## snakewather (Nov 27, 2011)

Hola y bienvenido jejeje esto me pasaba cuando empezaba.

Podria ser por estas especificaciones si es que estas en Pic basic Pro:

       'PARA ESPECIFICAR VALORES: prefijos usados.

    %    ' Valor Binario              = ALT + 36 o Signo de porcentaje en teclado (5).
    $     ' Valor Hexadecimal  = ALT + 37 O Signo de peso en teclado(4).
16    ' Valor Decimal            = sin prefijo
  "A"   ' Valor ASCII                 = puede ser tambien "H","O","L","A"


O tambien no estas terminando bien la sentencia:

IF() then......                      : esta es una forma


If() then......ELSE.....ENDIF    : esta es otra forma



Espero te sirva!!!


----------



## GoX F4yCk3r DB (Mar 29, 2012)

Hola que tal, estoy aprendiendo a programa en ensamblador y no me queda claro eso de los retardos, que valores son los que tengo que cargar a mis registros para que logre un tiempo x??
podrian ayudarme


----------



## snakewather (Abr 5, 2012)

por el momento Te paso este programita para hacer retardos Lee el post desde el principio en los Docs viene una explicacion de como usar.


----------

