Curso tutorial del PIC16F877

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
PHP:
#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 :rolleyes:
 
Última edición por un moderador:
:apreton: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
 
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.
 
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
 
Última edición:
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.
 
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

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.

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.:unsure:

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?:eek:
 

Adjuntos

  • boot 877A.jpg
    boot 877A.jpg
    77.5 KB · Visitas: 21
Última edición:
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
 
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.
 
Última edición:
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...
 
:) 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.:D
 
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.
 
Puedes sacar código fuente del bootloader hasta módulos ya hechos que puedes ver por aquí.

2-3-thickbox.jpg


http://www.microingenia.com/electronics/product.php?id_product=2
 
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 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.
 
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
 
Atrás
Arriba