не знаю в тот раздел форума попал или не тот.. надеюсь если что подскажите...
задача состоит в следующем есть модем SE на основе gr47 работаю с ним через iar workbench так вот жду звонка определенное время нормально... звонок приходит я его вижу... открываю порт - модем уходит на перезагрузку... скора я уже
ожидание звонка:
// Ожидание ответа от модема, возвращает значение 0 в случае неудачи или количество
// пришедших байт в противном случае
// Параметры: адрес ожидаемой строки, длина ожидаемой строки, максимальное время
// ожидания в 1/100х секунды, число ожидаемых байт( если не задана строка ожидания),
// адрес буффера записи пришедших символов
word wait_response(byte *stroka, word leng, word maxtime, word maxnum, byte *buffer)
{
word clk, i, j;
clk = CentSec();
j = 0;
while(1)
{
while(ReadyRcvCom(COM_MODEM)==0) // проверка готовности приема
if((CentSec()-clk)>maxtime)return(0); // истекло максимальное время ожидания
*(buffer+j) = RcvCom(COM_MODEM); // сохранить пришедший байт
j ++;
if(j > LNGT) return(0); // ограничение по длине приемного буффера
for(i=0;i<leng;i++)
if( (j < leng)||(*(stroka+leng-i-1) != *(buffer+j-i-1)) ) break;
if( (leng!=0)&&(i==leng) ) return(j);// строка ожидания получена
if( (leng==0)&&(j==maxnum) ) return(j);// ожидаемое количество символов пришло
}
return(0);
}
сам код где жду звонка:
if(wait_response("RING", 4, 3000, 0, rec_mod))
{
send_modem("ATH\r", 5);
ExternalWD();
S_1 = 0;
S_2 = 0;
while ((S_1 <= 180000)||(S_2 <= 180000))
{
if((ReadyTrsCom (1)&0x2)!=0) Dir485(0); // 485 интерфейс на прием
switch(ReadyRcvCom (0))
{
case(0): break;
case(1): Dir485(1); // 485 интерфейс на передачу
TrsCom (1,RcvCom (0));
S_1=0;
break;
case(2):
case(3): RcvCom (0); break;
default: break;
}
switch(ReadyRcvCom (1))
{
case(0): break;
case(1): TrsCom (0,RcvCom (1));
S_2=0;
break;
case(2):
case(3): RcvCom (1); break;
default: break;
}
}