какое-то странное поведение при использовании команды or - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » какое-то странное поведение при использовании команды or (глюк компилятора? или я что-то не так делаю?)
какое-то странное поведение при использовании команды or
shustovas Дата: Пт, 16.05.2014, 22:11  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 19.02.2011

Статус: Offline

Вечер добрый, Уважаемые форумчане. Столкнулся с такой проблемой:
пишу программу для GSM сигнализации, и обнаружил странное поведение...

Код
jdemvizov:
         portb.3 = 0 'гасим светодиод  
         HSERIN 500, nedojdalsya, [WAIT("+CLIP: ", 34,"+380"),STR Sdata\9] 'ждем входящий вызов, и после его получения копируем номер в Sdata[0,1,2.....8]
         pause 250
'          50-000-00-00                          05-111-11-11
         if SData[0] = 53 and SData[1] = 48 and SData[2] = 49 and SData[3] = 49 and SData[4] = 49 and SData[5] = 49 and SData[6] = 49 and SData[7] = 49 and SData[8] = 49 or SData[0] = 53 and SData[1] = 48 and SData[2] = 50 and SData[3] = 50 and SData[4] = 50 and SData[5] = 50 and SData[6] = 50 and SData[7] = 50 and SData[8] = 50 then 'тут сравниваем полученные данные с разрешенными 2-мя номерами
             HSerOut ["ATA" ,13]'поднять трубку
             pause 250 '3000
         else
             HSerOut ["ATH0" ,13]'сбросить вызов
             pause 250
         endif
         nedojdalsya:
         portb.3 = 1 '
         pause 250
return

Когда GSM модуль (SIM900) получает входящий вызов, он методом AT команд выдает в порт следующее: +CLIP: "+380xxxxxxxxx", где ххххххххх - собственно сам номер мобильного телефона.
Затем я эти ххххххххх, которые приходят в ASCII формате копирую в массив Sdata[0,1,2.....8], затем сравниваю с заранее заданными мной значениями номеров телефонов.
Все бы хорошо, если бы не одно НО!!!
Данные после OR в примере 05-111-11-11 обрабатывается нормально. А до OR обрабатываются НЕ ПРАВИЛЬНО!!!
Я даже местами их менял и другие пробовал... Но всё печально...
Почему? Почему до OR глючит, а после OR всё проходит как по маслу???
ЯНДЕКС Дата: 16.05.2014
DAlexV Дата: Пт, 16.05.2014, 23:24  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Цитата shustovas ()
Почему? Почему до OR глючит, а после OR всё проходит как по маслу???


if (SData[0] = 53 and SData[1] = 48 and SData[2] = 49 and SData[3] = 49 and SData[4] = 49 and SData[5] = 49 and SData[6] = 49 and SData[7] = 49 and SData[8] = 49) or (SData[0] = 53 and SData[1] = 48 and SData[2] = 50 and SData[3] = 50 and SData[4] = 50 and SData[5] = 50 and SData[6] = 50 and SData[7] = 50 and SData[8] = 50) then
вот из за этого. Но зачем такие заморочки ?????? Если переменная SData у нас стинговая то не проще ли делать так ?????
IF SData="500000000" or SData="051111111" then

И советую так же отказаться от строк " HSERIN 500, nedojdalsya, [WAIT("+CLIP: ", 34,"+380"),STR Sdata\9] " и им подобных. иначе будет пропускаться команды и раздуваться код.
Прием из Уарта организовать через таймер и буфер. При наступлении паузы полученную команду уже проверять и выполнять необходимые действия.
Хотя это мое мнение, каждый выбирает по себе.

Удачи wink
shustovas Дата: Пт, 16.05.2014, 23:31  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 19.02.2011

Статус: Offline

Цитата DAlexV ()
вот из за этого.
Да! Так все заработало!!! Огромное спасибо!!!
Цитата DAlexV ()
Если переменная SData у нас стинговая то не проще ли делать так ?????
а как мне принять дальше номер?
на что заменить это STR Sdata\9    ???
DAlexV Дата: Сб, 17.05.2014, 01:27  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Цитата shustovas ()
а как мне принять дальше номер?
Нет Батенька, а кто на Протоне пишет ????? Я вообще то на Рыбе пишу и Протон уже не помню sad . Поэтому пишу по памяти.

loop:
HSERIN 500, nedojdalsya,[STR Sdata]

if right$[STR Sdata,7]<>"+CLIP: "+chr$[34]+"+380" then goto loop ' фильтр команды +CLIP: и начала номера(страна+регион)

Numb=left$[STR Sdata,7] ' Numb и есть номер. Далее .... писал выше wink
Форум Picbasic.ru » Программирование МК » PicBasicPro » какое-то странное поведение при использовании команды or (глюк компилятора? или я что-то не так делаю?)
Страница 1 из 11
Поиск: