Autor Tema: Un médico por aquí, por favor  (Leído 2653 veces)

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

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Un médico por aquí, por favor
« en: 15 de Febrero de 2009, 16:01:20 »
hola gente:
Necesito de vuestra ayudita.
Tengo una rutinita muy cortita en C, pero como yo no conozco ni papa de C (de asembler si) os pido si por favor , alguno que tengais el CSC para ponerle las variables , device y fuses que le faltan para poder compilarlo.

Es para un PIC18F4550. No interesa donde pongais los pines, sólo que me declareis las variables y lo que le haga falta para que se pueda compilar.
El resto ya me encargo yo

Muchísimas gracias  :-/


/*
** SPI_Write_Char
*/
void SPI_Write_Char(char spi_data)
{
   char temp1,temp2;
     
   temp1 = (spi_data >> 3) | (0b10000000);
   temp2 = ((unsigned int)spi_data << 5);

   SPI_CS = 1;

   SSPBUF = temp1;
   while(!SSPIF); //wait until transmitted
   SSPIF = 0;
   SSPBUF = temp2;
   while(!SSPIF);
   SSPIF = 0;
   SPI_CS = 0;
}
/*
** SPI_Read_Char
*/
char SPI_Read_Char(void)
{
   unsigned char temp,temphi,templo;
   SPI_CS = 1; //set CS high
   SSPBUF = 0x60; //send read command
   while(!SSPIF); //wait until transmitted
   SSPIF = 0;
   temphi = SSPBUF;
   SSPBUF = 0; //send dummy value
   while(!SSPIF); //wait until transmitted
   SSPIF = 0;
   templo = SSPBUF; //read data
   SPI_CS = 0; // set CS low
   status = templo & 0x10;  //needs to verify
   temp = ( ((unsigned int)temphi) << 3) | (templo >> 5); //shift to make temp = D7-D0
   return temp;
}
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Un médico por aquí, por favor
« Respuesta #1 en: 15 de Febrero de 2009, 17:06:47 »
Supongo que lo que te interesa es el listado en ensamblador de las rutinas ¿verdad?. Intentaré compilarlo y sacarlo.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Un médico por aquí, por favor
« Respuesta #2 en: 15 de Febrero de 2009, 17:30:50 »
Es que estoy mirando internet todo el fin de semana buscando enlaces relacionados a "VNC1L SPI" y "VDIP SPI".
Es un módulo host usb. El mismo puedes ser usado via SPI, FIFO paralelo y UART.

Desgraciadamente y por lo que leo , la mayoría tuvo gravísimos problemas para hacerlo funcionar en SPI. Incluso simulado por software pierde datos . Y sabes lo que respondieron los que fabrican el módulo? Que únicamente testearon el módulo con UART, que las otras dos interfaces confiesan que no fueron probadas!  :shock:

Mañana haré la última prueba via SPI y sino desisto. Utilizaré el EUSART, aunque me cueste unos cuantos pines más y que no sé de donde los voy a sacar :P

Si puedes hacerme el favor de compilarme eso, te lo agradecería.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Un médico por aquí, por favor
« Respuesta #3 en: 15 de Febrero de 2009, 17:57:30 »
Aquí está el listado, es un montón de líneas:


CCS PCH C Compiler, Version 4.084, 36728               15-feb-09 21:02

               Filename: main.lst

               ROM used: 364 bytes (1%)
                         Largest free fragment is 32404
               RAM used: 6 (0%) at main() level
                         13 (1%) worst case
               Stack:    2 locations

*
0000:  GOTO   00F2
.................... #include "C:\Documents and Settings\Jesus\Mis documentos\Proyectos Proteus\Sacar Rutinas\main.h"
.................... #include <18F4550.h>
.................... //////// Standard Header file for the PIC18F4550 device ////////////////
.................... #device PIC18F4550
.................... #list
.................... 
.................... #device adc=8
.................... 
.................... #FUSES NOWDT                    //No Watch Dog Timer
.................... #FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
.................... #FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
.................... #FUSES NOPROTECT                //Code not protected from reading
.................... #FUSES NOBROWNOUT               //No brownout reset
.................... #FUSES BORV20                   //Brownout reset at 2.0V
.................... #FUSES NOPUT                    //No Power Up Timer
.................... #FUSES NOCPD                    //No EE protection
.................... #FUSES STVREN                   //Stack full/underflow will cause reset
.................... #FUSES NODEBUG                  //No Debug mode for ICD
.................... #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
.................... #FUSES NOWRT                    //Program memory not write protected
.................... #FUSES NOWRTD                   //Data EEPROM not write protected
.................... #FUSES IESO                     //Internal External Switch Over mode enabled
.................... #FUSES FCMEN                    //Fail-safe clock monitor enabled
.................... #FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
.................... #FUSES NOWRTC                   //configuration not registers write protected
.................... #FUSES NOWRTB                   //Boot block not write protected
.................... #FUSES NOEBTR                   //Memory not protected from table reads
.................... #FUSES NOEBTRB                  //Boot block not protected from table reads
.................... #FUSES NOCPB                    //No Boot Block code protection
.................... #FUSES MCLR                     //Master Clear pin enabled
.................... #FUSES LPT1OSC                  //Timer1 configured for low-power operation
.................... #FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
.................... #FUSES PLL12                    //Divide By 12(48MHz oscillator input)
.................... #FUSES CPUDIV4                  //System Clock by 4
.................... #FUSES USBDIV                   //USB clock source comes from PLL divide by 2
.................... #FUSES VREGEN                   //USB voltage regulator enabled
.................... #FUSES ICPRT                    //ICPRT enabled
.................... 
.................... #use delay(clock=20000000)
.................... #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
*
00E8:  BTFSS  F9E.4
00EA:  BRA    00E8
00EC:  MOVWF  FAD
00EE:  GOTO   016A (RETURN)
.................... 
.................... 
.................... 
.................... //#define SPI_CS PIN_C1
.................... 
.................... #byte status=0xFD8
.................... #byte PORTC=0xF82
.................... #byte SSPBUF=0xFC9
.................... #byte PIR1=0xF9E
.................... #bit SSPIF=PIR1.3
.................... #bit SPI_CS=PORTC.2
.................... 
.................... void SPI_Write_Char(char spi_data)
.................... {
....................    char temp1,temp2;
....................       
....................    temp1 = (spi_data >> 3) | (0b10000000);
*
0042:  RRCF   06,W
0044:  MOVWF  00
0046:  RRCF   00,F
0048:  RRCF   00,F
004A:  MOVLW  1F
004C:  ANDWF  00,F
004E:  MOVF   00,W
0050:  IORLW  80
0052:  MOVWF  07
....................    temp2 = ((unsigned int)spi_data << 5);
0054:  SWAPF  06,W
0056:  MOVWF  08
0058:  RLCF   08,F
005A:  MOVLW  E0
005C:  ANDWF  08,F
.................... 
....................    // SPI_CS = 1;
....................    output_high(SPI_CS);
005E:  MOVLW  00
0060:  BTFSC  F82.2
0062:  MOVLW  01
0064:  MOVWF  09
0066:  MOVWF  0A
0068:  MOVLW  01
006A:  MOVWF  0B
006C:  MOVLW  0F
006E:  MOVWF  0D
0070:  MOVLW  89
0072:  MOVWF  0C
0074:  RCALL  0004
0076:  MOVFF  09,0A
007A:  CLRF   0B
007C:  MOVLW  0F
007E:  MOVWF  0D
0080:  MOVLW  92
0082:  MOVWF  0C
0084:  RCALL  0004
.................... 
....................    SSPBUF = temp1;
0086:  MOVFF  07,FC9
....................    while(!SSPIF); //wait until transmitted
008A:  BTFSS  F9E.3
008C:  BRA    008A
....................    SSPIF = 0;
008E:  BCF    F9E.3
....................    SSPBUF = temp2;
0090:  MOVFF  08,FC9
....................    while(!SSPIF);
0094:  BTFSS  F9E.3
0096:  BRA    0094
....................    SSPIF = 0;
0098:  BCF    F9E.3
....................    SPI_CS = 0;
009A:  BCF    F82.2
.................... }
009C:  GOTO   0162 (RETURN)
.................... /*
.................... ** SPI_Read_Char
.................... */
.................... char SPI_Read_Char(void)
.................... {
....................    unsigned char temp,temphi,templo;
....................    SPI_CS = 1; //set CS high
00A0:  BSF    F82.2
....................    SSPBUF = 0x60; //send read command
00A2:  MOVLW  60
00A4:  MOVWF  FC9
....................    while(!SSPIF); //wait until transmitted
00A6:  BTFSS  F9E.3
00A8:  BRA    00A6
....................    SSPIF = 0;
00AA:  BCF    F9E.3
....................    temphi = SSPBUF;
00AC:  MOVFF  FC9,07
....................    SSPBUF = 0; //send dummy value
00B0:  CLRF   FC9
....................    while(!SSPIF); //wait until transmitted
00B2:  BTFSS  F9E.3
00B4:  BRA    00B2
....................    SSPIF = 0;
00B6:  BCF    F9E.3
....................    templo = SSPBUF; //read data
00B8:  MOVFF  FC9,08
....................    SPI_CS = 0; // set CS low
00BC:  BCF    F82.2
....................    status = templo & 0x10;  //needs to verify
00BE:  MOVF   08,W
00C0:  ANDLW  10
00C2:  MOVWF  FD8
....................    temp = ( ((unsigned int)temphi) << 3) | (templo >> 5); //shift to make temp = D7-D0
00C4:  RLCF   07,W
00C6:  MOVWF  09
00C8:  RLCF   09,F
00CA:  RLCF   09,F
00CC:  MOVLW  F8
00CE:  ANDWF  09,F
00D0:  SWAPF  08,W
00D2:  MOVWF  00
00D4:  RRCF   00,F
00D6:  MOVLW  07
00D8:  ANDWF  00,F
00DA:  MOVF   00,W
00DC:  IORWF  09,W
00DE:  MOVWF  06
....................    return temp;
00E0:  MOVFF  06,01
.................... }
00E4:  GOTO   0164 (RETURN)
.................... 
.................... void main()
.................... {
*
00F2:  CLRF   FF8
00F4:  BCF    FD0.7
00F6:  CLRF   FEA
00F8:  CLRF   FE9
00FA:  BSF    FB8.3
00FC:  MOVLW  08
00FE:  MOVWF  FAF
0100:  MOVLW  02
0102:  MOVWF  FB0
0104:  MOVLW  A6
0106:  MOVWF  FAC
0108:  MOVLW  90
010A:  MOVWF  FAB
010C:  MOVF   FC1,W
010E:  ANDLW  C0
0110:  IORLW  0F
0112:  MOVWF  FC1
0114:  MOVLW  07
0116:  MOVWF  FB4
.................... 
....................    setup_adc_ports(NO_ANALOGS|VSS_VDD);
0118:  MOVF   FC1,W
011A:  ANDLW  C0
011C:  IORLW  0F
011E:  MOVWF  FC1
....................    setup_adc(ADC_OFF);
0120:  BCF    FC2.0
....................    setup_psp(PSP_DISABLED);
0122:  BCF    F96.4
....................    setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_4);
0124:  BCF    FC6.5
0126:  BCF    F94.7
0128:  BSF    F93.0
012A:  BCF    F93.1
012C:  MOVLW  20
012E:  MOVWF  FC6
0130:  MOVLW  00
0132:  MOVWF  FC7
....................    setup_wdt(WDT_OFF);
0134:  BCF    FD1.0
....................    setup_timer_0(RTCC_INTERNAL);
0136:  MOVLW  80
0138:  MOVWF  FD5
....................    setup_timer_1(T1_DISABLED);
013A:  CLRF   FCD
....................    setup_timer_2(T2_DISABLED,0,1);
013C:  MOVLW  00
013E:  MOVWF  FCA
0140:  MOVLW  00
0142:  MOVWF  FCB
....................    setup_comparator(NC_NC_NC_NC);
0144:  MOVLW  07
0146:  MOVWF  FB4
0148:  MOVF   F92,W
014A:  MOVWF  F92
014C:  MOVLW  10
014E:  MOVWF  00
0150:  DECFSZ 00,F
0152:  BRA    0150
0154:  NOP   
0156:  MOVF   FB4,W
0158:  BCF    FA1.6
....................    setup_vref(FALSE);
015A:  CLRF   FB5
.................... //Setup_Oscillator parameter not selected from Intr Oscillator Config tab
.................... 
....................    // TODO: USER CODE!!
....................    SPI_Write_char('a');
015C:  MOVLW  61
015E:  MOVWF  06
0160:  BRA    0042
....................    printf("%c",SPI_Read_char());
0162:  BRA    00A0
0164:  MOVF   01,W
0166:  MOVWF  06
0168:  BRA    00E8
.................... 
.................... }
016A:  SLEEP

Configuration Fuses:
   Word  1: C03F   XT IESO FCMEN PLL12 CPUDIV4 USBDIV
   Word  2: 0E39   NOBROWNOUT WDT128 NOWDT BORV20 NOPUT VREGEN
   Word  3: 8700   PBADEN CCP2C1 MCLR LPT1OSC
   Word  4: 00A1   STVREN NODEBUG NOLVP NOXINST ICPRT
   Word  5: C00F   NOPROTECT NOCPD NOCPB
   Word  6: E00F   NOWRT NOWRTD NOWRTC NOWRTB
   Word  7: 400F   NOEBTR NOEBTRB


Un saludo
« Última modificación: 15 de Febrero de 2009, 18:04:53 por jfh900 »
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Un médico por aquí, por favor
« Respuesta #4 en: 15 de Febrero de 2009, 18:52:27 »
Muchísimas gracias.

No veas no? 4 lineas chorras en C y que ladrillazo en asm!  :D
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Un médico por aquí, por favor
« Respuesta #5 en: 15 de Febrero de 2009, 19:25:08 »
Amigo! hay una utilidad de PIC Compiler (PIC Wizard) en el cual puedes crear un proyecto, seleccionando las configuraciones del mismo y te crea el codigo automaticamente. Te va a ser de utilidad para la proxima!
No contesto mensajes privados, las consultas en el foro

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Un médico por aquí, por favor
« Respuesta #6 en: 15 de Febrero de 2009, 19:39:39 »
Mira, justamente estoy curioseando eso. Está guapo, no tienes que escribir las opciones a mano :)   (A veces pienso en empezar de una vez por todas con C)
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado PHLAKO

  • PIC10
  • *
  • Mensajes: 49
Re: Un médico por aquí, por favor
« Respuesta #7 en: 19 de Febrero de 2009, 14:52:46 »
Mira, justamente estoy curioseando eso. Está guapo, no tienes que escribir las opciones a mano :)   (A veces pienso en empezar de una vez por todas con C)

Pues estas perdiendo el tiempo. yo estudie 2 semanas(pura lectura) y una semana de hacer muchos ejemplitos....y ya hago en "C", todo lo que hacia en "ASM":(eeprom, usart, spi, adc, etc).
Imagina, ayer pase un numero binario(3bytes) a ASCII(con todas las cifras ordenaditas), para mostrarlo por el hyperterminal del PC....todo eso en una sola linea de comando :-/ de solo pensar en hacerlo en ASM, me da escalofrios :shock: :shock: y ese es un ejemplito de lo que hace "C" por ti....solo hay que tener tiempo para sentarse a leer, programar, probar, aprender. Yopase esas 3 semanas pegado al PC, ocho horas diarias.

Saludos y ya cambiate a "C".
SIEMPRE TE RECORDARE AMADO Y FIEL COMPAÑERO "LOBO"

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Un médico por aquí, por favor
« Respuesta #8 en: 19 de Febrero de 2009, 15:48:17 »
Que si , que si. Pero estoy super liado con un proyecto. Y mi jefe me prometió que cuando acabe este , tengo otro, y luego otro. Así que no sé cuando...
A menos que no duerma  :mrgreen:
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"


 

anything