Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
14.10.2007, 20:48
|
|
Частый гость
Регистрация: 19.01.2007
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Отправка SMS через PIC16F877
Пытаюсь отправить SMS:
#use rs232(baud=2400,parity=N,xmit=PIN_C0,rcv=PIN_C1,bi ts=8)
char sms[];
SMS="0011000B819802207702F30000AA0AE8329BFD4697D9E C37x1 A";
puts("at+cmgf=0
");
puts("at+csms=0
");
puts("at+cmgs=23
");
puts(SMS);
Не работает.
Если тоже через HyperTerminal-все нормально.
Подскажите пожалуйста, в чем дело.
|
|
|
|
14.10.2007, 22:12
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Re: Отправка SMS через PIC16F877
Сообщение от Vilovski
|
Не работает.
Если тоже через HyperTerminal-все нормально.
Подскажите пожалуйста, в чем дело.
|
Подключаете выход Tx через что-нить типа MAX232 на COM порт компа и принимаете той же терминалкой. Все и увидите. (или ничего не увидите). Я б посмотрел что генерится на puts
|
|
|
|
14.10.2007, 22:25
|
|
Частый гость
Регистрация: 19.01.2007
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Моя программа эмулируется в PROTEUS.
Выводы PORTC1 и PORTC0 подключены к COMPIM,который соединен с COM4, к которому подключен мобильник.
Самое интересное, что
#use rs232(baud=2400,parity=N,xmit=PIN_C0,rcv=PIN_C1,bi ts=8)
puts("atdt 2998877")
работает(т.е. мобильник набирает номер 2998877).
|
|
|
|
14.10.2007, 22:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Re: Отправка SMS через PIC16F877
Сообщение от Vilovski
|
char sms[];
SMS="0011000B819802207702F30000AA0AE8329BFD4697D9E C37x1A";
|
Это что такое ? Если не помните эквивалентную запись ( я ее, кстати, тоже не помню), то выводите отдельным символом
И регистр массива не меняйте
;
char sms[]="0011000B819802207702F30000AA0AE8329BFD4697D9EC37 ";
puts(sms);
putc(0x1A);
|
|
|
|
14.10.2007, 22:42
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,955
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
|
Сообщение от Vilovski
|
Моя программа эмулируется в PROTEUS.
|
Ох уж эти эмуляторы.. Не верю я им ![Весело](images/smilies/icon_laugh.gif) Да, насколько я помню, мобила после каждой отосланной ей строки отвечает что-то типа "Ок". Так вот этого ответа надо дождаться. Я возился с семеном С35 - так вот он игнорировал прием до окончания вывода своего "Ок". Только я для упрощения анализа переключал ее в режим цифрового ответа - не "Ок", а "0"
|
|
|
|
14.10.2007, 22:58
|
|
Частый гость
Регистрация: 19.01.2007
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
char SMS[]="0011000B819802207702F30000AA0AE8329BFD4697D9EC37 ";
puts("at+cmgf=0
");
gets(buf);//‹-Почему-то тормозит здесь
puts("at+csms=0
");
gets(buf);
puts("at+cmgs=23
");
gets(buf);
puts(sms);
putc(0x1A);
gets(buf);
|
|
|
|
14.10.2007, 23:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Код:
|
Примеры сеансов передачи SMS:
"AT+CMGS=15" 0x0D
0x0D 0x0A › "07917360899999F21100098168611814F10000A7010130" ^Z - сообщение с номером сервис центра
0x0D 0x0A "+CMGS: 204" 0x0D 0x0A
0x0D 0x0A "OK" 0x0D 0x0A
"AT+CMGS=15" 0x0d
0x0D 0x0A › "001100098168611814F10000A7010130" ^Z - сообщение без номера сервис центра |
Убери символ 0А из того сообщения, после которого тормозит
Не, вру - тормоза могут быть - это нормально -только после 20 секунд идет ошибка
Кажется, понял - функция gets принимает строку, оканчивающуюся нулевым символом. В твоем случае его нет, отсюда бесконечный цикл.Используй функцию приема байта - 2 или 3 раза - getc()- по количеству принимаеміх байтов.
|
|
|
|
14.10.2007, 23:25
|
|
Частый гость
Регистрация: 19.01.2007
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
В смысле, ошибка?
Но ведь если она идет, то это ненормально.
И тормозит не посте вывода SMS:
char SMS[]="0011000B819802207702F30000AA0AE8329BFD4697D9EC37 ";
puts("at+cmgf=0
");
gets(buf);//‹-Почему-то тормозит здесь
|
|
|
|
14.10.2007, 23:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
функция gets принимает строку, оканчивающуюся нулевым символом. В твоем случае его нет, отсюда бесконечный цикл.Используй функцию приема байта - 2 или 3 раза - getc()- по количеству принимаемых байтов.
В приложении - посылка.прием смс как пример.
Прикрепленный файл: 3714397.rar
|
|
|
|
15.10.2007, 01:53
|
|
Частый гость
Регистрация: 19.01.2007
Сообщений: 12
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Спасибо.
Getc() действительно помогло.
А главная глюка состояла в том, что puts()выводит пару "лишних" (в моей ситуации) символов в конце строки, поэтому я заменил вызов этой функции puts(sms)на цикл из putc().Теперь все работает! :P
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:12.
|
|