پاسخ : مشکلات sim900
مهندس های عزیز من یه برنامه نوشتم تو کدویژن.
برنامه خوندن sms دریافتی وصفر کردن PORTD.6 .
طبق این برنامه وقتی شروع میشه میره تو حلقه while و کل sms ها پاک میشه و j=0 میشه.وقتی smsمیاد برنامه میره تو اینتراپت وبا تابعی که نوشتم دریافت و کپی ومقایسه میشه واگه متن sms ام کد 1 بود PORTD.6=0 میشه.و دوباره برمیگرده و کل اسمس هارو پاک میکنه و j=0 میکنه تا اسمس بعدی.
حالا وقتی به عنوان اولین smsکد 1 رو میفرستم PORTD.6=0 میشه و مشکلی نیست.
مشکل اینجاست که این برنامه وقتی درست کار میکنه که فقط اولین sms متن 1 باشه.
مثلا اگه sms اول رو اشتباه بفرستم که کاری انجام نشه و با درست فرستادن sms دوم PORTD.6=0 کنه این کار انجام نمیشه.
درحالی که کل sms ها تو حلقه while پاک میشه و sms بعدی که بیاد حتما میره تو خونه 1 حافظه مثل بار اول.
حالا به نظرتون مشکل از چیه؟
منون میشم کمک کنید
اینم برنامه:
#include <mega32a.h>
#include <string.h>
#include <alcd.h>
#include <stdio.h>
#include <delay.h>
char Enter=13;
char double_quote=34;
char Ctrlz=26;
char buffer[32];
int i=1;
unsigned char devices;
float temp;
char sms[250];
char B;
char str1[250];
char k=0;
int j=0;
int p=0;
char str2[]="1";
int result;
interrupt [EXT_INT0] void ext_int0_isr(void)
{
lcd_gotoxy(7,1);
lcd_putsf("Get sms.."
;
delay_ms(1000);
lcd_clear();
delay_ms(2000);
printf("AT+CMGR=1%c",Enter);
while(j==0){
B=getchar();
switch(B){
case 0:
break;
case 10:
if(sms[61]!=0){
j=1;
};
break;
case 13:
if(sms[61]!=0){
j=1;
};
break;
default:
sms[p]=B;
p++;
};
};
strcpy(str1,&sms[61]);
result=strcmp(str1,str2);
if(result==0){
lcd_puts(str2);
PORTD.6=0;
}
delay_ms(500);
}
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x44;
DDRD=0x40;
GICR|=0x40;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0x40;
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x33;
ACSR=0x80;
SFIOR=0x00;
lcd_init(16);
lcd_clear();
printf("ATE0%c",Enter);
delay_ms(100);
#asm("sei"
while (1)
{
j=0;
printf("AT+CMGDA=%cDEL ALL%c%c",double_quote,double_quote,Enter);
delay_ms(1000);
}
}
مهندس های عزیز من یه برنامه نوشتم تو کدویژن.
برنامه خوندن sms دریافتی وصفر کردن PORTD.6 .
طبق این برنامه وقتی شروع میشه میره تو حلقه while و کل sms ها پاک میشه و j=0 میشه.وقتی smsمیاد برنامه میره تو اینتراپت وبا تابعی که نوشتم دریافت و کپی ومقایسه میشه واگه متن sms ام کد 1 بود PORTD.6=0 میشه.و دوباره برمیگرده و کل اسمس هارو پاک میکنه و j=0 میکنه تا اسمس بعدی.
حالا وقتی به عنوان اولین smsکد 1 رو میفرستم PORTD.6=0 میشه و مشکلی نیست.
مشکل اینجاست که این برنامه وقتی درست کار میکنه که فقط اولین sms متن 1 باشه.
مثلا اگه sms اول رو اشتباه بفرستم که کاری انجام نشه و با درست فرستادن sms دوم PORTD.6=0 کنه این کار انجام نمیشه.
درحالی که کل sms ها تو حلقه while پاک میشه و sms بعدی که بیاد حتما میره تو خونه 1 حافظه مثل بار اول.
حالا به نظرتون مشکل از چیه؟
منون میشم کمک کنید
اینم برنامه:
#include <mega32a.h>
#include <string.h>
#include <alcd.h>
#include <stdio.h>
#include <delay.h>
char Enter=13;
char double_quote=34;
char Ctrlz=26;
char buffer[32];
int i=1;
unsigned char devices;
float temp;
char sms[250];
char B;
char str1[250];
char k=0;
int j=0;
int p=0;
char str2[]="1";
int result;
interrupt [EXT_INT0] void ext_int0_isr(void)
{
lcd_gotoxy(7,1);
lcd_putsf("Get sms.."

delay_ms(1000);
lcd_clear();
delay_ms(2000);
printf("AT+CMGR=1%c",Enter);
while(j==0){
B=getchar();
switch(B){
case 0:
break;
case 10:
if(sms[61]!=0){
j=1;
};
break;
case 13:
if(sms[61]!=0){
j=1;
};
break;
default:
sms[p]=B;
p++;
};
};
strcpy(str1,&sms[61]);
result=strcmp(str1,str2);
if(result==0){
lcd_puts(str2);
PORTD.6=0;
}
delay_ms(500);
}
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x44;
DDRD=0x40;
GICR|=0x40;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0x40;
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x06;
UBRRH=0x00;
UBRRL=0x33;
ACSR=0x80;
SFIOR=0x00;
lcd_init(16);
lcd_clear();
printf("ATE0%c",Enter);
delay_ms(100);
#asm("sei"

while (1)
{
j=0;
printf("AT+CMGDA=%cDEL ALL%c%c",double_quote,double_quote,Enter);
delay_ms(1000);
}
}
دیدگاه