Programas hechos en MPLAB

Amigo.:apreton:
Te sugiero, que estudies el asembler, pues de otra manera va a ser muy dificil ayudarte.:unsure:
 
Hola!!! como va??
Soy algo nuevo en el mundo de la programacion de pics... y todavia no se muy bien el codigo en assambler! podrian ayudarme a modificar un programa echo en .asm para poder programar el pic??
es un programa muy bueno!! Se trata de un decodificador DTMF y es controlado por el pic 16f84 , pero quisiera tener varias versiones del programa.
tengo el programa original en .asm y quisiera modificarlo, despues de hacer tantas pruebas no pude lograr lo que buscaba!! podrian ayudarme?? lo necesito lo antes posible!!

gracias saludos!!!!
 
tengo un programa "MPLAB" y quisiera saber como utilizarlo, por ejemplo: quiero hacer un programita sencillo que empieze de 30 y decremente de 1 en 1 hasta 20 y de ahì empiece a decrementar de 2 en 2 hasta cero y volver a 30 y vuelva a hacer lo mismo, que quede ciclado!!!, sabes como hacer este programa, se me hace que ha de estar sencillo, pero es que no conosco la funciones de este programa que tengo y quiero utilizarlo.....

me despido de usted enviandole un cordial saludo.
 
si tengo una idea, pero no se como utilizarlo por que yo no soy programador, me gusta la electronica y estoy incursando en esta heramienta de mplab, me gustaria que me ayudaran, para ser mas claro, saber como utilizar este lenguaje..... :)
 
si tengo una idea, pero no se como utilizarlo por que yo no soy programador, me gusta la electronica y estoy incursando en esta heramienta de mplab, me gustaria que me ayudaran, para ser mas claro, saber como utilizar este lenguaje.....

Si tenés las herramientas software y hardware , es cuetión de que te bajes cualquier libro de programación (hay cientos de ellos) y te pongas a programar...no es dificil...solo es cuestión de sentarse y ponerse a trabajar.

Un saludo !
 
El mas bueno y completo en mi opinion, para programar asembler es.
Microrontrolador pic 16f84.
Desarollo de proyectos
2ª edicion
Con este libro aprendes a programar, muy facil y su contenido es muy bueno
Ya despues te pasas a una gama mas alta de pic.
Buen viento y buena mar.
 
El mejor tutor c que he visto en mucho tiempo. Amigo George gracias por tu paciencia y generosidad para los que iniciamos el campo de los micros. Mi pregunta es ¿puedes indicarme la manera como puedo comenzar a programar la matriz de leds (cambiar el texto) con hyperterminal para evitar tener que programar el micro con el texto que elija? muchas gracias
 
Última edición:
Hola panchillo, la verdad no es complicado tu programa pero eso si hay que leer mucho, porque uno te puede decir mas o menos pero lo importante es que lo entiendas. Para tu programa esto mas o menos haria.

cargar a w con en numero a decrementar, luego guardar ese numero en otro registro (ya que el registro w no es muy seguro para guardar la informacion), luego empezar a decrementar de 1 en 1 y al mismo tiempo ir incrementando otro registro; ejemplo voy decrementando al registro de nombre "abajo" pero voy incrementando a registro "arriba" y para comparar podrias hacer una vil resta y cuando el resultado de esta resta sea 0 bueno pues de ahi me paso a otra rutina.... Esa seria mas o menos la idea y para hacerlo ciclico:

LOOP

(y en esta parte todo tu codigo y de esta manera solito se va a resetear)

GOTO LOOP

Como ves si cuando ya tengas un programa "piloto" lo subes y lo checamos!!!!. Echale gana!!!:cool:
 
Hola.
Estoy intentando hacer el programa para un 16F84. Tiene que visualizarse el contenido de un registro denominado contador.
Se inicializará a 0 y se va incrementando en una unidad por la acción de un pulsador A.
Otro pulsador B provocará una interrupción haciendo parpadear un led durante 5 s.


He conseguido hacer que mediante 8 leds en el puerto B se visualice el contenido del registro contador y aumenta cada vez que pulsas el A.
Lo de la interrupción no lo he consegudo. Gracias por vuestra ayuda.

LIST P=16F84A
PA EQU 0x05
PB EQU 0x06
CONTA EQU 0x0C
ESTADO EQU 0x03
INTCON EQU 0x0B
TMR0 EQU 0x01
ORG 0
GOTO INICIO
ORG 5
INICIO CLRF CONTA
BSF ESTADO,5
CLRF PB
MOVLW 0xFF
MOVWF PA
BCF ESTADO,5
MOVLW 0x00
atras BTFSC PA,0
GOTO ver
MOVLW 0X01
ADDWF CONTA,1
MOVF CONTA,0
ver MOVWF PB
GOTO atras
END
 
que onda guerra:
bueno para el manejo de interrupciones, debes de hacer mas o menos lo siguiente

declarar el vector de interrupcion que es algo como esto:
org 0x04
goto [etiqueta de subrrutina de interrupcion]

en al gunlugar de tu programa debes poner esta etiqueta donde va a estar la rutina de interrupcion,


[etiqueta de subrrutina de interrupcion]

en esta subrrutina debes de habilitar la interrupcio externa en el registro INTCON ya que para lo que deceas hacer es conveniente la interrupcion externa es el bit INTE=1, y las interrupciones globale GIE=1 etc..

RETFIE //con esta instruccion regresas de subrutinas de interrupcion

es conveniente almacenar el estado del registro W y el contenido del registro status cuando hay una llamada de interrupcion pero bueno eso te lo digo despues.

dale un vistaso al DATA del pic y lee sobre esto registro, ya que es mejor aprender a leer las datas de estos pics ya que hay biene toda esta informacion espero no haberte confundido mas hasta luego y suerte
 
Ok estoy mirando todo el DATA y los registros, a ver si lo consigo hacer. Es para un examen, el problema que escribi es el examen de la semana pasada, pero mañana nos lo vuelve a repetir y nose como sera, pero si algo parecido. Intentare sacarlo y a ver que tal se da la cosa.

Muchisimas gracias!!
 
:confused:

Reciba usted un cordial saludo, permítanme presentarme mi nombre es Gustavo Mtz, soy estudiante en México, la razón del presente mensaje es el de solicitar de la manera mas atenta su ayuda, ya que se presenta la situación de que necesito hacer un proyecto para detectar los caracteres de un modulo Parallax GPS Receiver Module 28146, en que este transmite ya la trama completa NMEC atreves de un solo pin, y se desea enviarlas a la computadora utilizando un PIC 16F876, via el protocolo rs232, la captura de la cadena de datos del GPS es por el pin C1, este es un código que estando probando pero no obtengo algún dato significativo, este es el código que estamos usando en la Escuela.

Código:
#include <16f876.h>
#device ADC=10
#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP,NOCPD,NOWRT

//SE DEFINE EL FORMATO PARA LA Tx a 9600 BAUDS VIA RS-232 STANDAR, DADO QUE SON LAS
//PROPIAS LIBRERIAS DEL COMPILADOR CCS, (VER EL LIBRO DE GARDER "PIC C")
//CON UN OSC. 4MHZ Vtx=1200 BAUDS , PARA UN OSC. 10MHZ  Vtx=9600

#use delay (CLOCK=20000000)
#use rs232 (BAUD=4800, XMIT=PIN_C6, RCV=PIN_C7)

// SE DEFINE LA DIRECCION DEL PUERTO B COMO ELEMENTO DE ENTRADA SALIDA.
// ASI COMO LA DIRECCION DE MEMORIA DE CADA UNO DE LOS DEMAS PUERTOS A,B,C.
// DICHA INFORMACION SE ENCUENTRA ESPECIFICADA EN EL REGISTRO DE MEMORIA DEL PIC.
// (MAYOR INFORMACIÓN DATA SHEET DE MICROCHIP [url]WWW.MICROCHIP.COM[/url]

#use fast_io (b)
#byte porta = 5
#byte portb = 6
#byte portc = 7

// SE INCLUYE EL ENCABEZADO DE LA LIBRERIA PARA LA OPERACION DEL LCD
// POR EL PUERTO B,OBSERVAR PROGRAMA lcd_b.c

#include <lcd_b.c>
#use standard_io(C)
#use standard_io(A)

int j=0; 
char cadena[71];
char *buffer=cadena; // UNION entre el puntero y el vector

#int_rda 

void recepcion_serie() // Rutina de interrupción por recepción serie 
  {   
   buffer[j] = getc(); 
   j++; 
 
  
  } 

void main() 
{
lcd_init(); 
lcd_putc("\fPreparando...\n");  
enable_interrupts(INT_RDA); 
enable_interrupts(GLOBAL); 

while(true)
   {if(cadena[17]=='V')
    { printf(lcd_putc,"\f ERROR DE\n\t RECEPCION");
     delay_ms(10);
    }
   else
      {If(input(pin_a1)==1)
         {printf(lcd_putc,"\fTiempo=%c%c:%c%c",cadena[7],cadena[8],cadena[9],cadena[10]);//imprime el tiempo
         printf(lcd_putc,"\nFecha=%c%c/%c%c/%c%c",cadena[55],cadena[56],cadena[57],cadena[58],cadena[59],cadena[60]);//imprime la fecha
         delay_ms(10);
         }
      else
         {printf(lcd_putc,"\fLat=%c%c%c%c.%c%c%c%c%c%c",cadena[20],cadena[21],cadena[22],cadena[23],cadena[25],cadena[26],cadena[27],cadena[28],cadena[29],cadena[30]); // imprime la latitud
          printf(lcd_putc,"\nLon=%c%c%c%c%c.%c%c%c%c%c%c",cadena[32],cadena[33],cadena[34],cadena[35],cadena[36],cadena[38],cadena[39],cadena[40],cadena[41],cadena[42],cadena[43]);//imprime la longitud
          printf(lcd_putc,"\n%d",j);
          delay_ms(10);
         }
      }
   if(j>=71)
      {buffer[71]=(0);
      j=0;
      }
   }
}


Como podrá ver son escasos mis conocimientos en Lenguaje C, pero mi preocupación es que no completo algún programa de prueba para leer los datos y enviarlos tanto al LCD


Por lo anterior quisiera pedirle su ayuda, si me podría ayudar a completar o efectuar dicha función, en algún programa con código en C atreves del código CCS 4.0 con que cuento, para cumplir dicha tarea de capturar los datos del gps via el puerto serie, o bien agrdeceria que me pudieran proporcionar alhun ejemplo para desplegar losdatos en un lcd de 2x16
 
Última edición por un moderador:
Hola a todos.

Excelente foro, todo lo que cualquier principiante en microcontroladores PICS necesita esta aquì. Felicitaciones a los creadores y colaboradores a este foro.

Me gustaria saber si alguien me puede ayudar con el siguiente proyecto.

Se necesita hacer un calendario con pic 16f628a y que tenga las siguientes caracteristicas.

Que muestre la fecha en un display lcd 2 x 16.(mes/dia/año)
Que muestre la Hora en el mismo display.(hh:mm:ss)
Que se pueda programar una alarma On/Off a una hora predeterminada (Cuatro eventos en el dia).


Ejemplo : que se prenda todos los dias a las 5:00 a.m. y se apague a las 06:00 am. Que se vuelva a Prender a las 14:00 y se apague a las 16:00 etc. Todo esto programable no fijo.

Por ultimo que trabaje con un reloj de tiempo real I2C.

Tengo ya algun codigo en desarrollo pero esta sin terminar.

Me ha dado mucho dolor de cabeza este proyecto ya que soy nuevo en esto de los PICS.

Agradeceria su ayuda. Gracias.
 
Me encata este foro me ha guiado en muchas ocasiones para practicar en ciertos temas.... ahora el problemita que tengo es con el puerto A del pic 16f877a he leido que tiene entradas y salidas digitales, y que hay que configurar el ADCON1 y modificar el registro TRISA, pero al poner los 3 primeros pines como entrada no me lo reconoce asi como no reconoce los que pongo como salida.... lo que quiero es encender un led del puerto A del pin A5 presionando un boton que se encuentra en el pin A0. Realmente no se que estoy haciendo mal. Agradeceria su ayuda. Gracias. Estoy usando MPLAB y Proteus.
 
Me encata este foro me ha guiado en muchas ocasiones para practicar en ciertos temas.... ahora el problemita que tengo es con el puerto A del pic 16f877a he leido que tiene entradas y salidas digitales, y que hay que configurar el ADCON1 y modificar el registro TRISA, pero al poner los 3 primeros pines como entrada no me lo reconoce asi como no reconoce los que pongo como salida.... lo que quiero es encender un led del puerto A del pin A5 presionando un boton que se encuentra en el pin A0. Realmente no se que estoy haciendo mal. Agradeceria su ayuda. Gracias. Estoy usando MPLAB y Proteus.
Pues para ayudarte siempre debes primero subir aqui el código que estas haciendo
para ver en donde esta el error, ya que así sin saber que estas haciendo es imposible.
Ni siquiera mencionaste en que lenguaje lo estas haciendo, solo que usas MPLAB y Proteus.
MPLAB trabaja varios lenguajes aunque su primordial sea el assembler. :apreton:
 
asi es es mplab assembler

Código:
LIST p=16F877A
INCLUDE<P16F877A.INC>

STATUS    equ   0x3
PORTA     equ   0x5
TRISA     equ   0x5
org 0x00
movlw B'00000110'
movwf ADCON1 
bsf STATUS,RP0
movlw B'00001111' ;bit 0-3 ENTRADAS y 4-7 SALIDAS
movwf TRISA
bcf STATUS,RP0 

INICIO
    btfss    PORTA,0        
    goto    ENCIENDE        
    bcf        PORTA,0       
    goto    ENCIENDE
ENCIENDE                    
    bsf        PORTA,0        
    goto    INICIO        
    END

es esto lo que ando haciendo no se si ando poniendo
mal lo de la entradas y salidas...:rolleyes:
 
Última edición por un moderador:
Elizabethcm.
Estas usando el pin del porta, como entrada, y despues lo forzas como salida.
asi no te trabaja para nada.O es entrada o es salida, pero no ambas
ademas asi tu codigo, mantendra encendido el led siempre
Que quieres hacer exactamente.:unsure::unsure:
¿Si el pin ra0 es cero, encender un led, y si es uno apagarlo?
 
Atrás
Arriba