Autor Tema: Cambiando Programas de Basic (Proton) a CSS  (Leído 1697 veces)

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

Desconectado Y@el

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 415
Cambiando Programas de Basic (Proton) a CSS
« en: 10 de Febrero de 2007, 02:47:23 »
Hola Amigos,

Aunque el topic es muy generico, estoy empezando ahora si seriamente con C. Y es por este motivo que decidi empezar haciendo cosas que las tengo hechas en Basic.

Lo primero fue adaptarme al manejo de los mensajes al LCD, para convertir mis valores binarios a Ascii. Felizmente esto ya lo solucione con printf(lcd_getc...).

Ahora estaba adaptando el driver de teclado 74c922, hecho con un PIC16F628A. Y pese a que me parecen que ambos codigos tanto en C, como en Basic hacen lo mismo. No se porque el de Basic si puedo simularlo en Proteus y el de C NOooo  :?

Les coloco los codigos, y avisenme si me equivoco:

Código: C
  1. //archivo key4x4.c
  2. #include <16F628A.h>
  3. #FUSES NOWDT, INTRC_IO, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD
  4. //CONFIG INTRC_OSC_NOCLKOUT , WDT_OFF , PWRTE_OFF , BODEN_OFF , LVP_OFF , PWRTE_OFF , CP_OFF
  5. #use delay(clock=4000000)
  6.  
  7. #define use_portb_kbd 1
  8. #define tecla 5
  9. #include <teclado4.h>
  10.  
  11. void main()
  12. {
  13.    set_tris_a(0b10000000);
  14.    set_tris_b(0b11110000);
  15. #asm
  16. ;   BSF    STATUS,RP0
  17.    bsf 3,5
  18. ;   clrf OPTION
  19.    clrf   1
  20. ;   bcf    status,rp0
  21.    bcf 3,5
  22.  
  23. #endasm
  24.    port_b_pullups(true);
  25.    
  26. //   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  27.    setup_timer_1(T1_DISABLED);
  28.    setup_timer_2(T2_DISABLED,0,1);
  29.    setup_comparator(NC_NC_NC_NC);
  30.    setup_vref(FALSE);
  31.  
  32.    // TODO: USER CODE!!
  33.    *tecla=0;  
  34.    do{
  35.       while(input_state(PIN_A4)==0){
  36.             kbd_getc();}
  37.       while(input_state(PIN_A7)==1){
  38.          #asm
  39.          nop
  40.          #endasm
  41.       }
  42.          *tecla=0;
  43.    }while(true);    
  44. }
  45.  
  46. //teclado4.h
  47. #define portb 6
  48.  
  49. #define L1 0b00000111
  50. #define L2 0b00001011
  51. #define L3 0b00001101
  52. #define L4 0b00001110
  53.  
  54. void kbd_getc()
  55. {
  56. char temp;
  57.  
  58. *portb=L1;
  59. temp=portb;
  60. temp=temp&0xF0;
  61. switch (temp){
  62. case 0b11100000:*tecla=0x10;
  63.             break;
  64. case 0b11010000:*tecla=0x11;
  65.             break;
  66. case 0b10110000:*tecla=0x12;
  67.             break;
  68. case 0b01110000:*tecla=0x13;
  69.             break;}
  70. *portb=L2;
  71. temp=portb;
  72. temp=temp&0xF0;
  73.  
  74. switch (temp){
  75. case 0b11100000:*tecla=0x14;
  76.             break;
  77. case 0b11010000:*tecla=0x15;
  78.             break;
  79. case 0b10110000:*tecla=0x16;
  80.             break;
  81. case 0b01110000:*tecla=0x17;
  82.             break;}
  83.  
  84. *portb=L3;
  85. temp=portb;
  86. temp=temp&0xF0;
  87. switch (temp){
  88. case 0b11100000:*tecla=0x18;
  89.             break;
  90. case 0b11010000:*tecla=0x19;
  91.             break;
  92. case 0b10110000:*tecla=0x1A;
  93.             break;
  94. case 0b01110000:*tecla=0x1B;
  95.             break;}
  96.  
  97. *portb=L4;
  98. temp=portb;
  99. temp=temp&0xF0;
  100. switch (temp){
  101. case 0b11100000:*tecla=0x1C;
  102.             break;
  103. case 0b11010000:*tecla=0x1D;
  104.             break;
  105. case 0b10110000:*tecla=0x1E;
  106.             break;
  107. case 0b01110000:*tecla=0x1F;
  108.             break;}
  109. *portb=0x0f;
  110. return;
  111. }

Ahora su equivalente Basic:
Código: FreeBasic
  1. '****************************************************************
  2. '*  Name    : key4x4.BAS                                      *
  3. '*  Author  : [select VIEW...EDITOR OPTIONS]                    *
  4. '*  Notice  : Copyright (c) 2006 [select VIEW...EDITOR OPTIONS] *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 22/09/2006                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   :                                                   *
  9. '*          :                                                   *
  10. '****************************************************************
  11. '
  12. '                ___ ___ ___ ___
  13. '               |   |   |   |   |
  14. '               |_7_|_8_|_9_|_C_|
  15. '               |   |   |   |   |
  16. '               |_4_|_5_|_6_|_D_|
  17. '               |   |   |   |   |
  18. '               |_1_|_2_|_3_|_E_|
  19. '               |   |   |   |   |
  20. '               |_A_|_0_|_B_|_F_|
  21. '
  22. '
  23. DEVICE 16F628A
  24. CONFIG INTRC_OSC_NOCLKOUT , WDT_OFF , PWRTE_OFF , BODEN_OFF , LVP_OFF , PWRTE_OFF , CP_OFF
  25. DECLARE XTAL 4
  26.  
  27. ON_HARDWARE_INTERRUPT GOTO TECLADO
  28.  
  29.  
  30. 'DEFINE OSC 4
  31.  
  32. 'Manejo Teclado
  33. DIM L4 As %00000111
  34. DIM L3 As %00001011
  35. DIM L2 As %00001101
  36. DIM L1 As %00001110
  37.  
  38. DIM I As BYTE
  39. Dim Temporal As BYTE
  40. Dim Ultima_Tecla As Byte
  41. 'Dim FLAG As BYTE
  42. Dim dato As byte
  43. Dim Tecla As porta
  44. DIM FLAG aS porta.4
  45. dIM EXT AS PORTA.7
  46.  
  47. GOTO INICIO
  48.  
  49. TECLADO:
  50. PORTB = L1
  51. SELECT CASE PORTB & $F0
  52.     CASE %11100000
  53.         TECLA=$17
  54.     CASE %11010000
  55.         TECLA=$18
  56.     CASE %10110000
  57.         TECLA=$19
  58.     CASE %01110000
  59.         TECLA=$1C
  60. END SELECT
  61.  
  62. PORTB = L2 'Lin 120
  63. SELECT CASE PORTB & $F0
  64.     CASE %11100000
  65.         TECLA=$14
  66.     CASE %11010000
  67.         TECLA=$15
  68.     CASE %10110000
  69.         TECLA=$16
  70.     CASE %01110000
  71.         TECLA=$1D
  72. END SELECT
  73.  
  74. PORTB = L3
  75. SELECT CASE PORTB & $F0
  76.     CASE %11100000
  77.         TECLA=$11
  78.     CASE %11010000
  79.         TECLA=$12
  80.     CASE %10110000
  81.         TECLA=$13
  82.     CASE %01110000
  83.         TECLA=$1E
  84. END SELECT
  85.  
  86. PORTB = L4
  87. SELECT CASE PORTB & $F0
  88.     CASE %11100000
  89.         TECLA=$1A
  90.     CASE %11010000
  91.         TECLA=$10
  92.     CASE %10110000
  93.         TECLA=$1B
  94.     CASE %01110000
  95.         TECLA=$1F
  96. END SELECT
  97.  
  98. PORTB =$0F
  99. return
  100.  
  101. INICIO:
  102.  
  103.     CMCON=7
  104.     VRCON=0
  105.    
  106.     TRISB = %11110000
  107.     TRISA = %10000000
  108.     OPTION_REG=%00000000 'Activamos Pull-up
  109.      
  110.     FLAG=0
  111.     clrf PORTA
  112.     PORTB =$0F
  113.     INTCON= %10001000    
  114. REPITE:
  115.     gosub teclado
  116.     if tecla.4=0 then repite
  117.     while Ext==0
  118.     nop
  119.     wend  
  120.     TECLA=0
  121.     GOTO REPITE
  122. RETURN
  123. END

Adjunto el archivo de proteus 6.9SP5 y los archivos generados por cada uno. Por diversos motivos, no he podido implementarlo todavia. Pero no habia tenido antes un problema con la simulacion de un teclado.

Saludos,

Yoel
PD: Como no me deja adjuntar, aca el enlace http://proyectosfie.com/amigotes/teclado.rar
« Última modificación: 10 de Febrero de 2007, 22:21:54 por Yoel_Ocmin »

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: Cambiando Programas de Basic (Proton) a CSS
« Respuesta #1 en: 10 de Febrero de 2007, 06:21:49 »
Buenas!!!! Veo que en tú código, haces una definición a tecla con el valor 5
Código: C
  1. #define tecla 5
Pero después, lo usas como si fuera una variable
Código: C
  1. *tecla=0;
Y aparte, usas punteros sin ser definidos como tales, es el caso de tecla y portb
Código: C
  1. *portb=L1;

En resumen, si quieres usar una variable, no uses la directiva define ya que no podrás asignarle ningún valor en el transcurso de tú programa, usa int, char...el que mejor se adapte a tus necesidades. Y no uses punteros sin ser definidos.


Suerte!!! ;)
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Y@el

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 415
Re: Cambiando Programas de Basic (Proton) a CSS
« Respuesta #2 en: 10 de Febrero de 2007, 17:47:36 »
Gracias VSZENER  :mrgreen:

Era justo eso.
Esto me pasa por saltearme algunas hojas del manual. :?

Ahora solo me queda seguir dandole con el C, ya me esta empezando a Gustar... sobre todo por el tema de los  sistemas operativos

Saludos, :-/

Yoel
« Última modificación: 10 de Febrero de 2007, 22:22:27 por Yoel_Ocmin »


 

anything