سلام خدمت عزیزان
یه مداری بستم با 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; } } }
دیدگاه