# Crear un sistema operativo con el PIC 16F877



## rachet (Oct 18, 2005)

Hola a todos el gusto de entrar en este grandioso mundo de la electrónica fue genial ahora que voy avanzando en mi carrera quiero saber como puedo unir las funciones del PIC 16f877 en una sola para que luego estas sean llamadas por subrutinas pueden ayudarme!


----------



## Marcelo (Oct 18, 2005)

Rachet,

¿Podrías profundizar y explicarnos un poco más como funcionaría tu idea?

Explícanos bien que es lo que quieres hacer y así poder sugerirte algo.

No se si te refieres a hacer subrutinas que puedas llamar durante la programación del pic; pero si es así, te recuerdo que el assembler de microchip permite el uso de INC o includes.  Puedes hacer pequeñas rutinas de uso general que tengan variables de entradas y variables de salida y luego incluirlas en el encabezado del programa principal de tus proyectos y llamarlas con CALL, pasándole sus variables de entrada y leyendo las que te entrega (variables de salida).


Saludos,
Marcelo.


----------



## maunix (Oct 22, 2005)

rachet dijo:
			
		

> Hola a todos el gusto de entrar en este grandioso mundo de la electrónica fue genial ahora que voy avanzando en mi carrera quiero saber como puedo unir las funciones del PIC 16f877 en una sola para que luego estas sean llamadas por subrutinas pueden ayudarme!



Amigo, tu post es algo confuso.

Por un lado el asunto es crear un sistema operativo para el PIC16F877 y por el otro preguntas como unir las funciones del pic ?

Sería interesante que detalles a que te refieres con funciones del pic.  Te refieres a como enlazar los módulos del pic con subrutinas? Para poder llamarlos?

Lo que pretendes hacer es un software genérico que lo puedas acceder de afuera con simples comandos y que haga lo que tu le pidas? Si tu respuesta es SI, entonces tu quieres un interprete de comandos, no un sistema operativo.  

Sería bueno que aclares tu punto.


----------



## rachet (Oct 27, 2005)

Bueno lo que se quiere hacer en este foro es buscar una forma de hacer una funcion principal que pueda llamar a otras funciones y estas funcion tiene que hacer cada vez que llegue a una funcion determinada tengo el dato adiccional que va a corresponder, es decir que si tengo una funcion de escritura la funcion principal la llamara y esta le arrojara el dato aadicional que debe tener la funcion escribir datos


----------



## maunix (Oct 27, 2005)

rachet dijo:
			
		

> Bueno lo que se quiere hacer en este foro es buscar una forma de hacer una funcion principal que pueda llamar a otras funciones y estas funcion tiene que hacer cada vez que llegue a una funcion determinada tengo el dato adiccional que va a corresponder, es decir que si tengo una funcion de escritura la funcion principal la llamara y esta le arrojara el dato aadicional que debe tener la funcion escribir datos



*rachet* estoy tratando de hacer un esfuerzo para entenderte pero realmente no alcanzo a darme cuenta que es lo que quieres hacer!

Primero dices _"lo que se quiere hacer en este foro" _   Parece como que es un proyecto del foro o algo así, de que estas hablando?  

Todo lo que sigue realmente parece un juego de palabras.

Te pido qeu aclares tu punto porque sino me temo que no podré ayudarte en lo absoluto.


----------



## rachet (Nov 2, 2005)

Bueno es un proyecto o un Pat colectivo osea un proyecto de clase lo que se quiere es hacer un diseño de un sistema operativo con el 16f788 ya tenemos las funciones  o los programas individuales lo que nos falta es como se va a unir osea como puedo transformar un programa a una subrutina y llamarla desde una función principal y como adiciono el dato. la unica funcion que nos falta es la de red pero solo es la capa 2 del modelo osi, osea la de enlace, si puedes ayudarme muchas gracias .

Gracias POr Todo.


----------



## maunix (Nov 2, 2005)

rachet dijo:
			
		

> Bueno es un proyecto o un Pat colectivo osea un proyecto de clase lo que se quiere es hacer un diseño de un sistema operativo con el 16f788 ya tenemos las funciones  o los programas individuales lo que nos falta es como se va a unir osea como puedo transformar un programa a una subrutina y llamarla desde una función principal y como adiciono el dato. la unica funcion que nos falta es la de red pero solo es la capa 2 del modelo osi, osea la de enlace, si puedes ayudarme muchas gracias .
> 
> Gracias POr Todo.



Leo y releo tus posts y la verdad parecen escritos para hacerme enojar

No te responderé hasta no entender de que demonios estas hablando.

Me gustaria que envies este texto a otra persona que entienda de electronica de microcontroladores a ver si puede traducir tu idioma al castellano básico.

No puedo entender como gente relacionada al tema se pueda expresar en forma tan confusa, de hecho ya tiendo a pensar que todo esto es una tomada de pelo.

Saludos


----------



## Andres Cuenca (Nov 2, 2005)

Tienes razón magio, yo tampoco he podido entender que es lo que realmente necesita rachet, en un mensaje dice algo completamente diferente a lo dice en otro, es una completa locura.


----------



## maunix (Nov 2, 2005)

Li-ion dijo:
			
		

> Tienes razón magio, yo tampoco he podido entender que es lo que realmente necesita rachet, en un mensaje dice algo completamente diferente a lo dice en otro, es una completa locura.



Exacto .  Me he tomado mi tiempo para leer lo que dice tratando de 'interpretar' que demonios está intentando hacer.  Pero ni el más poderoso de los magos me pudo ayudar para decifrar el misterio.

Bromas aparte o es una broma de mal gusto o realmente a esta gente le hace falta muuuuuuuucho por estudiar, empezando por el idioma castellano.

No quiero ser agresivo pero cuando leo este tipo de posts realmente no se si la gente cree que uno tiene una bola de cristal como para saber que idea tienen en la cabeza.

A mi punto de vista no tienen realmente ninguna idea de lo que quieren hacer ni de lo que hace un sistema operativo y por eso esa forma engorrosa de decir .... NADA!


----------



## rachet (Nov 3, 2005)

Bueno me disculpo si piensa que estoy promiando no lo estoy soy Ingeniero de sistema lo que estamos tratando de hacer en nuestro proyecto es el diesño de un sisstema operativo para el pic 16f877, tenemos la mayoria de las funciones, pero hay que transformar las funciones en subrutina para que estas sean llamadas por una funcion principal el problema que se tiene es cada ves que se llame una funcion siempre se tiene que tener un Registro adiccional, el poco conocimiento de manejo de lenguajes de Pic es los que me tiene barado solo estoy pidiendo ayuda para poder armar mi proyecto  si se los explico con un programa en un lenguaje no entenderia bueno es lo siguiente 

funcion principal 
{
intruccion para llamar al registro adicional y las otras funciones
} 

funciones convertidas en subrutina
subrutina de leer en memoria eepron
{
}
subrutina de escribir en memoria eepron
{
}
etc
la unica que nos falta y creo que para mi conceto es la de funcion de red que solo abarca la capa 2 del modelo OSI osea la de enlace.

Gracias Por su atensión y Me di9sculpo


----------



## rachet (Nov 3, 2005)

Bueno ahora si puedes ayudarme... me disculpo por todo


----------



## maunix (Nov 8, 2005)

rachet dijo:
			
		

> Bueno me disculpo si piensa que estoy promiando no lo estoy soy Ingeniero de sistema lo que estamos tratando de hacer en nuestro proyecto es el diesño de un sisstema operativo para el pic 16f877, tenemos la mayoria de las funciones, pero hay que transformar las funciones en subrutina para que estas sean llamadas por una funcion principal el problema que se tiene es cada ves que se llame una funcion siempre se tiene que tener un Registro adiccional, el poco conocimiento de manejo de lenguajes de Pic es los que me tiene barado solo estoy pidiendo ayuda para poder armar mi proyecto  si se los explico con un programa en un lenguaje no entenderia bueno es lo siguiente
> 
> funcion principal
> {
> ...



No estuve visitando el foro eso es todo.

De todas formas... sigo sin entender!!!


por ejemplo: *¿se llame una funcion siempre se tiene que tener un Registro adiccional ?*

Te refieres a llamar a funciones con parámetros???? o a subrutinas con parámetros? Este es tu punto?


----------



## rachet (Nov 10, 2005)

Para llamar a una funcion dentro de otra siempre debes tener un registro auxiliar para que no se pierdan los datos y estas funciones se transformadorrman en subfunciones llamadas subrutinas


----------



## maunix (Nov 15, 2005)

rachet dijo:
			
		

> Para llamar a una funcion dentro de otra siempre debes tener un registro auxiliar para que no se pierdan los datos y estas funciones se transformadorrman en subfunciones llamadas subrutinas



Pues claro.  Esto no es física de cohetes, es programación básica.

El punto es que recien ahora despues de unos 5 posts de cada uno, he entendido que desean hacer.

Y lo que necesitan hacer es una pila por software.  En la pila se mandan los datos antes de entrar a la subrutina "PUSH" (parámetros) y en la subrutina hacen la extracción de los datos "POP".  

Eso es simplemente lo que necesitan, una pila por software.

Una función es también una subrutina así que no hay tal diferencia.  De hecho ambas son llamadas con parámetros y tiene códigos de retorno.
El agregado de una función simplemente tiene la finalidad de devolver un valor.

Para la pila deberán reservar una buena sección de memoria destinada solo a ella, y que tenga espacio suficiente como para almacenar todas las llamadas recursivas que hagan a subrutinas.  De este modo se garantiza que no se sobreescriba la memoria que pertenezca a otros datos.


----------



## zoniko (Nov 15, 2005)

Lo unico que tienes que hacer es declarar tu subrutinas para eso lo unico que tienes que hacer es:


main
      call fulanito
      goto main

fulanito
     molw 0x00
     movwf var
     return

END

Las subrutinas o funciones tienen que ser declaradas dentro del programa principal o son llamadas solamente por la instruccion call, es importante que en cada funcion al finalizar dicha funcion pongas return.


----------



## maunix (Nov 16, 2005)

zoniko dijo:
			
		

> Lo unico que tienes que hacer es declarar tu subrutinas para eso lo unico que tienes que hacer es:
> 
> 
> main
> ...



Amigo creo que no estas reflejando lo que quiere hacer rachet.

De la forma que tu expones no pasas ningun parámetro.

Para un SO que requiera llamar a subrutinas desde otra subrutina en forma genérica la mejor forma es la pila.


----------



## rachet (Nov 21, 2005)

Bueno me disculpo si estaba un poco molesto lo que pasa es que no habia mucho tiempo para entregar si quiera algo lo que hicimos fue transformar las funciones en subrutinas quiere decir que al final de cada funcion las retornamos a la funcion pri¡ncipal donde esta se llamaba, agradesco mucho por la ayuda y los beneficios prestados por ustedes y esta pagina, claro ahora vamos a tratar de aprender un poco mas de los circuitos y celulares y la programciones de pines para cosas que dejen utilidad a nuestra vida no dinero sino como un poco de tiempo y sin mucho esfuerzohacer las cosas mas faciles.

Gracias


----------



## maunix (Nov 21, 2005)

rachet dijo:
			
		

> Bueno me disculpo si estaba un poco molesto lo que pasa es que no habia mucho tiempo para entregar si quiera algo lo que hicimos fue transformar las funciones en subrutinas quiere decir que al final de cada funcion las retornamos a la funcion pri¡ncipal donde esta se llamaba, agradesco mucho por la ayuda y los beneficios prestados por ustedes y esta pagina, claro ahora vamos a tratar de aprender un poco mas de los circuitos y celulares y la programciones de pines para cosas que dejen utilidad a nuestra vida no dinero sino como un poco de tiempo y sin mucho esfuerzohacer las cosas mas faciles.
> 
> Gracias



Bueno, que bueno que hayas podido conseguir solucionar tu problema.

De todas formas, tampoco te entendí esta frase jajajaja.

Realmente el castellano puede parecer simple para los hispano hablantes pero considero que hay grandes diferencias de país a país.  Tal vez para tu país tu oración es un mensaje claro, para mi son unn monton de palabras confusas.  Traté de hacer un esfuerzo pero realmente me cuesta entender, supongo también algo de culpa hay de mi parte     8)


----------



## sterling ader. de jesus (Dic 6, 2005)

hola  que tal 
creo que lo que intentas decir es :
    como hacer llamar la sub_rutinas una vez que las creas ?
si es esta la pregunta ,

 1ro) crea tu programa principal y agrega las sub_rutinas al mismo.

 recuerda que para ejecutar las sub_rutinas solo tienes que hacer uso de las intrucciones?



 call n(para llamar la subrutina , donde x es el nombre de la sub_rutina que deseas llamar)

 return(para retornar al cuerpo del programa una vez se halla concluido  la sub_rutina)

 goto (es una llamada incondicionar )........


-*-----------------------------------------


me gustaria saber el tipo de programador que estas implementando para programar 
 el pic 16f877.... circuito electronico .. por favor...

          bay........suerte


----------



## maunix (Dic 7, 2005)

Jesus creo que has caido medio offtopic.  Este hilo se terminó hace rato y la verdad nunca supieron ser claros en lo que necesitaban.

Eso que tu planteas es simplemente una llamada a subrutina

Con respecto al programador de pic, hay muchos, yo personalmente uso el picstartplus de microchip , pero hay varios otros que funcionan bien.  El más economico y que funciona + o - bien para proyectos amateur es el JDM programmer, hay muchos similares y 'copiados' que hacen exactamente lo mismo.

Para programar usas el software ICPROG o WINPIC800

Tambien hay varios hilso aqui que trata del tema. te invito a que hagas una busqueda

Saludos


----------



## FueraDeLugar (Abr 25, 2006)

Un sistema operativo no es solo subrutinitas que saltan de aqui a allá, o funcioncitas recursivas, se que ya el tema terminó, pero razón tiene magio de haberse molestado. Tengo conocimiento de sistemas operativos embebidos y de verdad que el tema no fue nada claro.


----------



## maunix (Abr 26, 2006)

FueraDeLugar dijo:
			
		

> Un sistema operativo no es solo subrutinitas que saltan de aqui a allá, o funcioncitas recursivas, se que ya el tema terminó, pero razón tiene magio de haberse molestado. Tengo conocimiento de sistemas operativos embebidos y de verdad que el tema no fue nada claro.



Asi es, fue así como tu lo describes... como verás puse 'todo de mi' para interpretar lo que estaban haciendo pero realmente me fue imposible captar la escencia de lo que querían hacer.

Una cosa es pasar un parámetro a una subrutina y otra armar o diseñar un sistema operativo,  encima con las complicaciones que tiene un hardware limitante como el de un pic.


----------



## cronodragon (Abr 26, 2006)

Yo tampoco entiendo nada de lo anterior, pero que seas Ingeniero en Sistemas ayuda bastante. Lo que debes hacer como Ingeniero es bajar los manuales de programación del PIC, y ahí encontrarás toda la información que necesitas.


----------



## maunix (Abr 29, 2006)

cronodragon dijo:
			
		

> Yo tampoco entiendo nada de lo anterior, pero que seas Ingeniero en Sistemas ayuda bastante. Lo que debes hacer como Ingeniero es bajar los manuales de programación del PIC, y ahí encontrarás toda la información que necesitas.



Ayuda el leer... mas que nada.  Yo soy ingeniero electrónico y la información que tengo o que se de sistemas operativos la se por leer textos o cosas que me interesaban a mí pero que no era contenido usual en ninguna materia de las que cursé.....

Creo que muchas cosas tienen que ver con lo que uno se especializa o en lo que a uno le gusta y no tanto en el título que uno tenga


----------



## cronodragon (Abr 29, 2006)

Te doy la razón. También me di cuenta que mi mensaje llegó algo tarde, pero igualmente leer los manuales del PIC te puede ayudar. Saludos!


----------



## FueraDeLugar (May 17, 2006)

Hola a todos, les escribo para lo siguiente. He diseñado un kernel para que un PIC 16F877A pueda trabajar en un entorno de multiprocesamiento, es un proyecto humilde y me gustaría compartir con todos este trabajo y que todos puedan ser partícipe de su evolución.

La página es esta: www.araguaney.loquequierasya.com

Es la primera página web que construyo, asi que tengan paciencia...

Gracias de antemano por el apoyo que puedan brindar a esto.


----------



## Maritto (Mar 2, 2008)

Hola! maunix, debido a tu basta experiencia, que contrasta con mis apenas 7 añitos en la electronica (los ultimos 4 abocados a PIC, tengo 19), tengo que aclararte que, como el amigo FueraDeLugar postea, es mas que posible generar un kerenel lo bastantemente pequeño como para trabajar dentro de un PIC! si, es posible, de hecho, en la facultad (voy a 3ro de ingenieria electronica en la UTN FRC), nos comentaron que un nucleo de linux se podria reducir tanto que cabería en un 16F877!
Que loco no? no se si se llamaria Linux, pero la cuestion, es que un hardware limitante, enrealidad no es "limitante"(valga la redundancia) puesto que un kerenel se adapta a este hardware, para utilizarlo y hacerlo trabajar con otras prioridades o normas.

Cabe aclarar que el amigo que comenzo este post, no tenia muy claro lo que queria hacer, seguro no pudo atinarle a un compilador C para pics, de haber sido asi y siendo ingeniero en sistemas, no habria tenido problema en generar funciones con paso de paramentros y retorno, que es algo totalmente distinto a un sistema operativo, cuya base fundamental es el kerenel!

Ojala que esto salga lindo! y arriba con la paciencia! se que cuesta pero es ser paciente o reventar, algunos simplemente no estamos lo suficientemente formados como para expresarnos de la forma mas adecuada ni clara! estamos aca para aprender no? ejje

Un abrazo!

Luis David


----------



## itvboy (Ago 6, 2008)

Mi punto de vista es que un ingeniero en sistema deberia de poder expresar mejor lo que quiere hacer, almenos que no sepa que quiera hacer.
Seria intereante armar un sistema operativo en tiempo real para pics, pero esto involucra mas que simplemente rutinas que se llaman, involucran crear un kernel multitasking, con un compilador propio para enlazar programas, porque un sistema operativo debe ser capaz de cargar programas.

Que tal si nos animamos en un proyecto de un sistema operativo multitasking y multiprocesadores para pic. Osea que pueda correr en varios procesadores, yo la verdad ultimamente utilizo mas de un pic en todos mis disenios.

Bueno, suerte con el proyecto.


----------



## sguerrero (Dic 14, 2008)

Hola chicos ley por accidente el contenido del foro y me parecio interesante estoy intentando crear un sistema multiproceso pequeño como para un 16f84 solo para controlar funciones basicas un tren de pulsos y monitoriar al mismo tiempo una linea de entrada y segun su estado generar otra salida sin descuidar el tren de pulsos. tengo conocimientos en general del pic en cuanto a programacion de hecho he realizado algunos proyectos. sera factible realizar ese pequño multiproceso? podrian indicarme algun sitio web con documentacion aparte de microchip

gracias 
saludos
Sergio Andrade


----------

