Autor Tema: UN PROBLEMILLA CON PIC16F877 Y RS232  (Leído 1727 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado washi_w_z_r

  • PIC10
  • *
  • Mensajes: 20
UN PROBLEMILLA CON PIC16F877 Y RS232
« en: 28 de Marzo de 2009, 16:13:23 »
weno amigos: ante todo mil disculpas alos entendidos en la materia por el codigo que les presento , como veran son un novato en esto  :( estuve investigando y desarrolle el siguiente codigo


Código: [Seleccionar]
#include<16f877A.h>
// fuses y ajuste del clock
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT
#use delay(clock=4M)
// canal de comunicacion : USART
#define TTL_TX PIN_C6
#define TTL_RX PIN_C7
#use RS232(baud=9600, xmit=TTL_TX, rcv=TTL_RX)

void main()
{
 char rec;
 printf("TyP_Serio_TTL\r\n");
 do
  {
  if(kbhit())
   {
   rec=getc();
   putc(rec);
   #asm
       ADDR_L equ 0x20

    DATA_L equ 0x21

org 0x00

    nop

    nop

 

    bcf STATUS,RP0 ;Ir banco 0

    bcf STATUS,RP1

 

    movlw b'01000001' ;A/D conversion Fosc/8

    movwf ADCON0

 

    bsf STATUS,RP0 ;Ir banco 1

    bcf STATUS,RP1

 

    clrf TRISA ;PORTA salida

    clrf TRISB ;PORTB salida

    clrf TRISC ;PORTC salida

    clrf TRISD ;PORTD salida

    clrf TRISE

 

    movlw b'00001110' ;A/D Port AN0/RA0

    movwf ADCON1

 

    bsf TRISA,0 ;Canal AN0 como entrada

 

    bcf TRISC,6 ;RC6/TX salida, pin de transmisión

    movlw d'12' ;2400 baud rate Xtal=4Mhz

    movwf SPBRG

    bcf TXSTA,BRGH ;Selección de baja velocidad

    bcf TXSTA,SYNC ;Modo asíncrono

 

    bcf STATUS,RP0 ;Ir banco 0

    bcf STATUS,RP1

 

    bsf RCSTA,SPEN ;habilita el puerto serie

 

    bsf STATUS,RP0 ;Ir banco 1

    bcf STATUS,RP1

 

    bcf TXSTA,TX9 ;8 bits de datos a transmitir

    bsf TXSTA,TXEN ;Activa la transmisión serial, TXIF = 1

 

    bcf STATUS,RP0 ;Ir banco 0

    bcf STATUS,RP1

_adc

    bsf ADCON0,GO ;Start A/D conversion

_espera

    btfsc ADCON0,GO ;ADCON0 es 0? (la conversion esta completa?)

    goto _espera ;No, ir _espera

    movf ADRESH,W ;Si, W=ADRESH

    movwf TXREG ;TXREG = W

    movwf PORTC ;PORTC = W

_esperatx

    btfss PIR1,TXIF ;Espera hasta que transmisión culminó

    goto _esperatx

    goto _adc ;Ir adc
   #endasm
   }
  }
 while(TRUE);
}


lo que intento en mi proyecto es recibir datos por el pin 2 (datos analogicos de un tarjeta que desarrolle), y enviarlos mediante rs232 .


tengo un prog en visual c# y otro en matlab que recibe datos por el puerto serial, pero he ahi el problema , necesito una algo como un codigo , es decir envio desde la pc un "a" el pic lo lee y empieza a enviar datos masivamente hasta que la pc envie un "b" y se detenga el envio de datos, y cuando envie otr vez "a" envie y asi sucesivamente.

este no es ni el 10% de mi proyecto , pero a paso lento y seguro jajajaa, asi que les agradecere un monton vuestra ayuda en mejorar este codigo, tratare de mejorar mi codigo  :lol:
« Última modificación: 30 de Marzo de 2009, 12:20:16 por washi_w_z_r »

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: UN PROBLEMILLA CON PIC16F877 Y RS232
« Respuesta #1 en: 29 de Marzo de 2009, 17:00:01 »
Te ruego que leas las Reglas del Foro. Entre ellas se indica expresamente que no se permite escribir todo en mayúsculas. Gracias.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado washi_w_z_r

  • PIC10
  • *
  • Mensajes: 20
Re: UN PROBLEMILLA CON PIC16F877 Y RS232
« Respuesta #2 en: 30 de Marzo de 2009, 19:32:09 »
weno aqui modifique un poquillo mi codigo ,, ya toy en el 10.01% de mi proyecto

Código: C#
  1. #include<16f877A.h>
  2. #fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT
  3. #use delay(clock=4M)
  4. #use standard_io(b)
  5. #use RS232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
  6.  
  7. char rec=' ';
  8. char adc_dato=' ';
  9. char KEY=' ';
  10. // PROTOTIPO DE FUNCION ///////
  11. void ADC_START();
  12. void ADC_STOP();
  13. ////////////////////////////////
  14. #int_rda
  15. void rda_isr()
  16. {
  17.  KEY=0x00;
  18.  if(kbhit())
  19.  {
  20.   KEY=getchar();
  21.  }
  22. }
  23. // FUNCIONES ////////
  24.  
  25. void ADC_START()
  26. {
  27.  // LECTURA CANAL A0
  28.  set_adc_channel(0);
  29.  delay_us(100);
  30.  adc_dato=read_adc();
  31.  delay_us(100);
  32.  putchar(adc_dato);
  33. }
  34.  
  35. void ADC_STOP()
  36. {
  37.  #asm
  38.   bcf RCSTA,SPEN
  39.   bcf ADCON0,ADON
  40.  #endasm
  41. }
  42. void main()
  43. {
  44.   setup_adc(ADC_CLOCK_DIV_32);
  45.   setup_adc_ports(RA0_RA1_ANALOG);
  46.  
  47.   enable_interrupts(int_rda);
  48.   enable_interrupts(global);
  49.  
  50.   do
  51.    {
  52.     if(KEY!=0x00)
  53.     {
  54.      switch(KEY)
  55.      {
  56.       case '13': ADC_START();
  57.                break;
  58.       case 'S': ADC_STOP();
  59.                break;
  60.      }
  61.      KEY=0X00;
  62.     }
  63.    }while(TRUE)
  64. }

necesito vuestra ayuda para disminuir mi codigo , ya que controlare muchas mas cosas, saludos a todos
« Última modificación: 30 de Marzo de 2009, 21:31:37 por washi_w_z_r »