Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

26/05/2009 #1

Avatar de george.manson.69

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.
26/05/2009 #2

Avatar de Vegetal Digital

#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
que hace el INTRC_IO?

segui posteando!
26/05/2009 #3

Avatar de george.manson.69

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);
}
26/05/2009 #4

Avatar de george.manson.69

#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...
26/05/2009 #5

Avatar de george.manson.69

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);
}
26/05/2009 #6

Avatar de george.manson.69

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);
		
}
27/05/2009 #7

Avatar de george.manson.69

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?");

}
27/05/2009 #8

Avatar de george.manson.69

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);

}
Archivos Adjuntos
Tipo de Archivo: 7z hercules_3_2_1_950.7z (417,1 KB (Kilobytes), 904 visitas)
08/06/2009 #9

Avatar de george.manson.69

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);
}
15/06/2009 #10

Avatar de george.manson.69

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);
}
Archivos Adjuntos
Tipo de Archivo: 7z temperatura_589.7z (7,5 KB (Kilobytes), 811 visitas)
18/06/2009 #11

Avatar de george.manson.69

\\ 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;
				
}
Archivos Adjuntos
Tipo de Archivo: 7z contrasena_614.7z (19,1 KB (Kilobytes), 546 visitas)
19/06/2009 #12

Avatar de george.manson.69

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.
19/06/2009 #13

Avatar de foso

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 ?
19/06/2009 #14

Avatar de george.manson.69

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...:(
20/06/2009 #15

Avatar de foso

no se que son esos plugins y te comento que busque en rapidshare y me aparecen varios CCS, no se cual bajar
20/06/2009 #16

Avatar de george.manson.69

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...
20/06/2009 #17

Avatar de foso

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
22/06/2009 #18

Avatar de george.manson.69

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);
}
22/06/2009 #19


Hola, si quisiera usar estos programas con el 18f4550 que tendria que cambiar de estos programas, gracias por el post y su respuesta
22/06/2009 #20


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
   }
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.