UART Strings in HITECH C

Discussion in 'Embedded Systems and Microcontrollers' started by nsp, Feb 27, 2011.

  1. nsp

    Thread Starter New Member

    Feb 27, 2011
    1
    0
    Hi all,

    I am writing in HITECH C and I am using a PIC 16F690.

    Does anyone have any pointers or examples of how to read a string from UART?

    This is how I'm doing it at the moment (which is just checking the characters that come in and making sure they are in the right order):


    Code ( (Unknown Language)):
    1. #include <stdio.h>
    2. #include <htc.h>
    3. #include "usart.h"
    4. #include <string.h>
    5.  
    6. #define _XTAL_FREQ 4000000
    7. unsigned char sGPIO;
    8. unsigned char input;
    9. unsigned char data;
    10. unsigned char data2[3] = {0};
    11. int flag =0;
    12.  
    13. struct ee_map_s {
    14.     char  sn[80];  
    15.     long  l;
    16.     float f;
    17.     char  c;
    18. };
    19.  
    20. #define EE_ADDR(member) (offsetof(struct ee_map_s, (member)))
    21.  
    22. void ee_read(unsigned char ee_addr, void *vp, unsigned char n)
    23. {
    24.     unsigned char *p = vp;
    25.  
    26.     while (n--) {
    27.         *p++ = eeprom_read(ee_addr++);
    28.     }
    29. }
    30.  
    31. void ee_write(unsigned char ee_addr, void *vp, unsigned char n)
    32. {
    33.     unsigned char *p = vp;
    34.  
    35.     while (n--) {
    36.         eeprom_write(ee_addr++, *p++);
    37.     }
    38. }
    39.  
    40. void main(void){
    41.  
    42. //    ee_write(EE_ADDR(f), &f, sizeof f);
    43.  
    44. //    ee_read(EE_ADDR(f), &f, sizeof f);
    45.  
    46.  
    47.     ANS11 = 0;
    48.    
    49.     SYNC = 0;
    50.     TRISA3 = 1;
    51.     TRISC0 = 0;
    52.     TRISB5 = 0;
    53.     TRISC7 = 1;
    54.     TRISC1 = 0;
    55.    
    56.     T0IE = 1;
    57.     PEIE = 1;
    58.     RCIF = 0;
    59.     RCIE = 1;
    60.     IOCA3 = 1;
    61.     RABIF = 0;
    62.     SPEN = 1;
    63.     CREN=0;
    64.     CREN=1;
    65.     ei();
    66.     init_comms();
    67.     RC0 =1;
    68.     __delay_ms(12000);
    69.     RC1 = 1;
    70.     __delay_ms(1200);
    71.     RC1 = 0;
    72.     __delay_ms(1200);
    73.     RC1 = 1;
    74.    
    75.     RC0=0;
    76.    
    77.         printf("AT+CMGF=1\r");
    78.         __delay_ms(1000);
    79.         printf("AT+CNMI=2,2,2,1,0\r");
    80.         __delay_ms(1000);
    81.         printf("AT+CMGD=1,4\r");
    82.         __delay_ms(1000);
    83.     while(1){
    84.        
    85.         while(RA3 == 0)
    86.         {
    87.            
    88.             RC0 = 1;
    89.             printf("AT+CMGF=1\r");
    90.             __delay_ms(1000);
    91.             printf("AT+CMGS=phonenum\r");
    92.             __delay_ms(1000);
    93.             printf("The alarm has been tripped!\r");
    94.             __delay_ms(1000);            
    95.             printf("\x001A");
    96.             __delay_ms(20000);
    97.            
    98.            
    99.         }
    100.         if(flag==3)
    101.         {
    102.             if(strstr(data2,"qst")!= NULL)
    103.             {
    104.                 __delay_ms(1000);
    105.                 printf("AT+CMGF=1\r");
    106.                 __delay_ms(1000);
    107.                 printf("AT+CMGS=phonenum\r");
    108.                 __delay_ms(1000);
    109.                 printf("I'm fine!\r");
    110.                 __delay_ms(1000);            
    111.                 printf("\x001A");
    112.                 __delay_ms(8000);
    113.                 printf("AT+CMGD=1,4\r");
    114.                 __delay_ms(1000);    
    115.                 flag =0;
    116.             }
    117.             memset(data2,0,sizeof(data2));
    118.         }
    119.    
    120.         PORTC = sGPIO;
    121.  
    122.  
    123.        
    124.        
    125.        
    126.     }
    127. }
    128.  
    129. void interrupt isr(void)
    130. {
    131.     PORTA;
    132.     RABIF = 0;
    133.     if(RA3==0)
    134.     {
    135.         sGPIO ^= 0b000001;
    136.        
    137.     }
    138.    
    139.     if( RCIE || RCIF )
    140.     {
    141.  
    142.         if(OERR)
    143.         {
    144.             CREN=0;
    145.             TXEN=0;
    146.             TXEN=1;
    147.             RCIE=1;
    148.             CREN=1;
    149.         }
    150.         while(RCIF)
    151.         {
    152.             data = getch();
    153.             if(data == 'q')
    154.             {
    155.                 flag = 1;
    156.                 data2[0] = 'q';
    157.             }
    158.             if(data == 's' && data2[0] == 'q')
    159.             {
    160.                 flag++;
    161.                 data2[1] = 's';
    162.             }
    163.             if(data == 't' && data2[1] == 's')
    164.             {
    165.                 flag++;
    166.                 data2[2] = 't';
    167.             }
    168.            
    169.         }
    170.        
    171.  
    172.  
    173.     }
    174.    
    175.    
    176. }
     
Loading...