Цитата(chief_olimp @ Jan 5 2009, 23:41)

это в текстовом режиме
Для цифрового (PDU) можно использовать UNICODE с расширеным набором символов (рус. укр. и тд)
chief_olimpты не путаеш вид СМС с байтамы которые непосредственно идут в модуль???
помоему путаеш...
вот смотри...
если ты отправляеш в модуль F
ТО ЭТО БУДЕТ ТАК
ldi____BUF,0x46____; F
rcall__TX_232
если ты отправляеш в модуль П
то так.. с преворительной подготовкой..
;______П-----------это по русски
;_04_1F_04_40 это преобпазуем в UCS2
;_30_34_31_46 а это UCS2 в ASCII
ldi____BUF,0x30
rcall__TX_232
ldi____BUF,0x34
rcall__TX_232
ldi____BUF,0x31
rcall__TX_232
ldi____BUF,0x46
rcall__TX_232
ТОЕСТЬ КАК НЕ КРУТИ В МОДУЛЬ ЛЕЗИТ --- ASCII
это был пример на вводе СМС
но вед остальное впринципе лезит в модуль токже.. тока без лишних преобразований
типа
;AT+CSCS="UCS2" это сама команда что надо отправит в ТЕКСТОВОМ виде
;41 54 2B 43 53 43 53 3D 22 55 43 53 32 22 0D а это то что непосредственно
лезит в модуль в hex но сами биты (информация) передаётся в ASCII
ВОТ Я И СПРАШИВАЮ ЧТО МЕТОД ОБЩЕНИЯ ЕСТЬ ТОЛЬКО В ASCII?????
если да то тут проблемы малость решаются....
так ка диапазон ASCII от 00 до 7F
даже можно начать с 20 и включив в список такие на 1A 0D 0A
ЭТО Я К ТОМУ ЧТО Я ПИШУ ТОКА НА АСМ
и этим решается такие проблемы как например приём байта.
AT+.....
OK
вот после АТ надо принять ОК... тут всего два байта..
а бывает больше ..как узнать длину всего ответа?????????????????????????
но кроме дины есть ещё и факт что мы оттуда ваще ничего не примем!!!
так вот тут в таком случае можем совсем повиснуть в ожидании..
делаем так..
судя по временым интервалам в работе с гсм модулем
лучше использовать таймер 16 бит
так вот.... используем софтовый рх_тх
запускаем тамер TMR1
опрашиваем пин рх
если не 0 (старт бит не пришол)
то проверяем переполнение
если небыло то в начало приёма
если было то значит сильно долго ждём и походу не дождёмя..
и выходим скажем с результатом 0х01
так вот если приём состоялся
то мы получим наш ОК + последний байт будет 0х01 (всякие 0D я тут пока пропускаю для упрощения всасывания...)
а если добавитьещё скажем
inc Len после принятия каждого байта то получится что мы их просто тупо пощитаем
и будем знать длину принятого ответа.
получается !!!!
1- не зависли при отсутствии ответа
2- знаем длину
----------------------
усложняем .... врубаем превание INT0 и на эту ногу заводим RX
и при срабатывании прерывания выполняем выше описаную ПП
добавив в ней вконце выставление бита в каком нибуть регистре..
типа чтение состоялось
и загрузку всего принятого в озу
---
дальше...возвращаемся к..
AT+.....
OK
теперь мы тут ОК уже не ждём ... всмысле что он у нас сам считается автоматом и запшится в память
а будем опрашивать какото время тот самый выставленый бит.
если бит выставлен .. значит ответ был.
тогда обрабатываем наш ОК или что там пришло...
стираем этот бит
и идём дальше по программе...
вариант хороший...
удобно то что можно включать выключать прерывание
тем самым не мешать выполнению какойто задачи с высшим приоритетом.. ну и итд..