Programas hechos en MPLAB

Este es un simple parpadeo de un led...

Nota: Los programas fueron hechos por mi no es un copy/paste de otros sitios)

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.
 
Última edición por un moderador:
este es un simple contador de 0 a 9;
donde solo se utiliza un display de catodo comun en el puerto b del pic

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;CONTADOR 0 A 9
//DATE:23/ABRIL/2009
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16f628a.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)


//INICIO DEL PROGRAMA///////////////
void main(void){

//VARIBALES///////////////////////////
	int mostrar[]={0b11000000,0b11111001,0b10100100,0b10110000,
				   0b10011001,0b10010010,0b10000011,0b11111000,
				   0b10000000,0b00011000};
	int contador;
//CONFIGURACION E/S///////////////

	set_tris_b(0x00);
	do{
		for(contador=0;contador<=9;++contador){
			output_b(mostrar[contador]);
			delay_ms(1000);
		}
	}while(TRUE);
}
 
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT


que hace el INTRC_IO?

segui posteando!

___________________________________________________________________________________

vegetal digital

INTRC_IO es una instruccion que te permite usar el oscilador interno del pic16f628a
y se usan como entrada o salida los pines donde debe de ir el oscilador externo...
 
este programa hace un scroll de un led ...en el puerto b del pic...de un solo lado va estar corriendo el led...mientras no sea pulsado el push botton que esta en el pin0 del pic..del puerto a. y si es pulsado
el led el scroll se dirijira al lado contrario al que estaba

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;FUNCIONES DEL CCS C COMPLIER
//DATE:27/ABRIL/2009
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16f628a.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)

retorna(int c);

void main(void){
		int a;
		set_tris_b(0x00);
		set_tris_a(0x21);
		a=1;

		do{
			output_b(a);
			if(a==128)
				a=1;
			else
				a=a<<1;
			delay_ms(100);
			if(input(PIN_A0))
				a=retorna(a);
			
		}while(TRUE);
}

retorna(int c){

		do{
			if(c==1)
				c=128;
			else 
				c=c>>1;
			output_b(c);
			delay_ms(100);
		}while(input(PIN_A0));
		return(c);
}
 
este programa es un simple deodificador de 0 a 7, donde se usa tres pulsadores en el puerto a...se le introduce un numero binario de 000 a 111 para que en el display de anodo comun aparesca el 0 a 7,...

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;DECODIFICADOR
//DATE:23/ABRIL/2009
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16f628a.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)


//INICIO DEL PROGRAMA////////////////////
void main(void){
	
		int mostrar[]={0b11000000,0b11111001,0b10100100,0b10110000,
				       0b10011001,0b10010010,0b10000011,0b11111000};
		int numero;
		set_tris_b(0x00);
		set_tris_a(0xff);
		setup_comparator(NC_NC_NC_NC);
		
		do{
			numero=input_a();
			output_b(mostrar[numero]);
		}while(TRUE);
		
}
 
Simple programa que controla un lcd....

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;CONTADOR 0 A 9
//DATE:23/ABRIL/2009
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16f628a.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include<LCD.C>

int x[]={"hola"};
int y[]={"JORGE"};
int i;

void main(){
	lcd_init();

	for(i=0;i<=3;i++){
		lcd_putc(x[i]);
		delay_ms(1000);
	}
	lcd_putc("\n");
	lcd_putc("# es; ");
	for(i=0;i<=4;i++){
		lcd_putc(y[i]);
		delay_ms(1000);
	}
	lcd_putc("\f otra vez?");

}
 
Este prgrama hace una comunicacion serial con la compu y el pic...

si quieres verlo que funcione entra a youtube...y busquen "godness006"
ahi etsan algunos proyectos que he hecho

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;TERMINAL VIRTUAL
//DATE:24/ABRIL/2009
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16F628A.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=2400,xmit=PIN_B6,rcv=PIN_B7)

void main(void){
		int VALOR;
		set_tris_b(0x80);
		
		do{
			for(VALOR=0;VALOR<=10;VALOR++){
				printf("EL VALOR ES: %u\r",VALOR);
				delay_ms(1000);
			}
		}while(TRUE);

}
 

Adjuntos

  • hercules_3_2_1_950.7z
    417.1 KB · Visitas: 957
Este programa lo que hace...por medio de la computadora vas a ingresar a un numero del teclado de la compu, al display.

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;DECODIFICADOR_RS232
//DATE:03/MAYO/2009
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16F628A.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=2400,xmit=PIN_B6,rcv=PIN_B7)

void config(void){
		set_tris_a(0x20);
		set_tris_b(0x80);
		setup_comparator(NC_NC_NC_NC);
}

void main(void){
		int mostrar[]={0b10000000,0b11011001,0b01000100,0b01010000,0b00011001,
					   0b00010010,0b00000011,0b11011000,0b00000000,0b00011000};
		int x;	
		config();
		
		output_a(0b10000000);
		do{
			x=getc();
			switch(x){
					case 48: output_a(mostrar[0]); break;
					case 49: output_a(mostrar[1]); break;
					case 50: output_a(mostrar[2]); break;
					case 51: output_a(mostrar[3]); break;
					case 52: output_a(mostrar[4]); break;
					case 53: output_a(mostrar[5]); break;
					case 54: output_a(mostrar[6]); break;
					case 55: output_a(mostrar[7]); break;
					case 56: output_a(mostrar[8]); break;
					case 57: output_a(mostrar[9]); break;
 			}
		}while(TRUE);
}
 
Código:
//------------------------------------
//TITULO: SENSOR DE TEMPERATURA Y ENVIADO A LA PC
//AUTOR: JORGE ARTURO RODRIGUEZ HERNANDEZ
//FECHA: 12\JUNIO\'09
//------------------------------------

#include <12f675.h>
#fuses XT,NOWDT,NOCPD,NOPROTECT,MCLR,NOPUT
#use delay(clock=4000000)
#use rs232(baud=2400,xmit=PIN_A2,rcv=PIN_A1)

void config(void){
		set_tris_a(0x3b);
		setup_comparator(NC_NC_NC_NC);
		setup_adc(ADC_CLOCK_INTERNAL);
		setup_adc_ports(sAN0);
}

void main(void){
		int x,y;
		config();
		
		do{
			x=read_adc();
			delay_ms(500);
			y=2*x;
			printf("LA TEMP= %u",y);
			printf("°C\r\n");
		}while(TRUE);
}
 

Adjuntos

  • temperatura_589.7z
    7.5 KB · Visitas: 883
\\ simple circuito con un pic16f887, que se trata de un teclado analogo, escribimos la contrasena o la podemos cambiar.

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;CONTRASENA
//DATE:18/JUNIO/'09
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16f887.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT,NOPUT
#use delay(clock=8000000)
#include<LCD.C>

int LEER_TECLADO;
int TECLADO[]={"0123456789#*"};
int UNO,DOS,TRES,CUATRO;
int UNO_P,DOS_P,TRES_P,CUATRO_P;
int GOA,i;

void config(void){	
		write_eeprom(0x04,1);
		write_eeprom(0x05,2);
		write_eeprom(0x06,3);
		write_eeprom(0x07,4);
		set_tris_a(0x01);
		set_tris_c(0x00);	
		setup_comparator(NC_NC_NC_NC);
		setup_adc(ADC_CLOCK_INTERNAL);
		setup_adc_ports(sAN0);
		output_low(PIN_C0);
		lcd_putc("\fCOMPILED ON\n");
		lcd_putc(__DATE__);
		delay_ms(2000);
}

ADC(int VALOR_ADC){
NO_PULSADO:
			delay_ms(10);
			VALOR_ADC=read_adc();
			if(VALOR_ADC>140){
				goto NO_PULSADO;
			}
			else if(VALOR_ADC<24){
				VALOR_ADC=1;
			}
			else if(VALOR_ADC<43){
				VALOR_ADC=2;
			}
			else if(VALOR_ADC<60){
				VALOR_ADC=3;
			}
			else if(VALOR_ADC<74){
				VALOR_ADC=4;
			}
			else if(VALOR_ADC<88){
				VALOR_ADC=5;
			}
			else if(VALOR_ADC<98){
				VALOR_ADC=6;
			}
			else if(VALOR_ADC<108){
				VALOR_ADC=7;
			}
			else if(VALOR_ADC<114){
				VALOR_ADC=8;
			}
			else if(VALOR_ADC<122){
				VALOR_ADC=9;
			}
			else if(VALOR_ADC<128){
				VALOR_ADC=0;
			}
			else if(VALOR_ADC<137){
				VALOR_ADC=10;
			}
			else if(VALOR_ADC<140){
				VALOR_ADC=11;
			}	

		return(VALOR_ADC);
}

void ESCRIBIR_PASSWORD(void){
			
		for(i=0;i<=3;i++){
			delay_ms(500);			
			LEER_TECLADO=ADC(LEER_TECLADO);
			write_eeprom(i,LEER_TECLADO);
			lcd_putc(TECLADO[LEER_TECLADO]);
		}
			delay_ms(500);
}

void CAMBIAR(void){
			lcd_putc("\fESCRIBE AHORA\n");
			ESCRIBIR_PASSWORD();

			UNO=read_eeprom(0x00);
			DOS=read_eeprom(0x01);
			TRES=read_eeprom(0x02);
			CUATRO=read_eeprom(0x03);
			
			write_eeprom(0x04,UNO);
			write_eeprom(0x05,DOS);
			write_eeprom(0x06,TRES);
			write_eeprom(0x07,CUATRO);
			lcd_putc("\fCAMBIADO");
			delay_ms(1000);
}

void CHEKAR(void){
			UNO=read_eeprom(0x00);
			DOS=read_eeprom(0x01);
			TRES=read_eeprom(0x02);
			CUATRO=read_eeprom(0x03);

			UNO_P=read_eeprom(0x04);
			DOS_P=read_eeprom(0x05);
			TRES_P=read_eeprom(0x06);
			CUATRO_P=read_eeprom(0x07);
}

void main(void){
		lcd_init();
		config();
AGAIN:
	do{
		lcd_putc("\fCHANGE->(*)\n");
		lcd_putc("ENTER-->(#)");
		
		GOA=ADC(GOA);
		switch (GOA){
			case 10:
					lcd_putc("\fPASSWORD:\n");
					ESCRIBIR_PASSWORD(); 
					goto CHEK;	
			case 11: 
					lcd_putc("\fESCRIBE EL\n");
					lcd_putc("PASSWORD 1ERO");
					delay_ms(800);
					lcd_putc("\fTYPE NOW\n");
					ESCRIBIR_PASSWORD();
					CHEKAR();
					if(UNO==UNO_P && DOS==DOS_P && TRES==TRES_P && CUATRO==CUATRO_P){
						lcd_putc("\fCORRECTO");
						delay_ms(1000);
						CAMBIAR();
					} 
					else
						lcd_putc("\fINCORRECTO");
						delay_ms(1000);
					break;
		}
	}while(TRUE);

CHEK:		CHEKAR();

			if(UNO==UNO_P && DOS==DOS_P && TRES==TRES_P && CUATRO==CUATRO_P){
					lcd_putc("\fCORRECTO");
					output_high(PIN_C0);
			}
			else
					lcd_putc("\fINCORRECTO");
			delay_ms(3000);
			output_low(PIN_C0);
			goto  AGAIN;
				
}
 

Adjuntos

  • contrasena_614.7z
    19.1 KB · Visitas: 594
este circuito lo que haces es por medio de la computadora tenemos un programa llamado hercules que hace la comunicacion serial con el pic, bueno por medio de este programa introducimos un password en este caso es "hola", si es asi prendera un led indicando que se activo algo, y si ponemos otra palabra que no sea "hola" prendera otro led indicando que esta mal el password.

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;PASSWORD
//DATE:25/ABRIL/2009
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16F628A.h>
#include <STRING.H>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=2400,xmit=PIN_B6,rcv=PIN_B7)

void main(void){
		char password[6];
		char numero[]="hola";
		set_tris_b(0x80);
		setup_comparator(NC_NC_NC_NC);

		printf("ESCRIBA EL PASSWORD PORFAVOR: \r");
		while(TRUE){
			printf("PASSWORD: %S\n ",gets(password));
			if (!strcmp(password,numero)){
				printf("BIEN \r");
				output_high(PIN_B0);
				output_low(PIN_B1);
			}
			else{
				printf("MAL \r");
				output_low(PIN_B0);
				output_high(PIN_B1);
			}
		}
}

bueno tengo un programa llamado configure virtual serial port es bueno para simular puertos seriales y ya podras conectadorlo con proteus con el compim que se encuentra en las librerias.
 
Hola george manson , una pregunta : ese programa CCS, se puede bajar ? yo tengo el MPlab pero no se como programar en C. ¿ Con el Mplab me alcanza para programar PICs en lenguaje C ?
 
la respuesta es si...yo tengo mplab y pss le agrege el picbasic pro y el ccs c solo necesitas unos plugings para adierirlo a mplab..busca en google "ccs c compiler rapidshare" algo asi era....y bajo...y me dices despues te lo pasaria pero no tengo el instalador...:(
 
pss deja empezar a buscar, a lo mejor un amigo tenga aun el instalador, se lo habia pasado anteriormente pero como quiera intenta bajar todos los que encuetres en rapidshare, solo los que digan version 4.xxx, y no los de 3.xxx son mas viejos y no e conviene...deja lo consigo y te lo envio...pero como quiera busca...
los ploguins no se como se escriba...sirven para aderir el ccs c a mplap...debolada se encuentra esos en google....y debolada se instalan :).-..espero conseguir el progarma la otra semana y te lo envio...
 
gracias geroge ya encontre uno en rapidshare, una version 4. algo. Te agradesco igual, ya lo instale y anda joya. Ahora falta solo aprender un poco de programacion.
Saludos
 
estos dos programas uno es el transmisor y el otro el reseptor, lo puse a 1200 baudios porque me funciono correctaente le aumentaba los baudios y no lo captaba muy bien el receptor. el transmisor es TWS434 y el recepyor es el RWS434 los dos trabajn a 434 Mhz.
Cuando el switch que se encuentra en el PIN_A0 sea presionado eviara por el PIN_B4 una 'S' 10 veces con un retardo cada uno de 10 ms.
mientras el receptor esperara hasta que capte la 'S' y prendera un led en el PIN_B1


Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;TX_RF
//DATE:21/JUNIO/'09
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16F628A.h>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=1200,xmit=PIN_B4)

void main(void){
		int i;
		set_tris_b(0x00);
		setup_comparator(NC_NC_NC_NC);

		do{
			if(input(PIN_A0)){
				for(i=0;i<=10;i++){
					printf("S");
					delay_ms(10);
				}
				delay_ms(500);
			}
		}while(TRUE);
}



Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;RX_RF
//DATE:21/JUNIO/'09
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16F628A.h>
#include <STRING.H>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=1200,rcv=PIN_B0)


void main(void){
		char x;
		set_tris_b(0x01);
		setup_comparator(NC_NC_NC_NC);

	do{
		output_low(PIN_B1);
		do{
			x=getch();
		}while(x!='S');
			output_high(PIN_B1);
			delay_ms(2000);
	}while(TRUE);
}
 
Hola amigos tengo un problema con el pic16f628a mi caso al utilizar el RB4 como forma de parpadeo no da ningun resultado el los otros RBX si,no utilizo comunicacion, y los simulo en proteus 7.4 y codego CCS c

bueno les dejo 2 codigos y ningunos me an funcionado.. espero sus ayudas....

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_B4); 
      delay_ms(1000); 
      output_low(PIN_B4); 
      delay_ms(1000); 
   }while(TRUE);    

}
Código:
#include<16f628a.h> 
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT 
#use delay(clock=4000000) 
#byte port_b=6
void main() {
   int contador;
   set_tris_b(0);           //// declaramos el puerto B como salidas
   port_b=0;
   while (true) {           //// bucle infinito
      contador=200;         //// retraso, 200 ciclos de 1000 microsegundos, o sea, 2 milisengundos
      while(--contador!=0)
         delay_us(1000);
      port_b=0xff;          //// activa todos los pins del puerto B
      contador=200;
      while(--contador!=0)  //// retraso, 200 ciclos de 1000 microsegundos, o sea, 2 milisengundos
         delay_us(1000);
      port_b=0x00;};        //// apaga todos los pins del puerto B
   }
 

Adjuntos

  • dibujo1_117.gif
    dibujo1_117.gif
    21.5 KB · Visitas: 1,198
Atrás
Arriba