Programas hechos en MPLAB

...según mi libro de C si no coloco nada el compilador me toma la cantidad de variables de acuerdo a la cantidad de valores que yo le asigne entre los {}.
Por eso puse que sólo en PIN[] se podía saber el tamaño.

Pero ojo, CCS es una colección de bugs.
Con arrays bidimensionales en C basta declarar el número de columnas y las filas las saca de lo declarado entre {} .
Pero al menos en la versión que yo tengo (4.104), si el array es de constantes (const int X[n][]) te lo llena con cualquier cosa. Sólo declarando explícitamente las filas lo arma bien.
 
Muy interesante lo que comentas Eduardo. Convendría pasarse a programar C con MPLAB o HITECH? Tengo la misma versión de CCS que vos y creo que es la ultima.

Saludos
 
hola voy a poner todos los programas que he hecho en ccs c compilado en mplab...soy uevo en este foro y como todos estube investgando como funciona nada funcion.

este es un simple parpadeo de un led...
(los programs fueron hechos por mi no por copy paste de otros citios)


Código:
/////////////////////////////////////////////////////////////////////////////

#include<16f628a.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)
#byte TRISB=0x86
#byte PORTB=0x06


void main(void){
	TRISB=0x00;
	PORTB=0x00;
	do{
		output_high(PIN_B0);
		delay_ms(1000);
		output_low(PIN_B0);
		delay_ms(1000);
	}while(TRUE);	

}

puse abajo un practica hecha en proteus 7.4 apra que puedas bajarlo y compilador en mplab.

hola como están, estoy comenzando con ccs generalmente uso basic pero manejo bastante bien c++ y quiero aprender a programar pic pero tengo algunas preguntas.

en este primer ejemplo tu colocas :
#include<16f628a.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)
#byte TRISB=0x86
#byte PORTB=0x06

y si uno entra a 16f876a que es el que estoy utilizando yo
me muestra:
#define PIN_A0 40
#define PIN_A1 41
#define PIN_A2 42
#define PIN_A3 43
#define PIN_A4 44
#define PIN_A5 45

#define PIN_B0 48
#define PIN_B1 49
#define PIN_B2 50
#define PIN_B3 51
#define PIN_B4 52
#define PIN_B5 53
#define PIN_B6 54
#define PIN_B7 55

#define PIN_C0 56
#define PIN_C1 57
#define PIN_C2 58
#define PIN_C3 59
#define PIN_C4 60
#define PIN_C5 61
#define PIN_C6 62
#define PIN_C7 63

por que entonces colocas "#byte PORTB=0x06" ya en el "#include<16f628a.h>" no esta definido todo esto?
 
No. Además el significado de #byte es diferente al de #define.

Si te quedan dudas, o bien mirá el contenido del 16F628A.h o bien tratá de compilarlo sin esa línea.

:unsure:, es para darle un nombre completo al puerto b?
corrí este programa

#include <16C84.H> /* tipo de PIC */
#use delay( clock = 4000000 ) /* reloj de 4 MHz */
#byte puerto_b = 06 /* dirección del puerto B */
void main( void )
{
set_tris_b( 0x00 ); /* puerto B como salida */
puerto_b = 0; /* apaga todos los led */
do{
delay_us( 1000 ); /* retardo de 1000 (seg. */
bit_set( puerto_b, 7 ); /* enciende el led RB7 */
delay_us( 1000 ); /* espera 1 ms*/
bit_clear( puerto_b, 7); /* apaga el led */
} while( TRUE ); /* Repetir siempre */
}
 
#byte nombre = 0xnn ubica la variable nombre en la dirección 0xnn.
Como 0x06 es la dirección del puerto B, lo que escribas en nombre es lo que vas a tener en los pines.
Cuando el puerto no se usa como byte, sino como una mezcla de entradas y salidas de 1 o varios bits, se declara una estructura y se la asigna a esa dirección.

#define nombre xxxx yyy zzzz.... en cambio, reemplaza cada aparición de nombre por xxxx yyy zzzz.... (durante la compilación)
 
tengo otra pregunta en basic pro hay una instrucción que es pulsin:

PULSIN PORTB.4,1,W3 ' Measure high pulse on Pin4 stored in W3

la cual sirve para saber el tiempo entre las partes positivas o negativas de una señal a la entrada de algun pin y guardarlo en una variable w3, mi pregunta es ¿existe algun comando asi en ccs c?
 
Ola a todos baje el proyecto de george de la matriz de 8x8 en c y la verdad esta muy bueno le entiendo mas al c que al asmpero lo intento practicar mi duda es que como le puedo hacer para que la letra se deslize de derecha a izquiersa como los letreros electronicos espero puedan decirme que intruccion usar o como quedaria el codigo de antemano gracias

posdata. este post esta genial sigan asi todos
 

Adjuntos

  • matrix_149.rar
    78.3 KB · Visitas: 302
ya encontre el programa de la matriz aora surguio otro problema ya tengo el material fisicamente pero cuando conecto todo la matriz se enciende pero no hace ninguna letra no se si mi matriz de 8x8 tenga pines ya designados ejemplo pin 1 el 2 etc o pueda poner lo pines como quiera
 
hola gollazo

a mi me surgio ese poblema cuando la utilize por primera vez, y lo que pasa es q los pines de la matriz no estan en orden, tienes q, con ayuda de un multimetro puede ser, identificar las columnas y las filas y luego de ello conectar como es debido, asi saldra el mensaje q quieres,
me explico un poco mejor,,, hay matrices donde los leds se activan con las filas en anodo y las columnas en catodo, y otras de forma inversa, asi que hay que ubicar puede ser tierra en un pin y vcc en los demas, te encendera bn toda una fila o toda una columna, si no pasa nada, pon vcc en ese pin y tierra en los demas, y veras una fila o una columna encendida, asi identificaras que pines corresponden a las columnas y cuales a la filas

espero le sirva.... saludos.......

no olvides que el pograma tiene q estar adecuado para activar las filas y las columnas segun la matriz q tienes.......

sigo con mi duda sobre interrupciones!!! plis si alguien puede ayudarme un poquito se lo agradeceria mucho!!!

que duda tienes mas especificamente, como realizar cualquier tipo de interrupcion? ademas q compilador trabajas pic ccs, mikroc,..., asembler,,,, ya las he manejo y espero poder colaborarte

saludos...........
 
Última edición:
Hola EINNER C me sirvio de mucho tu ayuda gracias ya lo conecte y quedo de lujo aora el siguiente reto es que de deslize mi letrero .COSMICO me dijo que ojas mas atras estaba la respuesta pero no lo encuentro XD voy a buscarlo bien espero y lo encuentre


Otra duda que tengo es porque la matriz de led 8x8 me parpadea mucho y quiero que se vea mejor pero no se si es el crystal o el tiempo que le doy para que pase a la siguiente leta el tiempo de de 5ms
 
Última edición:
Otra duda que tengo es porque la matriz de led 8x8 me parpadea mucho y quiero que se vea mejor pero no se si es el crystal o el tiempo que le doy para que pase a la siguiente leta el tiempo de de 5ms

pues no estoy muy seguro pero lo q creo, y si no estoy mal, lo mas normal y para q se vea fluido es q se muestren 30 fps, y creo q tu tiempo es muy grande ya q son 8 columnas, deberias dejarlo en 2ms, asi aseguras q se vea bn, y el micro vaa responder sin dudda.....
 
hola soy nuevo en el foro y mi pregunta es alguien encontrado el programa para enviar y recibir datos por el puerto usb en mplab o vasic gracias de ante mano soy nuevo y estoy preocupado por un trabajo que tengo que hcer en un curso....gracias se que me podran ayudar
 
Buenas tardes amigos, sigo con el control de motores paso a paso, todo ha marchado bien hasta que implemente la funcion kbhit(), ya que no entra al ciclo el código es algo así:
// ESTO ES DENTRO DEL MAIN
while(1){
int a=0;
delay_ms(1000);
puts("running......");
if (kbhit()){
char parametros[20];
int g;
gets(parametros);
m0= (parametros[0]);
m1= (parametros[1]);
m2= (parametros[2])-48;

bueno esto funcionaba mas que bien antes de aplicarle el "if (kbhit()){", pero ahora no ejecuta nada ya que necesito capturar una cadena completa que se envia desde una interfaz en VB.NET, he investigado y todo me conduce a el uso de "getc()", pero veo que solo sirve para capturar un carácter; pero ya aplicandolo descubri que captura hasta 2 carácteres, por eso les pido su ayuda.

Espero noticias pronto de uds.

Saludos
 
Buenas tardes amigos, sigo con el control de motores paso a paso, todo ha marchado bien hasta que implemente la funcion kbhit(), ya que no entra al ciclo el código es algo así:
// ESTO ES DENTRO DEL MAIN
while(1){
int a=0;
delay_ms(1000);
puts("running......");
if (kbhit()){
char parametros[20];
int g;
gets(parametros);
m0= (parametros[0]);
m1= (parametros[1]);
m2= (parametros[2])-48;

bueno esto funcionaba mas que bien antes de aplicarle el "if (kbhit()){", pero ahora no ejecuta nada ya que necesito capturar una cadena completa que se envia desde una interfaz en VB.NET, he investigado y todo me conduce a el uso de "getc()", pero veo que solo sirve para capturar un carácter; pero ya aplicandolo descubri que captura hasta 2 carácteres, por eso les pido su ayuda.

Espero noticias pronto de uds.

Saludos

define las variables antes de la funcion principal que es main, no es recomendable declarar variables antes del proceso...
despues de eso parece estar todo bien....cuando pones la funcion gets tambien captura el terminator algo asi,, que el null y tambien podria contar entonces si envias una cadena de caracteres por ejemplo 3 caracteres en realizad resiviras 4 ya que el caracter null.

SALUDOS!!!
 
gracias george.manson.69 por responder tan pronto, te agradezco, fijate que ya he hecho eso de la declaracion de las variables antes del main pero igual, da los mismos inconvenientes, y como decía la funcion gets() si me captura toda la cadena, pero solo si le quito la funcion kbhit(), vale la pena decir q la cadena podra ser hasta de 10 caracteres, he estado experimentando con fgetc(), getc(), pero no me captura mas de 2 caracteres, espero me puedan hechar la mano en eso...

saludos amigos..... Suerte.........
 
Buen día amigos, he logrado resolver los problemas que les habia planteado antes de captura de carácteres, pero ahora necesito su ayuda para conectar el MAX232 al circuito q controla los motores, espero me puedan ayudar, adjunto dejo el archivo de proteus, espero su ayuda...
Saludosss....:)

Perdon, pero no había djuntado el archivo, hoy si hay esta...
Suerte amigos....
Saludos....

aki esta jejejeje.....
 

Adjuntos

  • SIMULACIÓN PROTEUS.rar
    65.5 KB · Visitas: 109
Última edición:
Atrás
Arriba