TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: johenrod en 06 de Marzo de 2021, 10:24:16

Título: Requiero orientacion, adaptar este código de arduino a ccs
Publicado por: johenrod en 06 de Marzo de 2021, 10:24:16
Cordial saludo, apenas me estoy preparando para trabajar con arreglos y tengo este problema..
 ("aclaro" en otro post me ayudaron a guardar los datos en eeprom y como esto es distinto abri un nuevo tema)
estoy leyendo una tarjeta rfid la estoy comparando y si es igual activo una salida, lo estoy haciendo con un programa que trabaja bien pero esta en arduino el cual no me gusta mucho  y deseo hacerlo en "ccs" busco vuestra ayuda para realizarlo. (adaptar el codigo)
Citar
aqui los creditos del programa en el cual me apoyo(https://www.itead.cc/blog/rdm6300-arduino-door-control-system)
notas.. el programa tiene un sensor magnetico y un servo no los requiero por eso comento esas lineas, solo necesito la salida para acivar el led.
dejo el programa original en arduino y mi intento en ccs. Gracias de antemano

Arduino
Código: C
  1. long Password1=11402124;//Please type the card's ID number
  2. long Password2=7927290;//Please type the card's ID number
  3. int flag=0,RX_Flag=0;//serial port sign
  4. char Code[14];
  5. long Num=0;//decode data
  6. //int serpin=7;//pin of servo
  7. //int Door=0; //variable para el sensor magnetico
  8.  
  9. void Read_ID(void)
  10. {
  11.     int i=0;
  12.     char temp;
  13.     for(i=0;(Serial.available()>0);i++)//
  14.     //while(Serial.available()>0)
  15.     {
  16.       temp=Serial.read();
  17.       Serial.print(temp);
  18.       delay(2);
  19.       Serial.println(i);
  20.       if(temp==0X02)  //recieve the ssrt bit
  21.         {
  22.          flag=1;i=0;RX_Flag=0;//
  23.         }
  24.       if(flag==1)//detect the start bit and recieve data
  25.       {
  26.         if(temp==0X03)//detect the end code,
  27.         {
  28.          flag=0;  //zero clearing
  29.          if(i==13) RX_Flag=1;//
  30.          else RX_Flag=0;
  31.        break;
  32.         }
  33.          Code[i]=temp;
  34.       }
  35.     }      
  36.      flag=0;//
  37. }
  38. /*/
  39. void pulse( int serpin,int angle)
  40. {
  41.   int width;//
  42.   width=(angle*11)+500;//
  43.   digitalWrite(serpin,HIGH);//
  44.   delayMicroseconds(width);//
  45.   digitalWrite(serpin,LOW);//
  46.   delay(20-width/1000);
  47. }
  48. */
  49. void setup()
  50. {
  51.   pinMode(13,OUTPUT);
  52.   pinMode(serpin,OUTPUT);
  53.   Serial.begin(9600);
  54.   Serial.println("This is a test for access control system");
  55.   delay(100);
  56.   Serial.println(Password1);
  57. }
  58. void loop()
  59. {
  60.   int i;
  61.   long temp=0,time=0;
  62.   RX_Flag=0;
  63.   while(1)
  64.   {
  65.    Read_ID();
  66.   if(RX_Flag==1)
  67.   {
  68.     for(i=5;i<11;i++)//
  69.     {
  70.       Num<<=4;
  71.         if(Code[i]>64)  Num+=((Code[i])-55);
  72.         else Num+=((Code[i])-48);
  73.         Serial.println(Num);
  74.     }    
  75.     Serial.println(Num);    
  76.   if((Num==Password1)||(Num==Password2))//识别成功
  77.   {
  78.       digitalWrite(13,HIGH);
  79.       delay(5);
  80.     /*
  81.       for(int i=0;i<=50;i++)//
  82.      {
  83.         pulse(serpin,20);//
  84.       }
  85.      
  86.       delay(2000);
  87.      
  88.       while(analogRead(Door)>400);
  89.       delay(1000);
  90.       */
  91.       digitalWrite(13,LOW);
  92.       delay(5);
  93.     */
  94.       for(int i=0;i<=50;i++)//
  95.      {
  96.         pulse(serpin,180);//
  97.       }
  98.       */
  99.    }
  100.    
  101.  //  else  识别失败
  102. //    {
  103. //      digitalWrite(13,LOW);
  104. //    for(int i=0;i<=50;i++)//
  105. //     {
  106. //        pulse(serpin,90);//
  107. //      }
  108. //     }  
  109.     while(Serial.read()>0);//
  110.     RX_Flag=0;//
  111.     Num=0;//
  112.    }  
  113.   }
  114. }

En CCS // me compila pero no tengo nada a la salida serial
Código: C
  1. /*
  2. ZOLUTION
  3.  
  4. */
  5.  
  6. #include <16f1827.h>
  7. #include <stdlib.h>
  8. #USE DELAY(internal=4000000)
  9. #FUSES NOPROTECT,NOWDT
  10. #fuses nobrownout,nomclr
  11.  
  12. #use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8,ERRORS)
  13. //usando el pin de recepcion
  14. #bit RXDTSEL = 0x11D.7 // 0X11D HACE REFERENCIA AL REGISTRO APFCON0 bit 7
  15. #bit TXCKSEL = 0x11E.0 // 0X11D HACE REFERENCIA AL REGISTRO APFCON1 bit 0
  16.  
  17. #USE fast_io (A)      // Optimizamos E/S del PORTB ( muy importante para ahorrar memoria )
  18. #USE fast_io (B)
  19. #BYTE porta= 0X0C
  20. #BYTE portb= 0X0D
  21. #define LED PIN_B0
  22.  
  23.  
  24. // ******* variable globales ********
  25.  
  26. long Password1=6457979;//Please type the card's ID number
  27. int flag=0,RX_Flag=0;//serial port sign
  28. char Code[14];
  29. long Num=0;//decode data
  30. //int serpin=7;//pin of servo
  31. //int Door=0; // entrada analoga A0
  32.  
  33. // ***********************************
  34.  
  35.    // ***** INTERRUPCIONES : RDA Recepción USART ****
  36.    /*
  37.      #int_rda
  38.      void rda_handler(void)
  39.      {
  40.      Command=getc(); // recibe el comando ...
  41.      }
  42.      */
  43.    // ****************************************
  44.  
  45. // Ejecutar según comando recibido /////////
  46. void Read_ID(void);
  47.  
  48.  
  49.    void main()
  50.    {
  51.    RXDTSEL=0;// PIN CON VARIAS FUNCIONES EN 0 FUNCIONA COMO RX
  52.    TXCKSEL=0; // PIN CON VARIAS FUNCIONES EN 0 FUNCIONA COMO TX
  53.    //setup_adc_ports(NO_ANALOGS);
  54.    set_tris_b(0b00000010);
  55.    output_B(0x00);
  56.    
  57.    printf("This is a test for access control system");
  58.    delay_ms(100);
  59.    printf(Password1);
  60.    output_low (LED);
  61.  
  62.  
  63.    while(TRUE); // final del Bucle infinito
  64.    {
  65.    int i;
  66.   long temp=0; //,time=0;
  67.   RX_Flag=0;
  68.   while(true)
  69.   {
  70.    Read_ID();
  71.   if(RX_Flag==1)
  72.   {
  73.     for(i=5;i<11;i++)//
  74.     {
  75.       Num<<=4;
  76.         if(Code[i]>64)  Num+=((Code[i])-55);
  77.         else Num+=((Code[i])-48);
  78.         printf(Num);
  79.     }    
  80.     printf(Num);    
  81.  // if((Num==Password1)||(Num==Password2)||(Num==Password3))//识别成功 si alguna coincide
  82.    if(Num==Password1)//识别成功
  83.   {
  84.       output_low (LED);    
  85.       delay_ms(10000);
  86.       output_high (LED);
  87.       delay_ms(5);      
  88.    }
  89.  
  90.     while(getc()>0);//
  91.     RX_Flag=0;//
  92.     Num=0;//
  93.    }  
  94.   }
  95.  
  96.    }
  97.    }
  98.    
  99.    //****************************
  100.    void Read_ID(void)
  101. {
  102.     int i=0;
  103.     char temp;
  104.     for(i=0;(kbhit()>0);i++)//
  105.     //while(Serial.available()>0)
  106.     {
  107.       temp=getc();
  108.       printf(temp);
  109.       delay_ms(2);
  110.       printf(i);
  111.       if(temp==0X02)  //recieve the ssrt bit
  112.         {
  113.          flag=1;i=0;RX_Flag=0;//
  114.         }
  115.       if(flag==1)//detect the start bit and recieve data
  116.       {
  117.         if(temp==0X03)//detect the end code,
  118.         {
  119.          flag=0;  //zero clearing
  120.          if(i==13) RX_Flag=1;//
  121.          else RX_Flag=0;
  122.        break;
  123.         }
  124.          Code[i]=temp;
  125.       }
  126.     }      
  127.      flag=0;//
  128. }
  129.  // *****************************************