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.
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.
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; }
Comment