Thông báo

Collapse
No announcement yet.

PIC16f877a nhận tin nhắn từ module SIM300 bị lỗi cần mọi người giúp

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • PIC16f877a nhận tin nhắn từ module SIM300 bị lỗi cần mọi người giúp

    Em đang làm cái đồ án mà không biết sai ở đâu. bác nào ghé qua thì xem giúp em tí ạ
    Vấn đề em gặp phải là không đọc được từ buffer.
    Code:
    #include <16f877a.h>
    #include <string.h>
    #fuses NOWDT,XT,PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
    #use delay(clock=4000000)
    #use fast_io(d)
    #use fast_io(b)
    #use fast_io(c)
    #use fast_io(a)
    #use fast_io(e)
    #byte porta=0x05
    #byte portb=0x06
    #byte portc=0x07
    #byte portd=0x08
    #byte porte=0x09
    #bit RS=PORTE.0
    #bit RW=PORTE.1
    #bit E=PORTE.2
    #bit RD0=PORTD.0
    #bit RD1=PORTD.1
    #bit RD2=PORTD.2
    #bit RD3=PORTD.3
    #bit RD4=PORTD.4
    #bit RD5=PORTD.5
    #bit RD6=PORTD.6
    #bit RD7=PORTD.7
    #bit THUAN=PORTC.0
    #bit NGHICH=PORTC.1
    #bit CB=PORTC.3
    #use rs232(baud=9600,parity=n,xmit=PIN_C6,rcv=PIN_C7,bits=8)
    char buff[90],nd_sms[20],nd_lcd[30],kt[15];
    int i,q,w,k,j,h,n,z,l,y,s,x,m,A[10],f,bao;
    int1 ok;
    #INT_RDA  
    void receive()
    {
       clear_interrupt(INT_RDA);
      disable_interrupts(GLOBAL);
       if(kbhit())
       {
          buff[i]=getc();
          i++;
          if (i==2)
          {ok=1;}
          if(i==90) i=0;
       }
       enable_interrupts(GLOBAL);
    }
    void lcd1();
    void lcd2();
    void xoadulieu();
    void khoitao();
    void xuatlcd();
    void xoalcd();
    void ktsms();
    void xulysms();
    void xulysms1();
    void kiemtramo();
    void xuly();
    void xoadulieu()
    {  
       for(h=0;h<=89;h++) //Xoa chuoi[]
       {buff[h]=0;}
       for(f=0;f<=20;f++) //Xoa 
       {kt[f]=0;}
       for(h=0;h<=20;h++) //Xoa 
       {nd_sms[h]=0;}
       h=0;
    }
    void main()
    {
     set_tris_e(0b000);
     set_tris_d(0b11110000);
     set_tris_b(0b00000000);
     set_tris_c(0b10001000);                                         
     enable_interrupts(int_rda);
     enable_interrupts(global);   
       portb=0;
       CB=0;
       ok=0;
       k=0;
       xoalcd();
       strcpy (nd_lcd,"DO AN");
       lcd1();
       strcpy (nd_lcd,"NHA THONG MINH");
       lcd2();
       delay_ms(1500);
       xoalcd();
       strcpy (nd_lcd,"DANG CAU HINH");
       lcd1();
       strcpy (nd_lcd,"MODULE SIM300");
       lcd2(); 
       printf("at\r\n");
       delay_ms(2000);
       delay_ms(2000);
       printf("at\r\n");
       delay_ms(2000);
       printf("at\r\n");
       delay_ms(2000);
       xoadulieu();
       printf("at\r\n");
       delay_ms(2000);
       while (ok==0)
       {  
       xoadulieu();
       xoalcd();
       strcpy(nd_lcd,"LOI KET NOI");
       lcd1();
       printf("at\r\n");
       delay_ms(2000);
       }
       if(ok==1)
      {
       xoadulieu();
       xoalcd();
       strcpy (nd_lcd,"DA KET NOI");
       lcd1();
       strcpy (nd_lcd,"PIC <=> MODULE");
       lcd2();
       printf ("ate0\r\n");
       delay_ms(2000);
       printf ("at+csq\r");
       delay_ms(2000);
       printf ("at+cmgf=1\r");
       delay_ms(2000);
       xoalcd();
       strcpy (nd_lcd,"DA CAU HINH XONG");
       lcd1();
       delay_ms(300);
       printf("at+cmgd=1\r\n"); 
       delay_ms(2000);
       xoalcd();
       strcpy (nd_lcd,"BAO MAY CHU");
       lcd1();   
       strcpy (nd_lcd,"CALL PHONE");
       lcd2();  
       printf("atd01674365935;\r\n");
       delay_ms(10000);
       printf("ath");
       delay_ms(5000);
       xoalcd();
       n=0;
       i=0;
       xoadulieu();
      }
      while (TRUE)
      {
          while(n==0)
          {
              xoalcd();
             strcpy(nd_lcd,"XAC NHAN MO CUA");
             lcd1();
             strcpy(nd_lcd,"TU MAY CHU");
             lcd2();
             printf("at+cmgs=\"01674365935\"\r\n");
             delay_ms(1500);
             Printf("SEND Ok");
             delay_ms(1000);
             putc(26);
             delay_ms(25000);
             ktsms();
             delay_ms(25000);
           
    
          }
          if(n==1) xuly();
      }
    }
    
    
    void lcd1()
    {
     portB=0x38;
     khoitao();
     portB=0x0c;
     khoitao();
     portB=0x80+k;
     khoitao();
     for (l=0;l<=strlen(nd_lcd)-1;l++)
      {
       portB=nd_lcd[l];
       xuatlcd();
      }
    }
    void lcd2()
    { portB=0x38;
      khoitao();
      portB=0x0c;
      khoitao();
      portB=0xc0+k;
      khoitao();
      for (l=0;l<=strlen(nd_lcd)-1;l++)
      {
       portB=nd_lcd[l];
       xuatlcd();
      }
    }
    void khoitao()
    {
     RS=0;
     RW=0;
     E=1;
     E=0;
     delay_ms(10);
    }
    void xuatlcd()
    {
     E=1;
     RS=1;
     RW=0;
     E=0;
     delay_ms(10);
    }
    void xoalcd()
    {portB=0x01;
     khoitao();
     k=0;}  
    void ktsms()
    {
     s=0;
       printf("at+cmgs=\"01674365935\"\r\n");
           delay_ms(500);
           printf("buff:%d", i);
           delay_ms(500);
           putc(26);
         xoalcd();
         strcpy(nd_lcd,"SO SANH BUFF");
         lcd1();
         delay_ms(10000);
            printf("at+cmgs=\"01674365935\"\r\n");
           delay_ms(500);
           printf("buff:%s", buff);
           delay_ms(500);
           putc(26);
     for (x=0;x<=90;x++)
     {
    
      if (buff[x]=='\n')
      {
       s++;
       //n=1;
      }
      if (s==3)
      {
       n=1;
      }
     }
    }
    void xulysms()
    {xoadulieu();
     printf("at+cmgr=1\r\n");
     delay_ms(2500);
     y=0;
     for (z=63;z<=strlen(buff)-9;z++)
     {
      nd_sms[y]=buff[z];
      y++;
     }
     y=0;
    }
    void xulysms1()
    {xoadulieu();
     printf("at+cmgr=1\r\n");
     delay_ms(2500);
     q=0;
     for (w=63;w<=strlen(buff)-9;w++)
     {
      nd_sms[q]=buff[w];
      q++;
     }
     q=0;
    } 
    
    void xuly()
         {
          xoalcd();
          strcpy(nd_lcd,"CO TIN NHAN MOI");
          lcd1();
          delay_ms(800);
          strcpy (nd_lcd,"DANG XU LI...");
          lcd2();
          delay_ms(500);
          xulysms();
          delay_ms(1000);
           xoalcd();
          strcpy(nd_lcd,"ND TIN NHAN :");
          lcd1();
          strcpy(nd_lcd,nd_sms);
          lcd2();
          delay_ms(20000);
          strcpy(kt,"Ok");
          if(strcmp(kt,nd_sms)==0)
          { 
           printf("at+cmgs=\"01674365935\"\r\n");
           delay_ms(500);
           printf("CUA DA MO");
           delay_ms(500);
           putc(26);
           puts("at+cmgd=1\r\n"); 
           delay_ms(5000);
           xoalcd();
           strcpy(nd_lcd,"CUA DA MO");
           lcd1();
           delay_ms(500);
    
           printf("at+cmgd=1\r");
           delay_ms(2000);
           xoadulieu();
          }
          else
          {xoalcd();
          strcpy(nd_lcd,"SAI MA XAC NHAN");
          lcd1();
          reset_cpu();
         }
         n=0;
         }
    Các bác xem phần while(TRUE) đi ạ. Trong while(TRUE) em chỉ đợi tin nhắn thôi chứ không làm gì nữa khác. Khi vào hàm ktsms(). kiểm tra biến i, thì nó luôn # 0. tăng dần sau mỗi lần gửi sms chứng tỏ có buffer. mà khi kiểm tra biến buff thì lại rỗng. gửi biến buff qua sms không hiển thị ký tự nào hết. CÓ nghĩa là có buffer và không đọc đựoc buffer hoặc do ngắt không đúng nên buffer toàn là ký tự rỗng. Module sim300 nối vào máy tính test thì gửi nhận tin nhắn, gọi ok, trả về qua terminal luôn đúng nên không thể có hư được.

  • #2
    các bác ghé vào đọc thì giúp em với nhé

    Comment


    • #3
      Nguyên văn bởi vandao_ts Xem bài viết
      các bác ghé vào đọc thì giúp em với nhé
      bạn xem lại điện áp nhé.
      điện áp cấp cho sim là bao nhiêu?
      điện áp cấp cho pic là bao nhiêu?
      điện áp cấp cho pic <= điện áp cấp cho sim thì mới được.

      Comment

      Về tác giả

      Collapse

      vandao_ts Tìm hiểu thêm về vandao_ts

      Bài viết mới nhất

      Collapse

      Đang tải...
      X