You are on page 1of 26

//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /// Practica 1 : Parpadeo de LED´S con PIC16F84A /// /// para el foro.elhacker.

net by Marco /// //////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

///////////////////////////// DIRECTIVAS DE PREPROCESADO ////////////////////// /// libreria para el manejo del pic16f84a #include <16F84A.h> /// declara la frecuencia del cristal #use delay(clock=8000000) ///configura los fusibles /// HS es la configuraricion del oscilador la cual indica High speed es decir /// frecuencias altas esto es a partir de 8 Mhz. /// NOWDT deshabilita el Watch Dog Timer /// NOPUT deshabilita le reseteo de power up timer /// NOPROTECT deshabilita la proteccion del codigo del pic. #fuses HS,NOWDT,NOPUT,NOPROTECT /// asignamos a variable port_b el espacio memoria 0x06 que es la dir de port_b #byte port_b=0x06 //////////////////////////GLOBALES////////////////////////////////////////////// /// Estos parámetros son visibles desde todo el código /// /// por eso se les llama globales /// /// Al ser constantes,lo más práctico es declararlas aquí. /// //////////////////////////////////////////////////////////////////////////////////// int contador; ////////////////////////// Principal ////////////////////////////////////////// void main() { /// declaramos el puerto B como salidas set_tris_b(0); /// lo igualamos con cero para que tengamos un valor inicial de lo contrario /// no sabriamos con que valor iniciaria al comienzo de nuestro programa port_b=0; /// bucle infinito para que las instrucciones que tiene siempre se ejecuten while (true) { /// activa todos los pins del puerto B /// otra instruccion que podemos poner es contador=255 las dos son lo mismo contador=0xff; port_b=contador; /// Retardo de 1000 milisegundos es decir 1 segundo delay_ms(1000); //// apaga todos los pins del puerto B}

contador=0x00; port_b=contador; /// Retardo de 1000 milisegundos es decir 1 segundo delay_ms(1000); } /// fin de bucle while } /// fin de funcion principal main aqui los archivos para PICC y Proteus

http://foro.elhacker.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.0.html;msg824964#ixzz1XwqeObLW

net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.NOBROWNOUT.0.NOWRT.msg824964#ixzz1Xwr126MY .elhacker.NOLVP.html.h> #use delay(clock=8000000) /// libreria para el manejo del pic16f877a /// declara la frecuencia del cristal #fuses HS. port_b_pullups(true).///////////////////////////////////////////////////////////////////////////////////////// /////////////////////////// Practica 2 ///////////////////////////////// // Esta practica pasa la informacion que hay en el puerto B y la pasa // // al puerto A // ///////////////////////// By Marco_recargado /////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// #include <16F877A. } } // Bucle infinito // se configura el puerto A como entrada // se configura el puerto B como salida // activa las resistencias de pull-up // fin de programa http://foro.NOWDT.NOPUT.NOPROTECT #use fast_io(B) #use fast_io(C) #byte portb = 6 #byte portc = 7 /// con esta instruccion evitamos que /// se este configurando cada vez que usamos /// alguna instruccion de entrada o salida // se definen las direcciones de memoria void main(void) { while(true) { set_tris_b(0xff). portc=portb. set_tris_c(0x00).

} // verificamos que la cuenta se haga de 0 a 99 else{ portb=conteo.msg844004#ixzz1XwroZ91m .NOWRT. // hacemos que los 4 bits mas significativos incrementen conteo=conteo&0xf0.NOBROWNOUT.NOLVP.elhacker.NOPUT.h> /// libreria para el manejo del pic16f877a #use delay(clock=8000000) /// declara la frecuencia del cristal #fuses HS.//////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////Practica 3 /////////////////////////////////////////// ////////Visualiza un conteo por el PORTB a travez de dos display de 8 seg//////// ////////////////////////// By MARCO_RECARGADO/////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// #include <16F877A.0.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021. while(true) { conteo++.NOPROTECT int conteo=0. #use #use #use #use #use fast_io(A) fast_io(B) fast_io(C) fast_io(D) fast_io(E) porta = 5 portb = 6 portc = 7 portd = 8 porte = 9 /// con esta instruccion evitamos que /// se este configurando cada vez que usamos /// alguna instruccion de entrada o salida #byte #byte #byte #byte #byte /// se definen direcciones de memoria //////////////////////////////////////////////////////////////////////////////////// //////////////////////inicio del programa principal///////////////////////////// /////////////////////////////////////////////////////////////////////////////////// void main(void) { set_tris_b(0x00). delay_ms(400).html. if((conteo&0x0f)>9) //bucle infinito { conteo=conteo+10.NOWDT.} } //fin de ciclo while } //fin de programa // aqui observamos si el primer display llego a 10 // para solo comparar los primeros 4 bit hacemos una // operacion and con 0x0f http://foro. } if(conteo>99) {conteo=0.

hay que inicializarlo lcd_putc("HOLA MUNDO").net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.0.h> /// libreria para el manejo del pic16f877a #use delay(clock=8000000) /// declara la frecuencia del cristal #fuses HS. // Antes de usar el lcd.c // y ahi les muestra.html.NOBROWNOUT.NOLVP.elhacker.c> // Librería para el manejo del lcd para ver las conexiones // abran el archivo C:\Archivos de programa\PICC\Drivers\lcd.msg857910#msg857910#ixzz1Xws9GKPj .NOPROTECT #include <lcd. //////////////////////////////////////////////////////////////////////////////// // D0 enable // D1 rs // D2 rw // D4 D4 // D5 D5 // D6 D6 // D7 D7 //////////////////////////////////////////////////////////////////////////////// void main(void) { lcd_init().//////////////////////////////////////////////////////////////////////////////// ////////////// Practica 2 ////////////////////// ////////////// practica que escribe en una LCD ////////////////////// //////////////////////////////////////////////////////////////////////////////// ////////////// By MARCO RECARGADO ////////////////////// //////////////////////////////////////////////////////////////////////////////// #include <16F877A. // Escribes en la lcd } // fin de programa http://foro.NOWRT.NOPUT.NOWDT.

html.NOBROWNOUT. //////////////////////////////////////////////////////////////////////////////// // D0 enable // D1 rs // D2 rw // D4 D4 // D5 D5 // D6 D6 // D7 D7 //////////////////////////////////////////////////////////////////////////////// int i.c> // Librería para el manejo del lcd para ver las conexiones // abran el archivo C:\Archivos de programa\PICC\Drivers\lcd.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.0. delay_ms(30).NOPROTECT #include <lcd. delay_ms(30). lcd_putc("Martin").//////////////////////////////////////////////////////////////////////////////// ////////////// Practica 2 ////////////////////// ////////////// practica que escribe en una LCD ////////////////////// //////////////////////////////////////////////////////////////////////////////// ////////////// By MARCO RECARGADO ////////////////////// //////////////////////////////////////////////////////////////////////////////// #include <16F877A.i<8.NOWRT. // Escribes en la lcd delay_ms(50).++i){ lcd_putc("\fM\n"). }} } // fin de programa http://foro. lcd_putc("\f t\n").elhacker. for(i=0.1). delay_ms(30).h> /// libreria para el manejo del pic16f877a #use delay(clock=8000000) /// declara la frecuencia del cristal #fuses HS. delay_ms(30).c // y ahi les muestra. // Antes de usar el lcd.NOLVP. void main(void) { lcd_init().NOPUT.msg857910#msg857910#ixzz1XwsLTRQ0 .NOWDT. lcd_putc("\f n\n").hay que inicializarlo while (1){ lcd_gotoxy(5. delay_ms(30). lcd_putc("\f i\n"). lcd_putc("\f a\n").

NOWDT.NOBROWNOUT. long dato_6=0.NOWRT.7 /// con esta instruccion evitamos que /// se este configurando cada vez que usamos /// alguna instruccion de entrada o salida /// se definen direcciones de memoria dato_6a = dato_6.5 0x07.3 . long dato_1=0. long dato_5=0.1 0x07.c> int32 tiempo_real=0.Hola pues en esta ocasion la practica consiste en leer un reloj de tiempo real.3 dato_5a = dato_5. long dato_4=0.NOPROTECT #use i2c(Master.h> /// libreria para el manejo del pic16f877a #use delay(clock=8000000) /// declara la frecuencia del cristal #fuses HS.0 dato_5b = dato_5. #use fast_io(A) #use fast_io(B) //#use fast_io(C) #use fast_io(D) #use fast_io(E) #byte portc = 7 #byte portd = 8 #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit portd0 portd1 portd2 portd3 portd4 portd5 portd6 portd7 portc0 portc1 portc2 portc3 portc4 portc5 portc6 portc7 = = = = = = = = = = = = = = = = 0x08.NOPUT.6 0x08.0 0x08.1 dato_5c = dato_5. SDA=PIN_C4.2 dato_6d = dato_6.7 0x07. long dato_2=0. SCL=PIN_C3) #include <ds1307.3 0x08. con ayuda de una libreria //////////////////////////////////////////////////////////////////////////////// ////////////ESTE PROGRAMA UTILZA EL CIRCUITO DS1307 PARA MOSTRAR LA //////////// //////////HORA EN TIEMPO REAL A TRAVEZ DE UNOS DISPLAY´S DE 7 SEGMENTOS///////// //////////EL PROGRAMA PARA SIMULARLO EN PROTEUS SE LLAMA RELOJ TIEMPO REAL////// ////////////////////////BY MARCO RECARGADO////////////////////////////////////// #include <16F877A.5 0x08.1 0x08.0 dato_6b = dato_6.4 0x07.1 dato_6c = dato_6.2 0x08.NOLVP.2 0x07.3 0x07.2 dato_5d = dato_5.6 0x07.0 0x07. long dato_3=0.4 0x08.

1 dato_1c = dato_1. portd5=0.#bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit #bit byte byte byte byte byte byte byte dato_4a = dato_4. day.1 dato_4c = dato_4. portd6=0. portd0=0. portd7=0.2 dato_3d = dato_3. yr.0 dato_2b = dato_2. dow.0 dato_1b = dato_1. //////////////////////////////////////////////////////////////////////////////// ////////funcion que manda el a desplagar informacion en los displays//////////// /////Tomese en cuenta que las conexiones de los puertos son las siguientes////// // pc0=a // // pc1=b // // pc6=d // // pc7=c // // pd1=digito 6 // // pd4=digito 5 // // pd0=digito 4 // // pd7=digito 3 // // pd5=digito 2 // // pd6=digito 1 // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// void desplegar() { portd1=0.2 dato_2d = dato_2.0 dato_4b = dato_4. portc1=dato_6c.3 dato_2a = dato_2. month. min.3 sec.2 dato_4d = dato_4.1 dato_3c = dato_3. portd4=0. /// se inihiben los displays . portc7=dato_6b. portc0=dato_6a.1 dato_2c = dato_2.0 dato_3b = dato_3. hrs.3 dato_1a = dato_1.2 dato_1d = dato_1.3 dato_3a = dato_3.

portc1=dato_2c. ///se inicializa el ds1307 . portc1=dato_3c. portd4=1. portd6=1. portc0=dato_4a. set_tris_e(0x01). portc7=dato_3b. portc6=dato_3d. portc6=dato_1d.portc6=dato_6d. set_tris_a(0xff). portd7=0. portd0=0. portd5=1. portc0=dato_5a. portc7=dato_2b. portc1=dato_1c. portc7=dato_5b. set_tris_d(0x00). portc0=dato_1a. } //////////////////////////////////////////////////////////////////////////////// //////////////////////Comienzo de la funcion principal////////////////////////// //////////////////////////////////////////////////////////////////////////////// void main() { ds1307_init(). portc6=dato_5d. portd1=1. portd6=0. portd1=0. set_tris_c(0x04). portd0=1. portc6=dato_2d. portc6=dato_4d. set_tris_b(0x00). portd4=0. portc7=dato_1b. portc0=dato_3a. portd7=1. portc0=dato_2a. portc1=dato_4c. portd5=0. portc7=dato_4b. portc1=dato_5c. port_b_pullups(true).

yr. dato_3=8. ds1307_get_date(day. while(1) { delay_ms(1000).9. } } ///////////////////////////// fin de programa ///////////////////////////////////////////// http://foro. dato_4=8.min. dato_2=8.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021. dato_4=swap(0xf0&min). dato_1=0x0f&sec.2. dato_5=8.00). desplegar(). dato_3=0x0f&min.dato_1=8.0. min=bin2bcd(min).dow).month.7. ds1307_get_time(hrs.49.4.sec). dato_6=8. hrs=bin2bcd(hrs). // Set date for -> 15 June 2005 Tuesday // Set time for -> 15:20:55 (9:49:00 am) ds1307_set_date_time(24.elhacker.msg857910#msg857910#ixzz1Xwsc1lTN . /// se obtiene la fecha /// se obtiene la hora /// se escribe ne le displositivo ////////////////////bin2bcd(sec) funcion para pasar de binario(hasta 99) a bcd ////////////////////bcd2bin(sec) funcion para pasar de bcd(hasta 99) a binario sec=bin2bcd(sec). desplegar(). dato_2=swap(0xf0&sec). dato_5=0x0f&hrs.html. dato_6=swap(0xf0&hrs).

espero haber resuelto tus dudas. Citar 1-asignas la dccion del puerto B a tu gusto? o es la dccion qeu la datasheet del pic establece para este modelo? La direccion del puertoB ya esta dada por la misma arquitectura del micro puedes abrir la el archivo donde se encuentra la libreria del 16f877.h la ruta generalmente es esta C:\Archivos de programa\PICC\Devices ahi veras que el mismo programa ya tiene definidos el nombre de los parametros del pic. y la instruccion Citar #byte PORTB = 6 //declaramos a la variable PORTB solo que asocio la variable PORTB a la direccion 0x06 Citar 2-el 6 está en decimal o en hexa? (en este caso.Perdon por este enorme receso pero no habia podido entrar al foro. pero quiero ver si la sintaxis obliga a poner 0x06 por ejemplo) el programa lo asocia por default como decimal sin embargo te da la direccion pero si tu pusieras 54 la direccion a la que te referirias no seria la 0x54 sino a 0x36 Citar 3-eso ya no està definido cuando pones #include<16F84> ? En efecto tienes razon cuando se pone la libreria ahi ya tienes definido varios parametros. por ejemplo para encender el bit 5 del puerto a tendiras que hacer lo sigueinte PIN_A5=1. si el nro es 6 en decimal. y perdonen nuevamente la demora de mis respuestas las estare contestando en el transcurso de la sigueinte semana En línea . porque mi computadora se me habia quemado y por tanto no podia grabar mis pics y bla bla bla. en hexa es lo mismo. pero no con el mismo nombre que yo les asigno en este caso por ejemplo tiene definido #define #define #define #define #define #define PIN_A0 PIN_A1 PIN_A2 PIN_A3 PIN_A4 PIN_A5 40 41 42 43 44 45 sin embargo para comodidad mia le pongo variables con los que yo lo relaciono mas inmediatamente Citar 4-para acceder al bit 3 del puertoB deberia acceder a la dccion de memoria 6*8+3=51? o hay alguna manera ya optimizada en el CSS (soy nuevo enel CSS ) bueno con lo anterior puedes ver que se tiene acceso a un solo bit en especifico y no tienes que declararlo te recomiendo nuevamente leer la libreria y si te gusta de esa forma pues usarlos asi.

no entiendo como es la lògica. en este segmento obviamente estoy incrementando en uno a la variable contador Citar if((conteo&0x0f)>9) en este estoy haciendo una operacion logica AND de la variable conteo con el numero 0x0f ¿y que diablos obtengo de esto? facil que yo seleccione mi parte baja de lo que contiene esta variable es decir si mi variable conteo=0b1111 0101 que es igual a conteo=0xf5 al hacer esta operacion yo tengo como resultado conteo=0x05 es decir anule la parte alta ya una vez hecho esto la compara con si es mayor a 9 si es mayor a 9 significa que estoy en el 10 pero en hexadecimal seria 0x0A y ese no es el valor que quiero sino quiero este 0x10 Citar { conteo=conteo+10. conteo=conteo&0xf0. No puedo ver el Proteus pero ¿como se hace el multiplexado de los displays. Sino. pero en el ejemplo de 2 displays de 7 segmentos. } por eso a la hora de que es mayor a nuevo yo le sumo 10 para que me de el numero hexadecimal que deseo if(conteo>99) {conteo=0. 20:39 » Mas recargado que nunca mira los displays van a un decodificador bcd las terminales portb0portb3 estan a un decodificador y las terminales portb4-portb7 al otro decodificador vamos viendo paso a paso que se esta haciendo Citar conteo=conteo+1."Desde muy chico tuve que interrumpir mis estudios para ir a la escuela" Gabriel García Márquez MARCO_RECARGADO Desconectado Mensajes: 75 Citar Hola Marcos Recargado. Espero haberte ayudado . como se haria con CSS? ¿estas usando un conversor de binario a bcd no? no puedo seguir el pedazo de codigo donde suma 10 a count Re: Introduccion a la programacion de PICS en lenguaje C (CCS) « Respuesta #32 en: 16 Noviembre 2007. estoy estudiando tus post.} por ultimo si ya llego a 99 lo reseteo porque recuerda que esta varialbe como fue declarada de tipo int es una variable que puede llegar hasta 255.

goto uno. // configuras esto para que el a/d funcione con un reloj interno del micro SETUP_ADC_PORTS(AN0).html#ixzz1XwwL3hyB .h> #fuses HS. set_tris_b(0x00). en este caso 0 por el RA0 output_b(READ_ADC())..elhacker.} // lee el canal analogico seleccionado anteriormente. // se configura el puerto A como entrada // se configura el puerto B como salida // activa las resistencias de pull-up SETUP_ADC(ADC_CLOCK_INTERNAL).gracias meta.45.NOPROTECT. pude hacer el programa para el conversor analogo digital del pic 16f877 • //programa que usa el conversor analogo digital del pic 16f877// ///// // //// /// //// by EPALE /// /////////////////////////////////////////////////////////////////// #include <16F877a. uestra el en puerto b LED.NOLVP #use delay(clock=20000000) #use fast_io(B) /// con esta instruccion evitamos que /// se este configurando cada vez que usamos #use fast_io(a) /// alguna instruccion de entrada o salida #use fast_io(c) #byte portb = 6 // se definen las direcciones de memoria #byte porta = 5 #byte portc = 7 #DEFINE LED DELAY_MS(100) // se define el tiempo de retardo para ahorrar memoria void main() { uno: set_tris_a(0xff). y lo http://foro. set_tris_c(0x00).. // con esto fijas el canal con el qeu trabajas.NOWDT.. // aca determianr que el puerto RA0 será analógico SET_ADC_CHANNEL(0).net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.

Cita de: montero2210 en 5 Mayo 2008. ahora testeas el puerto si es cero o uno dependiendo de lo que desees if(pin_b0==0) { y aqui metes todo lo que desees hacer cuando se pulse el boton } dato . se encienda como el coche fantastico una serie de leds. 23:32 Hola a todos!!! Tengo un problemilla y no se resolverlo a ver si ustedes que veo que teneis bastante experiencia me podeis ayudar. Gracias de antemano!!!! primero debes de saber que pin quieres yo te recomendaria el portb por tener resistencias de pull up primero tienes que configurar el porb como entrada set_tris_b(0xff). y no se como leer la pulsacion del pulsador. Mi problema viene que le he añadido un pulsador para que cuando yo lo pulse el led que este encendido parpadee durante un tiempo. Hasta hay todo correcto y funcionando. Estoy intentando hacer que con el pic16f84.

7.c> #use #use #use #use #use fast_io(A) fast_io(B) fast_io(C) fast_io(D) fast_io(E) /// con esta instruccion evitamos que /// se este configurando cada vez que usamos /// alguna instruccion de entrada o salida /// se definen direcciones de memoria #byte portc = 7 #byte portd = 8 int int int int int int int sec. ds1307_get_date(day.00).NOPROTECT #include <ds1307.2. set_tris_c(0x04).11.month. month. port_b_pullups(true).//////////////////////////////////////////////////////////////////////////////// ////////////ESTE PROGRAMA UTILZA EL CIRCUITO DS1307 PARA MOSTRAR LA //////////// //////////HORA EN TIEMPO REAL A TRAVEZ DE UN UNA LCD DE 2 POR 16 CARACTERES///// //////////////////////////PARA FORO ELHACKER. day. hrs. set_tris_e(0x01).yr. min.9. /// se obtiene la fecha .NOPUT.NET//////////////////////////////// #include <16F877A.NOLVP. set_tris_d(0x00). dow. set_tris_a(0xff).NOWRT. /// se escribe en el displositivo /// el tiempo deseado while(1) { delay_ms(100).NOBROWNOUT.49.dow). //////////////////////////////////////////////////////////////////////////////// //////////////////////Comienzo de la funcion principal////////////////////////// //////////////////////////////////////////////////////////////////////////////// void main() { ds1307_init(0). /// inicializamos lcd ///se inicializa el ds1307 // Set date for -> 15 June 2005 Tuesday // Set time for -> 15:20:55 (9:49:00 am) ds1307_set_date_time(8. set_tris_b(0x00).c> #include <lcd. yr.NOWDT.h> /// libreria para el manejo del pic16f877a #use delay(clock=8000000) /// declara la frecuencia del cristal #fuses HS. lcd_init().

hrs. printf(lcd_putc."%02d:%02d:%02d lcd_gotoxy(1. } //// interrupcion por escritura en buffer del puerto //// esta instruccion almacena en la variable los //// datos que se esten enviando hasta que llega //// la tecla enter void main() { enable_interrupts(int_rda). lcd_putc("WWW. 05:48 » ha llegado el momento de agregarle una practica mas a nuestro pequeño tutorial esta practica lo que hace es que pasa los datos recibidos por puerto serie a la lcd utilizo la terminal virtual para simular la comunicacion con el pic ///////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////comunicacion RS232 con pic/////////////////////////////// ///////////////by marco_recargado para foro.xmit=pin_c6.ELHACKER. NOWDT. enable_interrupts(global). /// aqui va a ir los datos recibidos por rs232 #byte porte=0x09 #int_rda void rda_isr() { gets(dato_recibido).2).c> /// libreria para el manejo de la lcd char dato_recibido[16].net/////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// #include <16F877A. ///se despliegan los datos Re: Introduccion a la programacion de PICS en lenguaje C (CCS) « Respuesta #108 en: 19 Noviembre 2008.sec).min. //// se habilita la interrupcion por //// escritura del puerto serial .elhacker.NET").sec).rcv=pin_c7) /// libreria para el manejo del /// puerto serie se establece /// velocidad de 9600 baudios #include <lcd.ds1307_get_time(hrs.h> #fuses HS. NOPROTECT #use delay(clock=8000000) #use rs232(baud=9600. } } /// se obtiene la hora ". lcd_gotoxy(1.1).min.

while(true) { lcd_gotoxy(1. lcd_gotoxy(1.set_tris_d(0b00000000).dato_recibido).1). lcd_init(). lcd_putc(" com RS232 ")."%s".2). printf(lcd_putc. } } /// se manda a lcd lo que se recibio nuestra gloriosa imagen .

elhacker. /// configura a timer0 con reloj /// interno y un divisor de 256 enable_interrupts(GLOBAL).h> /// libreria para el manejo del pic16f877a #use delay(clock=8000000) /// declara la frecuencia del cristal #fuses HS. delay=30. #byte portb = 6 #int_TIMER0 void timer0() { /// Variable que llevara la cuenta total delay--.NOPROTECT. int delay=30.98304 seg) //////////////////////////////////////////////////////////////////////////////// /////////// practica 10 : contador por interrupcion ////////////////// ////////// By Marco_recargado para foro. /// permitir interrupciones ///activar interrupcion en timer0 .NOWRT. enable_interrupts(INT_timer0). } //////////////////////////////////////////////////////////////////////////////// //////////////////////inicio del programa principal///////////////////////////// //////////////////////////////////////////////////////////////////////////////// void main(void) { set_tris_b(0x00).7 milisegundos por interrupcion setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_256 ).NOLVP.Re: Introduccion a la programacion de PICS en lenguaje C (CCS) « Respuesta #117 en: 6 Enero 2009. set_timer0(0).} set_timer0(0). la practica de un contador por interrupcion bueno un regalo es un regalo la cuenta es ascendiente aprox cada segundo (. if(delay==0){contador++.NOWDT.NODEBUG ///configura los fusibles int contador=0.NOPUT.NOBROWNOUT. 16:32 » pues bien para los niños que se han portado bien los reyes magos nos han dejado un regalito. ///la formula para saber cada cuando se ejecutara nuestra interrupcion con el timer0 /// es T=N*M*(4/FOSC) donde /// T= tiempo /// N= preescalador del timer o divisor /// M= numero de iteracciones /// asi por ejemplo con un preescalador de 256 un numero de iteraciones de 256 y un cristal de 8mhz /// nos da un resultado de 32.net ////////////////// //////////////////////////////////////////////////////////////////////////////// #include <16F877.

elhacker.while(true) { portb=contador.html#ixzz1Xx2zKz8h . } } // fin de programa principal y nuestra imagen Saludos y feliz año nuevo http://foro.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.105.

PORTB=0. xmit=PIN_C6. xmit=PIN_C6.} if(PORTD==4){printf("%d".} if(PORTD==2){printf("%d". parity=N. char orden. rcv=PIN_C7..NOWDT.PUT.3). bits=8) #byte PORTD = 0x08 #byte PORTB = 0x06 void main() { set_tris_D(0b11111111). 04:30 » hola a todos por fortuna e encontrado lo que queria.Re: Introduccion a la programacion de PICS en lenguaje C (CCS) « Respuesta #118 en: 12 Marzo 2009.4).h> #fuses XT.NOLVP #use delay(clock=4000000) #use rs232(baud=2400.5).NOPROTECT.NOBROWNOUT. rcv=PIN_C7) #byte PORTD = 0x08 #byte PORTB = 0x06 enable_interrupts(int_rda).1).} if(PORTD==8){printf("%d".} if(PORTD==64){printf("%d". un foro para programar en ccs y ojala poder daer mis aportes y que ojala me puedan solucionar muchas dudas que tengo en algunas areas de programacion de este tema a continuacion adjunto un programa para un enlace de radiofrecuencia este codigo repsonde muy bien ya lo probe y lo presente en un proyecto de la universidad este es el codigo del emisor #include<16f877a. .0).NOPROTECT.6).NOWDT.h> #fuses XT. enable_interrupts(global).} } } y este es el codigo del receptor #include<16f877a.NOLVP #use delay(clock=4000000) #use rs232(baud=2400.} if(PORTD==1){printf("%d".NOBROWNOUT.2). while(1) { if(PORTD==0){printf("%d". parity=N.} if(PORTD==128){printf("%d".PUT. PORTD=0.

PORTd=0.elhacker. set_tris_B(0b00000000). PORTB=0.} } void main() { set_tris_D(0b00000000). if(orden==0){PORTD=0b00000000.html#ixzz1Xx3TXkK2 .net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.#int_rda void serial_isr() { orden=getc()-48.} if(orden==2){PORTB=0b00000110.} if(orden==3){PORTD=0b00000101. // adelante // giro while(1) { } } los modulos de transmision de señal son tlp 434a y rlp434a y son de transmision serial En línea http://foro.105.

net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021. output_low(pin_b2). } } output_low(pin_b0). output_high(pin_b3). output_low(pin_b0). output_low(pin_b1). output_b(0). while(true) { if(input(pin_a0)) { output_high(pin_b0).. } if(input(pin_a1)) { output_low(pin_b0).Re: Introduccion a la programacion de PICS en lenguaje C (CCS) « Respuesta #134 en: 5 Mayo 2009.ra1 y ra2 e colocado un pulsador a cada pin.mi pregunta es la siguiente. } } http://foro. output_low(pin_b1). output_high(pin_b2).pulsando cada uno de estos me sale una secuencia por el puerto B.h> #use delay(clock=4000000) void main() { set_tris_b(0b11110000). output_high(pin_b2). output_high(pin_b3).. output_high(pin_b1).120. 17:45 » buenas amigos del foro navegando por la red encontre este tema esta muy bueno yo tambien estoy iniciandome en Cy estoy usando el ccs compiler el proteus .solo me trabaja con la primera secuencia y al apretar el segundo pulsador no funca hasta q termine la secuencia del primero me han dicho que coloque interrupciones alos pulsdores pero no entiendo bien eso aqui va el ejemplo de lo que estoy haciendo. #include <16f84a. set_tris_a(0xff).estoy usando el pic 16f84A usando como entradas el puerto A y el puerto b como salidas.en ra0. output_low(pin_b1). delay_ms(3000). } if(input(pin_a2)) { output_low(pin_b0)..html#ixzz1Xx40a78Y . output_low(pin_b2)..elhacker.

h> #fuses XT. while(true) { if(!input(pin_a0)) //en esta linea le agregue el signo de admiracion { output_high(pin_b0). #use delay(clock=4000000) void main() { set_tris_b(0b11110000).chau y suerte. output_high(pin_b3). output_low(pin_b1).net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021. //le agregue esta linea delay_ms(500).hola. output_high(pin_b2).NOWDT. output_b(0). } } } " ! " mejor " ! " " ! " http://foro.NOPROTECT. Código: #include <16f84a. } if(!input(pin_a1)) //en esta linea le agregue el signo de admiracion { output_low(pin_b0). output_low(pin_b2).//le agregue esta linea } if(!input(pin_a2)) //en esta linea le agregue el signo de admiracion { output_low(pin_b0). set_tris_a(0xff). output_low(pin_b3). output_low(pin_b2). output_high(pin_b1).135.elhacker. //aqui le puse medio segundo para visualizarlo output_low(pin_b0). output_low(pin_b1).aqui te dejo el codigo corregido.html#ixzz1Xx47HSOg . output_low(pin_b3).

html.NOWDT. y lo uestra el en http://foro. // aca determianr que el puerto RA0 será analógico SET_ADC_CHANNEL(0).NOPROTECT. set_tris_c(0x00). goto uno. set_tris_b(0x00).NOLVP #use delay(clock=20000000) #use fast_io(B) /// con esta instruccion evitamos que /// se este configurando cada vez que usamos #use fast_io(a) /// alguna instruccion de entrada o salida #use fast_io(c) #byte portb = 6 // se definen las direcciones de memoria #byte porta = 5 #byte portc = 7 #DEFINE LED DELAY_MS(100) // se define el tiempo de retardo para ahorrar memoria void main() { uno: set_tris_a(0xff).} // lee el canal analogico seleccionado anteriormente. puerto b LED. // con esto fijas el canal con el qeu trabajas.net/electronica/introduccion_a_la_programacion_de_pics_en_lenguaje_c_ccst174021.msg934861#ixzz1Xx73DvWF . // configuras esto para que el a/d funcione con un reloj interno del micro SETUP_ADC_PORTS(AN0).0. en este caso 0 por el RA0 output_b(READ_ADC()). // se configura el puerto A como entrada // se configura el puerto B como salida // activa las resistencias de pull-up SETUP_ADC(ADC_CLOCK_INTERNAL).elhacker.h> #fuses HS.• //programa que usa el conversor analogo digital del pic 16f877// ///// // //// /// //// by EPALE /// /////////////////////////////////////////////////////////////////// #include <16F877a.

portd=unidades. portb=centenas.NOBROWNOUT. while(1) { canal0= READ_ADC(). } } . delay_ms(100). set_tris_d(0b00000000).(centenas*100) . SET_ADC_CHANNEL(0).0 int int int int canal0=0.NOWRT.NOPROTECT. #include <16F877A. set_tris_e(0b11111111). DISABLE_INTERRUPTS(global). centenas=0.NOPUT.(decenas*10)). decenas=(canal0 .Practica 5 DAC a displays de 7 segmentos « Respuesta #65 en: 18 Marzo 2008. set_tris_c(0b00000000). setup_adc_ports(all_analog). 08:30 » despues de mil años la tierra prometida. SETUP_ADC(ADC_CLOCK_INTERNAL). delay_ms(1). unidades=0.NOPROTECT.NODEBUG #use #use #use #use #use fast_io(A) fast_io(B) fast_io(C) fast_io(D) fast_io(E) porta = 5 portb = 6 portc = 7 portd = 8 porte = 9 /// con esta instruccion evitamos que /// se este configurando cada vez que usamos /// alguna instruccion de entrada o salida #byte #byte #byte #byte #byte /// se definen direcciones de memoria #bit porte0 = 0x09. // retardo para esperar que el adc termine // conversion fabricante menciona que al // menos 50 microsegundos // declaramos que el reloj del adc sera interno // todos los canales analogicos habilitados // seleccionamos canal 0 centenas=canal0/100.NOLVP.(centenas*100))/10. void main () { set_tris_b(0b00000000). decenas=0.h> #use delay(clock=8000000) #fuses NOWDT. portc=decenas.HS. unidades=(canal0 .

2. 2. 1.3. 3. Clic en browse. Cuando pida el origen de la licencia (local o por servidor).lxk.3. 3. Ejecutar setup76. 3.2.exe. clic en Install y todas las llaves irán de izquierda al cuadro derecho. El software ya está listo para usarse. la barra de progreso se comenzará a llenar. En Licence Manager.1. clic en la opción de local.1. encontrar la ruta donde se descomprimió el paquete y seleccionar el archivo Grassington North Yorkshire.2.0. 2. normalmente sería: Inicio > Todos los programas > Proteus 7 Professional > Licence Manager. Seguir los pasos de instalación que indique el wizard.exe que viene en el paquete. 1.1. 3.1. Ejecutar el LXK Proteus 7. 2. Salir del programa. Clic en Browse for a key.6 SP0 v2. Clic en Update. . 2. Dirigirse a la carpeta de accesos directos del programa recién instalado y abrir el programa Licence Manager.proteus Instrucciones: Para activar el programa: 1. para encontrar la carpeta de instalación del programa.

exe. Ejecutar setup76. 2. 3. 2. 3.lxk.1. clic en la opción de local. 3. la barra de progreso se comenzará a llenar.exe que viene en el paquete.3. Clic en Browse for a key. En Licence Manager. 2. Ejecutar el LXK Proteus 7. para encontrar la carpeta de instalación del programa.2.1. 2.6 SP0 v2.0.1. Dirigirse a la carpeta de accesos directos del programa recién instalado y abrir el programa Licence Manager.3. El software ya está listo para usarse. Salir del programa. Seguir los pasos de instalación que indique el wizard. Cuando pida el origen de la licencia (local o por servidor). . encontrar la ruta donde se descomprimió el paquete y seleccionar el archivo Grassington North Yorkshire.1. 1. Clic en Update.2. Clic en browse. clic en Install y todas las llaves irán de izquierda al cuadro derecho. normalmente sería: Inicio > Todos los programas > Proteus 7 Professional > Licence Manager. 1.2.1. 3.