سلام دوستان عزیز خسته نباشید
تابع زیر مربوط به دریافت رشته در پورت سریال هستش
ولی وقتی مقدار رو داخل تابع میخونم درسته ولی وقتی داخل تابع Main فراخوانی میکنم بعضی وقتا درست نشون نمیده(مربوط به SIM800)
و تابع زیر برای به دست اوردن نام اپراتور هستش ولی وقتی از تابع خارج میشه و میخوام تابع دیگری رو فراخوانی کنم میکرو هنگ میکنه
مثل بعد از تابع بالا وقتی میخوام کل اس ام اس هارو پاک کنم هنگ میکنه
ممنون از همتون
در ضمن برنامه نویسی در محیط Atmel Studio هستش و اگه کتابخونه برای Usart معرفی کنید ممنون میشم
تابع زیر مربوط به دریافت رشته در پورت سریال هستش
ولی وقتی مقدار رو داخل تابع میخونم درسته ولی وقتی داخل تابع Main فراخوانی میکنم بعضی وقتا درست نشون نمیده(مربوط به SIM800)
[FONT=Yekan]unsigned char * uart_gets(void){[/FONT] unsigned int n = 0 , c = 0, a = 0;
unsigned char s;
static unsigned char _string[100];
for (n=0;n<=100;n++){
_string[n] = '\0';
}
n = 0;
while (1){
again:
c = uart_getc();
_delay_ms(50);
if (!(c & UART_NO_DATA)){
s = (unsigned char)c;
if ((s == '\r' || s == '\n') && (n == 0)) goto again;
if ((s == '\r' || s == '\n') && (n != 0)){
return &_string;
}
_string[n] = s;
n++;
}
}
[FONT=Yekan]}
[/FONT]
و تابع زیر برای به دست اوردن نام اپراتور هستش ولی وقتی از تابع خارج میشه و میخوام تابع دیگری رو فراخوانی کنم میکرو هنگ میکنه
[FONT=Yekan]const char * SIM800_OPERATOR_Name(void){[/FONT] auto unsigned char * msg_receive, operator_name[20], msg[100];
for (int q=0;q<=100;q++) operator_name[q] = '\0';
for (int q=0;q<=100;q++) msg[q] = '\0';
unsigned int a = 0 , b = 0 , s = 0;
sprintf(msg,"AT+CSPN?%c",Ent);
TIMER0_Start();
t_en_er_check = 1;
check_operatot_name:
if (t_er_check >= 1){
t_er_check = 0;
TIMER0_Stop();
t_en_er_check = 0;
return "Time Out E108";
}
//USART_Transmit_String(msg);
uart_puts(msg);
_delay_ms(300);
msg_receive = uart_gets();
if (strstr(msg_receive,"+CSPN:") == NULL)
{
_delay_ms(100);
goto check_operatot_name;
}else{
TIMER0_Stop();
t_en_er_check = 0;
for (a=0;a<=strlen(msg_receive);a++)
{
if (msg_receive[a] == Cot || s == 1)
{
s = 1;
operator_name[b] = msg_receive[a+1];
if (operator_name[b] == Cot){
operator_name[b-1] = '\0';
msg_receive = NULL;
free(msg_receive);
a = 0;
b = 0;
s = 0;
return &operator_name;
}
b++;
}
}
}
}
مثل بعد از تابع بالا وقتی میخوام کل اس ام اس هارو پاک کنم هنگ میکنه
const char * SIM800_SMS_Delete(unsigned int _del){
auto unsigned char * msg_receive = NULL, msg[100];
for (int q=0;q<=100;q++) msg[q] = '\0';
if(_del <= 5){
TIMER0_Start();
t_en_er_check = 1;
if (_del == 0)
sprintf(msg,"AT+CMGDA=\"DEL READ\"%c",Ent);
else if (_del == 1)
sprintf(msg,"AT+CMGDA=\"DEL UNREAD\"%c",Ent);
else if (_del == 2)
sprintf(msg,"AT+CMGDA=\"DEL SENT\"%c",Ent);
else if (_del == 3)
sprintf(msg,"AT+CMGDA=\"DEL UNSENT\"%c",Ent);
else if (_del == 4)
sprintf(msg,"AT+CMGDA=\"DEL INDEX\"%c",Ent);
else if (_del == 5)
sprintf(msg,"AT+CMGDA=\"DEL ALL\"%c",Ent);
else{
TIMER0_Stop();
return "ER SMS DEL";
}
check_Del:
if (t_er_check >= 1){
t_er_check = 0;
TIMER0_Stop();
t_en_er_check = 0;
return "Time Out E110";
}
//USART_Transmit_String(msg);
uart_puts(msg);
_delay_ms(500);
msg_receive = uart_gets();
if (strstr(msg_receive,"OK") == NULL){
_delay_ms(100);
goto check_Del;
}else{
TIMER0_Stop();
msg_receive = NULL;
free(msg_receive);
t_en_er_check = 0;
if (_del == 0)
return "Del Read";
else if (_del == 1)
return "Del UnRead";
else if (_del == 2)
return "Del Sent";
else if (_del == 3)
return "Del UnSent";
else if (_del == 4)
return "Del Index";
else if (_del == 5)
return "Del All";
else
return "ER SMS DEL";
}
}else
return "ER Code SMS Delete";
}
ممنون از همتون
در ضمن برنامه نویسی در محیط Atmel Studio هستش و اگه کتابخونه برای Usart معرفی کنید ممنون میشم
دیدگاه