سلام خدمت عزیزان
یه مداری بستم با sim800 و ال سی دی کاراکتری و atmega8 . الآن برنامه به این صورت نوشته شده که با اومدن پیامک به ماژول ، میکرو میاد یه سری متغیر که اصلاً ربطی به پیامک ندارن رو روی ال سی دی نشون میده. منتها مشکل اینه که فقط دفعه ی اول مقدار متغیرهارو درست نشون میده. وقتی پیامک دوم فرستاده میشه مقدار بعضی متغیرها رو یه دونه کم میکنه. یا مثلاً متغیر sms_char که مقدارش برابر با صفر بود رو به 52 تغییر میده. متغیر g رو به 53 تغییر میده. خیلی عجیبه. کدهای بخش main کوتاه هستن. کسی از دوستان دلیلش رو میدونه؟
یه مداری بستم با sim800 و ال سی دی کاراکتری و atmega8 . الآن برنامه به این صورت نوشته شده که با اومدن پیامک به ماژول ، میکرو میاد یه سری متغیر که اصلاً ربطی به پیامک ندارن رو روی ال سی دی نشون میده. منتها مشکل اینه که فقط دفعه ی اول مقدار متغیرهارو درست نشون میده. وقتی پیامک دوم فرستاده میشه مقدار بعضی متغیرها رو یه دونه کم میکنه. یا مثلاً متغیر sms_char که مقدارش برابر با صفر بود رو به 52 تغییر میده. متغیر g رو به 53 تغییر میده. خیلی عجیبه. کدهای بخش main کوتاه هستن. کسی از دوستان دلیلش رو میدونه؟
کد:
#include <mega8.h>
#include <stdio.h>
#include <alcd.h>
#include <delay.h>
volatile char buffer[100];
char characto[4],wron[4];
unsigned char g=54,h=50,l=51,m=52,n=53,count = 0,sms_read=0,k=0,i=0,entered_pass_num = 0,pass_num=5,sms_char=0;
unsigned char a,b,c,d,e,f;
char del[9] = {'"','D','E','L',' ','A','L','L','"'};
char number[13];
interrupt [EXT_INT0] void ext_int0_isr(void)
{
sms_read++;
}
void AT_Send(void)
{
printf("AT%c",13);
for(k=0;buffer[k-2]!='O';k++) buffer[k]=getchar();
lcd_putsf("AT_OK");
delay_ms(1000);
lcd_clear();
printf("ATE0%c",13);
for(k=0;buffer[k-2]!='O';k++) buffer[k]=getchar();
lcd_putsf("Echo off");
delay_ms(1000);
lcd_clear();
}
void AT_CMGF(void)
{
printf("AT+CMGF=1%c",13);
for(k=0;buffer[k-2]!='O';k++) buffer[k]=getchar();
}
void AT_CSMP(void)
{
printf("AT+CSMP=17,167,0,0");
putchar(13);
for(k=0;buffer[k-2]!='O';k++) buffer[k]=getchar();
}
void del_msg(void)
{
printf("AT+CMGDA=");
for(i=0;i<9;i++) putchar(del[i]);
putchar(13);
delay_ms(4000);
for(k=0;buffer[k-2]!='O';k++) buffer[k]=getchar();
delay_ms(1000);
lcd_putsf("DEL_OK");
delay_ms(1000);
lcd_clear();
}
void wait_to_get(char ch)
{
if ( (UCSRA & 0x80) != 0 ) while (ch != getchar());
else
{
delay_ms(3);
if ( (UCSRA & 0x80) != 0 ) while (ch != getchar());
}
}
void main(void)
{
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x3F;
PORTD=0x00;
DDRD=0xC0;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
GICR|=0x40;
MCUCR=0x03;
GIFR=0x40;
TIMSK=0x00;
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("SMS READ");
DDRD.5 = 1;
delay_ms(1500);
DDRD.5 = 0;
delay_ms(10000);
lcd_clear();
AT_Send();
AT_CMGF();
AT_CSMP();
// Global enable interrupts
#asm("sei")
while (1)
{
if (sms_read == 2)
{
a = sms_char;
b = sms_char;
c = g;
d = g;
lcd_clear();
delay_ms(100);
lcd_gotoxy(0,0);
sprintf(characto,"%d%d%d%d",entered_pass_num,pass_num,sms_char,g);
lcd_puts(characto);
delay_ms(20);
lcd_gotoxy(7,0);
sprintf(wron,"%d%d%d%d",a,b,c,d);
lcd_puts(wron);
delay_ms(20);
sms_read = 1;
}
}
}





دیدگاه