Autor
|
Tema: Introduccion a la programacion de PICS en lenguaje C (CCS) (Leído 261,017 veces)
|
edivervizcay
Desconectado
Mensajes: 3
|
Buenas soy nuevo en el foro y en programacion en c para pics .
Quisiera saber si alguien puede ayudarme con una dificultad que tengo .
tengo un bootloader que me funciona de maravilla en asm , pero debo reservar de la memoria de programa las direcciones desde 0000 hasta 0003 y unas desde 1AAF hasta 1FFF la ultima parte no tengo problema usando:
#org 0x1AAF, 0x1FFF{}
ya lo pude hacer , pero aun no puedo lograr que el compilador no me use las tres primeras direcciones y tambien requiero colocar dos instrucciones en esa parte , tambien la idea es recolocar o reorganizar la direccion de inicio del main{}.
agradezco cualquier ayuda.
|
|
|
|
|
En línea
|
|
|
|
|
Meta
|
¿Pueden conseguir este libro aunque sea en inglés? C# 2008 and .NET Programming for Electronic Engineers  En inglés Este libro está dirigido a ingenieros y científicos que quieran aprender sobre el entorno .NET y la programación en C# o para los que estén interesados en comunicar hardware con un PC. El libro cubre el entorno de desarrollo Visual Studio 2008, el sistema .NET y en el lenguaje de programación en C# desde de los tipos de datos y los flujos de programa hasta conceptos más avanzados incluyendo la programación orientada a objetos. Continúa con la depuración de programas, el manejo de ficheros, bases de datos, comunicación por Internet y el trazado antes de pasar a comunicarse con el hardware empleando los puertos serie, paralelo y USB. Incluye el diseño del hardware para un osciloscopio sencillo utilizando el puerto paralelo y el manejo de entradas/salidas analógicas y digitales utilizando el puerto USB. Se completa con muchos programas de ejemplo, ejercicios de autoevaluación y referencias a videos de ayuda. Los programas de ejemplo completos están disponibles así como apoyos a profesores universitarios en forma de presentaciones PowerPoint. Fuente: http://www.elektor.es/products/books/programming/c-2008-and-.net-programming-for-electronic.264379.951869.lynkx
|
|
|
|
|
En línea
|
|
|
|
|
|
ikariam
Desconectado
Mensajes: 2
|
por favor los que necesiten saber sobre comunicaion sobre radiofrecuencia y todo el codigo y su respectiva explicacion escribir al correo ikariam.lew@hotmail.esen menos de 5 horas estare dando respuesta a sus dudas gracias
|
|
|
|
|
En línea
|
|
|
|
eleazar83
Desconectado
Mensajes: 5
|
Hola Marco_recargado. mira me interesa el programa de:
////////////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//////
y no veo el archivo .dns para simularlo en el proteus. Lo podrias subir porfa.
Bye.
|
|
|
|
|
En línea
|
|
|
|
eleazar83
Desconectado
Mensajes: 5
|
Insertar Cita Hola Marco_recargado. mira me interesa el programa de:
////////////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//////
y no veo el archivo .dns para simularlo en el proteus. Lo podrias subir porfa.
Bye.
|
|
|
|
|
En línea
|
|
|
|
Aglaia
Desconectado
Mensajes: 2
|
hola pues me ha gusta mucho lo que has subido Esperaba que tal vez con la experiencia que tienes en pic c me pudieras ayudar con un problemilla que tengo nose como comparar los puertos por ej q si el puerto a es mayor q el puerto b ponga en 1 el pin b7 o algo asi he tratado de guardarlo en variables ej int8 variable=input_a() pero aunque compila al simularlo en proteus no hace nada ya queme el pic con el programa pero aun no pasa nada. Estoy usando ciclos while y el pic q uso es el 16f877a MIRA aca esta el programa, te agradeceria mucho que lo pudieras revisar me harias un gran favor... saludos
#include <16f877.h> #fuses XT, NOWDT, NOPROTECT, PUT, Brownout #use delay (clock = 4000000) #use fast_io(a) #use fast_io(b) #use fast_io(c) #use fast_io(d)
int8 a1; int8 b1; int8 c1; int8 d1; // programa void main (void) { a1= input_a(); b1= input_b(); c1= input_c(); d1= input_d(); set_tris_a(0x3f); set_tris_b(0x3f); set_tris_c(0x3f); set_tris_d(0x3f); while(true) { while(a1 != b1) { while(a1 < b1) { output_high(PIN_D7); output_low(PIN_D6); output_high(PIN_C7); output_low(PIN_C6); } while(a1 > b1) { output_low(PIN_D7); output_high(PIN_D6); output_low(PIN_C7); output_high(PIN_C6); } } do { output_high(PIN_D6); output_low(PIN_D7); output_low(PIN_C6); output_high(PIN_C7); //delay_ms(1000); } while(0); while(c1!= d1) { while(c1 < d1) { output_high(PIN_D7); output_low(PIN_D6); output_high(PIN_C7); output_low(PIN_C6); } while(c1 > d1) { output_low(PIN_D7); output_high(PIN_D6); output_low(PIN_C7); output_high(PIN_C6); } } do { output_high(PIN_D6); output_low(PIN_D7); output_low(PIN_C6); output_high(PIN_C7); //delay_ms(1000); } while(0); } }
|
|
|
|
|
En línea
|
|
|
|
trakxe
Desconectado
Mensajes: 1
|
Hola amigo, no se si aun te sirve la informacion como cuentas en tu programa si quieres compara lo que tienes en el puerto solo ponlo dentro del while(true). Asi quedaria:
#include <16f877.h> #fuses XT, NOWDT, NOPROTECT, PUT, Brownout #use delay (clock = 4000000) #use fast_io(a) #use fast_io(b) #use fast_io(c) #use fast_io(d)
int8 a1; int8 b1; int8 c1; int8 d1; // programa void main (void) { while(true) {
a1= input_a(); b1= input_b(); c1= input_c(); d1= input_d(); set_tris_a(0x3f); set_tris_b(0x3f); set_tris_c(0x3f); set_tris_d(0x3f);
while(a1 != b1) { while(a1 < b1) { output_high(PIN_D7); output_low(PIN_D6); output_high(PIN_C7); output_low(PIN_C6); } while(a1 > b1) { output_low(PIN_D7); output_high(PIN_D6); output_low(PIN_C7); output_high(PIN_C6); } } do { output_high(PIN_D6); output_low(PIN_D7); output_low(PIN_C6); output_high(PIN_C7); //delay_ms(1000); } while(0); while(c1!= d1) { while(c1 < d1) { output_high(PIN_D7); output_low(PIN_D6); output_high(PIN_C7); output_low(PIN_C6); } while(c1 > d1) { output_low(PIN_D7); output_high(PIN_D6); output_low(PIN_C7); output_high(PIN_C6); } } do { output_high(PIN_D6); output_low(PIN_D7); output_low(PIN_C6); output_high(PIN_C7); //delay_ms(1000); } while(0); } }
Prueba haber como te va... Saludos...
|
|
|
|
« Última modificación: 4 Diciembre 2009, 21:37 por trakxe »
|
En línea
|
|
|
|
MARS1972
Desconectado
Mensajes: 1
|
Necesito el compilador y el proteus si alguien me pudiera orientar como bajarlos, ya que cada que selecciono el vinculo en rapidshare me aparece un error. Se los agradeceria muchisimo gracias. 
|
|
|
|
|
En línea
|
|
|
|
MARCO_RECARGADO
Desconectado
Mensajes: 75
Mas recargado que nunca
|
Amigos estan actualizados los programas y subidos a tres servidores para que no haya ningun problema se encuentran en la primera pagina de este post, saludos
|
|
|
|
|
En línea
|
"Desde muy chico tuve que interrumpir mis estudios para ir a la escuela" Gabriel García Márquez
|
|
|
Sourraund
Desconectado
Mensajes: 1.247
The Lord of the World
|
Hay algunas lecciones del post en los que no se pueden ver las imagenes de la simulación en el Proteus, hay algún modo de poder visualizarlas?
Saludos.
|
|
|
|
« Última modificación: 22 Febrero 2010, 11:49 por Sourraund »
|
En línea
|
|
|
|
Sourraund
Desconectado
Mensajes: 1.247
The Lord of the World
|
Cuando quiero usar un lcd, sea el ejemplo que sea, siempre me sale este error: "DSIM model LCDALPHA.DLL failed to authorize - Missing or invalid Customer Key"
¿Alguien sabe como puedo solucionarlo?
Saludos y gracias.
|
|
|
|
|
En línea
|
|
|
|
elektronische
Desconectado
Mensajes: 1
|
Tengo un problema tratando de conectar un teclado de 4x3 a una LCD mediante un PIC 16F877A, no logro hacer que obtenga los datos del teclado, ajunto el código y el diagrama en ISIS, tal vez me puedan ayudar. #include <16f877a.h> //PIC utilizado #fuses HS,NOWDT,NOPROTECT,NOLVP //Configuramos los fuses #use delay (clock=4000000) //Oscilador a 4Mhz #INCLUDE "lcd.c" //Incluyo LCD.C #INCLUDE "kbd.c" void lcd_mostrar(void); char a; #byte PORTD=0xF81 #define use_portb_kbd TRUE void main(void) { port_b_pullups(TRUE); kbd_init(); lcd_init(); lcd_mostrar(); } void lcd_mostrar(void) { a=kbd_getc(); lcd_putc(a); } 
|
|
|
|
|
En línea
|
|
|
|
dNnYaU~
Desconectado
Mensajes: 3
|
Buen día, antes que nada, me agrada este foro, recién lo he encontrado y hay mucha información valiosa gracias a los que se dan el tiempo de ayudar. aunque yo no cuento con suficiente tiempo si me gustaría aportar de lo poco que he hecho con PICs en CCS. Bueno... por lo pronto quisiera comentarle aqui al colega y para todos aquellos que tengan el mismo problema o simplemente quieran agilizar el tiempo de programación con un LCD, me agradaría adjuntarles una librería que en lo personal no me ha dado problemas. Así que aquí viene mi primer pregunta: ¿Como adjunto un archivo en este foro para compartir información? Cuando quiero usar un lcd, sea el ejemplo que sea, siempre me sale este error: "DSIM model LCDALPHA.DLL failed to authorize - Missing or invalid Customer Key"
¿Alguien sabe como puedo solucionarlo?
Saludos y gracias.
|
|
|
|
|
En línea
|
INSPIRACION, MOTIVACION, RENOVACION, ACTITUD, CONFRONTACION, CONCENTRACION, CONOCIMIENTO... RESPIRA... "LO DE MAS... ES LO DE MENOS"- ~'dnny@u '~
|
|
|
tercules
Desconectado
Mensajes: 1
|
hola amigos quisiera que me den una mano con este codigo cual sera el problema con el copilador: codigo: #include <16F876.H> #fuses HS,XT,NOPUT,NOPROTECT,NOWDT #use delay(clock=8M) #include <Flex_lcd.c>
#use fast_io(a) #use fast_io(b) #use fast_io(c
///**** DEFINIMOS NOMBRES A PUERTOS ****/// #bit CENTENAS = 0x06.4 #bit UNIDADES = 0x06.5 #bit SPEEDUP = 0x06.6 #bit SPEEDDOWN = 0x06.7
///**** VARIABLES GLOBALES ***/// int contador,stop,Duty,FlagRamp, mil,cen,dec,uni, uni2,dec2,cen2,mil2;
void reset() { mil=0; dec=0; cen=0; uni=0; uni2=0; dec2=0; cen2=0; mil2=0; contador=0; output_b(0x00); output_c(0x00); output_a(0x00); Stop=0; FlagRamp=0; Duty=0; set_pwm1_duty(0); //Borra la pantalla LCD } ///**** FUNCIÓN PANTALLA DE ARRANQUE ****/// void inicial() { lcd_gotoxy(2,1); lcd_putc("BOBINADORA 3.0"); lcd_gotoxy(2,2); lcd_putc("INOXSTEEL 2009"); delay_ms(3000); lcd_putc("\f"); }
///**** FUNCIÓN FIN DE BOBINADO ****/// void Fin() { int i; for (i=0;i<5;i++) { lcd_putc("\f"); delay_ms(300); lcd_gotoxy(5,1); lcd_putc("BOBINADO"); lcd_gotoxy(4,2); lcd_putc("FINALIZADO"); delay_ms(300); } lcd_putc("\f"); reset(); }
///**** INTERRUPCIÓN TIMER0 ****/// /// TIMER0 EN MODO CONTADOR /// /// LLEVA EL CONTEO POR SENSOR EXTERNO ///
#int_TIMER0 Void TIMER0_isr(void) { contador=1; set_timer0(255); clear_interrupt(int_TIMER0); } ///**** INTERRUPCIÓN RB0 ****/// /// PUESTA EN MARCHA SI HAY CANTIDAD INTRODUCIDA ///
#int_EXT
void Start_isr(void) { if (uni!=0 || cen!=0) {lcd_putc("\f"); Stop=1;} clear_interrupt(int_EXT); }
///**** INTERRUPCIÓN RB4-RB7 ****/// /// TOMA LOS DATOS RECIBIDOS EN LOS PULSADORES /// /// CENTENAS, UNIDADES, VELOCIDAD + Y - ///
#int_RB Void Pulsadores_isr() { if (SPEEDUP==1) if (duty<82) Duty+=4; if (SPEEDDOWN==1)if (duty>2) Duty-=4; if (CENTENAS==1) cen++; if (UNIDADES==1) uni++; if (uni>9) {dec++; uni=0;} if (dec>9) dec=0; if (cen>9) {mil++; cen=0;} if (mil>9) mil=0;
clear_interrupt(int_RB); } ///**** INTERRUPCIÓN TIMER1 ****/// /// SE ENCARGA DEL ARRANQUE SUAVE DEL MOTOR /// /// AL INICIAR EL BOBINADO - DE 0% A 50% VEL. ///
#int_TIMER1 Void SoftStart() { if (stop==1 && Duty<42 && FlagRamp==0) {Duty+=2; set_timer1(50000);} if (Duty==42) FlagRamp=1; }
///****FUNCIÓN PRINCIPAL****///
Void Main(Void) { int16 speed; speed=0; set_tris_a(0b110000); set_tris_b(0b11110001); set_tris_c(0b00000000);
///**** HABILITACIÓN Y AJUSTE DE INTERRUPCIONES****/// enable_interrupts(int_EXT); enable_interrupts(int_TIMER0); enable_interrupts(int_TIMER1); enable_interrupts(int_RB); enable_interrupts(global);
ext_int_edge(L_TO_H); setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1); setup_timer_2(T2_DIV_BY_16,82,1); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); setup_ccp1(CCP_PWM);
clear_interrupt(int_RB); clear_interrupt(int_EXT); clear_interrupt(int_RTCC); clear_interrupt(int_ccp1);
reset();
lcd_init();
inicial();
while (true) { ///****BLOQUE PRINCIPAL DE PRESELECCIÓN****/// if (stop==0) { lcd_gotoxy(1,1); lcd_putc("INTRODUCE EL N"); lcd_gotoxy(15,1); lcd_putc(223); lcd_gotoxy(1,2); lcd_putc("DE ESPIRAS"); lcd_gotoxy(12,2); printf(lcd_putc,"%u",mil); lcd_gotoxy(13,2); printf(lcd_putc,"%u",cen); lcd_gotoxy(14,2); printf(lcd_putc,"%u",dec); lcd_gotoxy(15,2); printf(lcd_putc,"%u",uni); }
///****BLOQUE EN FUNCIONAMIENTO****///
if (Stop==1) { lcd_gotoxy( 1,1); lcd_putc("BOBINANDO"); delay_ms(20); lcd_gotoxy(11,1); printf(lcd_putc,"V.%03Lu",Speed); lcd_gotoxy(16,1); lcd_putc("%"); lcd_gotoxy( 1,2); lcd_putc("ESPIRAS N"); lcd_gotoxy(10,2); lcd_putc(223); lcd_gotoxy( 1,1); lcd_putc(" "); delay_ms(20); lcd_gotoxy(12,2); printf(lcd_putc,"%u",mil2); lcd_gotoxy(13,2); printf(lcd_putc,"%u",cen2); lcd_gotoxy(14,2); printf(lcd_putc,"%u",dec2); lcd_gotoxy(15,2); printf(lcd_putc,"%u",uni2); set_pwm1_duty(duty); //PWM para control de velocidad
Speed = Duty; //Variable de % de velocidad en pantalla Speed = (( Speed * 100) / 82 );
if (contador==1) {uni2++; contador=0;} if (uni2>9) {dec2++; uni2=0;} if (dec2>9) {cen2++; dec2=0;} if (cen2>9) {mil2++; cen2=0;}
if (mil2==mil && dec2==dec && cen2==cen && uni2==uni) {Stop=0; lcd_putc("\f"); fin();} } } }
|
|
|
|
|
En línea
|
|
|
|
|
|