Autor Tema: Concurso de programación: números romanos  (Leído 8010 veces)

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

Desconectado Tisco

  • PIC16
  • ***
  • Mensajes: 108
Re: Concurso de programación: números romanos
« Respuesta #15 en: 28 de Mayo de 2013, 14:30:03 »
Es una pena que el concurso sea en CCS, si no participaría.  :(

Suerte a tod@s!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Concurso de programación: números romanos
« Respuesta #16 en: 28 de Mayo de 2013, 14:41:35 »
Pásame tu función en C y yo la adapto a CCS si fuera necesario.

Aquí está ya tu participación, Picuino

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Concurso de programación: números romanos
« Respuesta #17 en: 28 de Mayo de 2013, 15:03:11 »
Gracias Nocturno.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Concurso de programación: números romanos
« Respuesta #18 en: 28 de Mayo de 2013, 21:34:55 »
Y si cambian el macro a:

Código: C
  1. #byte TXSTA=0xFAC
  2. #bit TRMT=TXSTA.1
  3. #byte TXREG=0xFAD
  4. #define PUTCH(c)  { while(TRMT==0); TXREG=c;}

 :huh:

También se le podria agregar en el macro una linea como set_timer1(0)  :D

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Concurso de programación: números romanos
« Respuesta #19 en: 29 de Mayo de 2013, 01:42:22 »
También probé eso, Suky, pero se queda enganchado. En cuanto pueda lo monto físicamente, porque estoy casi seguro que va a ser un problema de la simulación.

Lo del set_timer batiría todos los records  :D ... y justo después sería descalificado :lol:

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Concurso de programación: números romanos
« Respuesta #20 en: 29 de Mayo de 2013, 01:57:50 »
Actualizo. He probado el código de Picuino también con MPLAB SIM, del cual me fío bastante más que de Proteus, y también se queda enganchado en el mismo punto.

Intentando ver cómo funciona el putc(), este es el código ASM que genera. No entiendo ASM, pero no veo ninguna escritura en el registro TXREG (0xFAD) en todo ese trozo de código, así que no sé cómo furula, pero creo que ahí está la clave.

Código: ASM
  1. 0122    9C94     BCF 0xf94, 0x6, ACCESS
  2.   0124    9C8B     BCF 0xf8b, 0x6, ACCESS
  3.   0126    0E08     MOVLW 0x8
  4.   0128    6E01     MOVWF 0x1, ACCESS
  5.   012A    D000     BRA 0x12c
  6.   012C    0000     NOP
  7.   012E    8E01     BSF 0x1, 0x7, ACCESS
  8.   0130    D00E     BRA 0x14e
  9.   0132    9E01     BCF 0x1, 0x7, ACCESS
  10.   0134    3244     RRCF 0x44, F, ACCESS
  11.   0136    B0D8     BTFSC 0xfd8, 0, ACCESS
  12.   0138    8C8B     BSF 0xf8b, 0x6, ACCESS
  13.   013A    A0D8     BTFSS 0xfd8, 0, ACCESS
  14.   013C    9C8B     BCF 0xf8b, 0x6, ACCESS
  15.   013E    8C01     BSF 0x1, 0x6, ACCESS
  16.   0140    D006     BRA 0x14e
  17.   0142    9C01     BCF 0x1, 0x6, ACCESS
  18.   0144    2E01     DECFSZ 0x1, F, ACCESS
  19.   0146    D7F6     BRA 0x134
  20.   0148    D000     BRA 0x14a
  21.   014A    0000     NOP
  22.   014C    8C8B     BSF 0xf8b, 0x6, ACCESS
  23.   014E    0E3F     MOVLW 0x3f
  24.   0150    6EE9     MOVWF 0xfe9, ACCESS
  25.   0152    2EE9     DECFSZ 0xfe9, F, ACCESS
  26.   0154    D7FE     BRA 0x152
  27.   0156    0000     NOP
  28.   0158    BE01     BTFSC 0x1, 0x7, ACCESS
  29.   015A    D7EB     BRA 0x132
  30.   015C    BC01     BTFSC 0x1, 0x6, ACCESS
  31.   015E    D7F1     BRA 0x142
  32.   0160    0012     RETURN 0

Desconectado gab163

  • PIC16
  • ***
  • Mensajes: 111
Re: Concurso de programación: números romanos
« Respuesta #21 en: 29 de Mayo de 2013, 04:36:24 »
Bueno revisando logre conseguir esto espero este bueno te mando el código al correo.



Nocturno, por ahí envié uno con un error pero lo corregir y lo volví a mandar saludos.
« Última modificación: 29 de Mayo de 2013, 04:53:21 por gab163 »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Concurso de programación: números romanos
« Respuesta #22 en: 29 de Mayo de 2013, 08:58:18 »
Actualizo. He probado el código de Picuino también con MPLAB SIM, del cual me fío bastante más que de Proteus, y también se queda enganchado en el mismo punto.

Intentando ver cómo funciona el putc(), este es el código ASM que genera. No entiendo ASM, pero no veo ninguna escritura en el registro TXREG (0xFAD) en todo ese trozo de código, así que no sé cómo furula, pero creo que ahí está la clave.

Código: ASM
  1. 0122    9C94     BCF 0xf94, 0x6, ACCESS
  2.  0124    9C8B     BCF 0xf8b, 0x6, ACCESS
  3.  0126    0E08     MOVLW 0x8
  4.  0128    6E01     MOVWF 0x1, ACCESS
  5.  012A    D000     BRA 0x12c
  6.  012C    0000     NOP
  7.  012E    8E01     BSF 0x1, 0x7, ACCESS
  8.  0130    D00E     BRA 0x14e
  9.  0132    9E01     BCF 0x1, 0x7, ACCESS
  10.  0134    3244     RRCF 0x44, F, ACCESS
  11.  0136    B0D8     BTFSC 0xfd8, 0, ACCESS
  12.  0138    8C8B     BSF 0xf8b, 0x6, ACCESS
  13.  013A    A0D8     BTFSS 0xfd8, 0, ACCESS
  14.  013C    9C8B     BCF 0xf8b, 0x6, ACCESS
  15.  013E    8C01     BSF 0x1, 0x6, ACCESS
  16.  0140    D006     BRA 0x14e
  17.  0142    9C01     BCF 0x1, 0x6, ACCESS
  18.  0144    2E01     DECFSZ 0x1, F, ACCESS
  19.  0146    D7F6     BRA 0x134
  20.  0148    D000     BRA 0x14a
  21.  014A    0000     NOP
  22.  014C    8C8B     BSF 0xf8b, 0x6, ACCESS
  23.  014E    0E3F     MOVLW 0x3f
  24.  0150    6EE9     MOVWF 0xfe9, ACCESS
  25.  0152    2EE9     DECFSZ 0xfe9, F, ACCESS
  26.  0154    D7FE     BRA 0x152
  27.  0156    0000     NOP
  28.  0158    BE01     BTFSC 0x1, 0x7, ACCESS
  29.  015A    D7EB     BRA 0x132
  30.  015C    BC01     BTFSC 0x1, 0x6, ACCESS
  31.  015E    D7F1     BRA 0x142
  32.  0160    0012     RETURN 0


Ese código implementa directamente la escritura de los bits en la salida TX (LATCbits.LATC6 = F8B.6), sin utilizar la USART. A los 8 bits del caracter le añade un bit a cero de comienzo y un bit a uno de finalización.
El problema de esta rutina es que el micro no puede hacer nada mientras se transmite el caracter.

Saludos.
« Última modificación: 29 de Mayo de 2013, 09:00:43 por Picuino »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Concurso de programación: números romanos
« Respuesta #23 en: 29 de Mayo de 2013, 11:34:57 »
Pues entonces ya está todo claro: CCS estaba emulando el puerto serie en vez de utilizar la USART.
Ya lo he resuelto en el programa base y mira cómo queda tu resultado ahora:
http://www.micropic.es/mpforo/index.php?topic=1475.msg7114#msg7114

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Concurso de programación: números romanos
« Respuesta #24 en: 29 de Mayo de 2013, 12:02:36 »
Guau :shock:
Ahora si que va rápido.

Al final te vas a llevar tú el premio, Nocturno  :D

Saludos.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Concurso de programación: números romanos
« Respuesta #25 en: 29 de Mayo de 2013, 12:19:43 »
De momento te gano  :D

Tengo una rutina que ahorra unos ciclos respecto a la tuya, a pesar de utilizar printf en lugar del txreg.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re: Concurso de programación: números romanos
« Respuesta #26 en: 29 de Mayo de 2013, 15:26:29 »
Creo que el punto a mejorar en mi programa es comenzar cuanto antes a transmitir el primer caracter, pero no se me ocurre cómo hacerlo.
Quizás con una división de Número y luego utilizar un array con las letras correspondientes...

Por ahora lo dejo como está.

Saludos.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Concurso de programación: números romanos
« Respuesta #27 en: 29 de Mayo de 2013, 20:50:33 »
Se me ocurren cosas muy locas. Voy a ver si salgo con alguna de ellas.

Saludos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.


Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Concurso de programación: números romanos
« Respuesta #29 en: 30 de Mayo de 2013, 02:07:00 »
Buuu! Exijo un recuento de ticks! Me ha dado mucho menos en mis pruebas!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.