Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Общетехнические вопросы

Общетехнические вопросы Общие вопросы аналоговой и цифровой электроники.

Ответ
 
Опции темы Опции просмотра
Старый 08.10.2008, 02:19   #1
fol
Senior Member
 
Аватар для fol
 
Регистрация: 04.05.2007
Возраст: 44
Сообщений: 267
Вес репутации: 264/51
fol is a jewel in the roughfol is a jewel in the roughfol is a jewel in the rough
По умолчанию Вопрос по SMS. Снова.

Всем привет.
Вроде пролез поисковиком по всем сусекам но так и не нашол ответа на свой вопрос.
Прием SMS. Так как при приеме телефоном (Сименс С55) очередной SMS приложение (PIC контроллер) не извещается о приходе SMS, то приходилось всегда, с некоторой периодичностью, читать содержимое памяти телефона. При приходе SMS, приложение читает эту SMS, делает необходимые действия, удаляет SMS и начинается все с начала.
Не очень это мне нравиться. Если кто в теме, подскажите по каким признакам приложение может определить входящую SMS. Вед вот например прога "SiMoCo" (софт по Винду) определяет, причем "SiMoCo" не елозит постоянно по памяти телефона. Сегодня снова проверял. То есть телефон подключен к "SiMoCo" и молчт. В линии UART тишина, ни туда ни сюда данные не идут. Есть правда с периодом в секуну какое то прерывание (типа спад на несколько мс) но это не данные. И как только телефон принимает SMS то "SiMoCo" сразу выкидывает табло. Как? Как "SiMoCo" узнает о входящей SMS? После этого уже "SiMoCo" начинает чтение и прчее. Вешал телефон на другие терминалы, другие терминалы при приеме телефоном SMS не видят данных. выходит что телефон молчит. Или не молчит?
Подскажите куда глядеть. Устал уж. Нужно направление.
fol вне форума   Ответить с цитированием
Старый 08.10.2008, 03:02   #2
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 44
Сообщений: 2,610
Вес репутации: 2570/98
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Ответ: Вопрос по SMS. Снова.

Simens уже ушел с GSM рынка. Зачем разбираться с этим раритетом? Есть sim300, он всё сообщает.
fantom вне форума   Ответить с цитированием
Старый 08.10.2008, 07:09   #3
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 49
Сообщений: 4,100
Вес репутации: 1883/106
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию Ответ: Вопрос по SMS. Снова.

Цитата:
Сообщение от fol Посмотреть сообщение
Всем привет.
Вроде пролез поисковиком по всем сусекам но так и не нашол ответа на свой вопрос.
Прием SMS. Так как при приеме телефоном (Сименс С55) очередной SMS приложение (PIC контроллер) не извещается о приходе SMS, то приходилось всегда, с некоторой периодичностью, читать содержимое памяти телефона. При приходе SMS, приложение читает эту SMS, делает необходимые действия, удаляет SMS и начинается все с начала.
Не очень это мне нравиться. Если кто в теме, подскажите по каким признакам приложение может определить входящую SMS. Вед вот например прога "SiMoCo" (софт по Винду) определяет, причем "SiMoCo" не елозит постоянно по памяти телефона. Сегодня снова проверял. То есть телефон подключен к "SiMoCo" и молчт. В линии UART тишина, ни туда ни сюда данные не идут. Есть правда с периодом в секуну какое то прерывание (типа спад на несколько мс) но это не данные. И как только телефон принимает SMS то "SiMoCo" сразу выкидывает табло. Как? Как "SiMoCo" узнает о входящей SMS? После этого уже "SiMoCo" начинает чтение и прчее. Вешал телефон на другие терминалы, другие терминалы при приеме телефоном SMS не видят данных. выходит что телефон молчит. Или не молчит?
Подскажите куда глядеть. Устал уж. Нужно направление.
Возможные варианты: возможность получить уведомление без запроса (настраивается). Так же получаешь короткий сигнал на выводе RING. Токо это не по семену грю. Думаю короткий RING можно и в нем получить.
IgorV вне форума   Ответить с цитированием
Старый 08.10.2008, 11:11   #4
killer258
Senior Member
 
Аватар для killer258
 
Регистрация: 30.12.2007
Адрес: Череповец
Возраст: 49
Сообщений: 1,206
Вес репутации: 588/61
killer258 is a name known to allkiller258 is a name known to allkiller258 is a name known to allkiller258 is a name known to allkiller258 is a name known to allkiller258 is a name known to all
Отправить сообщение для killer258 с помощью ICQ
По умолчанию Ответ: Вопрос по SMS. Снова.

если светодиоды подсветки зажглись на сиеменсе, то пик должен в него слазить и проверить, не SMS ли это пришла. Всё остальное время пик может не лазить в телефон.
killer258 вне форума   Ответить с цитированием
Старый 08.10.2008, 16:49   #5
fol
Senior Member
 
Аватар для fol
 
Регистрация: 04.05.2007
Возраст: 44
Сообщений: 267
Вес репутации: 264/51
fol is a jewel in the roughfol is a jewel in the roughfol is a jewel in the rough
По умолчанию Ответ: Вопрос по SMS. Снова.

Спасибо за ответы.
Мда... Конечно хотелось чтоб кто нить сказал, мол такая и такая команды конфигурируют телефон на выдачу РИНГа для приложения. Буду сам искать. Накачал мануалов по AT командам для симена, разбираюсь. Меня именно смущает что для "SiMoCo" симен вроде бы выдает РИНГ, хотя при просмотре в терминале явно этого не видно. Когда запускаеш "SiMoCo" то "SiMoCo" вначале обменивается инфой с телефоном, то есть процедура подключения, после чего Симен как ручной для "SiMoCo". Процедура сия к счастью выводится на экран. Вот ее то и юзаю. Пытаюсь найти в этом листинге ключик.

RE: Simens уже ушел с GSM рынка.
RE: Зачем разбираться с этим раритетом?
RE: Есть sim300, он всё сообщает.

Да понятно что ушел. Но телефоны еще есть. Причем дешевые. Ну и кроме того не известно как другие телефоны в подобных ситуациях себя ведут. Что касается модулей... что то никак не соберусь с духом поковырять сей девайс. Но видимо придется. Оно по любому, все параметры эксплуатации у модулей, специально заточенных под данные лучше.

Спасибо.

зы
"А нет ли у вас халатика с перламутровыми пуговицами? Нет? Ну будем искать...." (Х.Ф. "Брильянтовая рука") -))
fol вне форума   Ответить с цитированием
Старый 08.10.2008, 18:20   #6
Sash
Senior Member
 
Регистрация: 14.04.2007
Адрес: Не очень далеко от Питера (Новосибирск)
Возраст: 42
Сообщений: 992
Вес репутации: 1741/73
Sash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant futureSash has a brilliant future
По умолчанию Ответ: Вопрос по SMS. Снова.

Есть такая команда AT+CNMI (см. описание на ее оргументы), она определяет выводить ли уведомление о СМС или выводить само сообщение и т.д.
Sash вне форума   Ответить с цитированием
Старый 09.10.2008, 00:44   #7
fol
Senior Member
 
Аватар для fol
 
Регистрация: 04.05.2007
Возраст: 44
Сообщений: 267
Вес репутации: 264/51
fol is a jewel in the roughfol is a jewel in the roughfol is a jewel in the rough
По умолчанию Ответ: Вопрос по SMS. Снова.

Да, спасибо большое "Sash". Пытаюсь разобраться в терминологии. В рускоязычном описании команд эта команда трактуется как:

9.9.Индикация нового сообщения:+CNMI
9.9.1.Описание
Данная команда производит отбор процедуры индикации о получении нового сообщения...

Ну и следует описание аргументов.
Разбираюсь. Чешу репу и ломаю моск -)

Спасибо.
fol вне форума   Ответить с цитированием
Старый 14.10.2008, 21:45   #8
fol
Senior Member
 
Аватар для fol
 
Регистрация: 04.05.2007
Возраст: 44
Сообщений: 267
Вес репутации: 264/51
fol is a jewel in the roughfol is a jewel in the roughfol is a jewel in the rough
По умолчанию Ответ: Вопрос по SMS. Снова.

Всем привет. Вот решил под шумок еще спросить.
Укажите путь.
Занимаюсь разбором SMS сообщений. Никак не могу найти алгоритм или способ преобразования двух символов ASCII в один результирующий HEX или BIN. Прилагаю эскиз своего вопроса. Тот случай когда глаза видят HEX из двух символов, а руки не ручат.
ЕСЛИ КТО ЗНАЕТ ТОЛКНИТЕ НА ПУТЬ, И ДАЛЬШЕ МОЖНО НЕ ЧИТАТЬ.
А кто в теме посмотрите, может я вообще не в том направлении двигаюсь.
Делаю так:
Код:
Поймали входящую SMS, вырезали хвост, само сообщение:
----------------------------------------------------------
Итак имеем сообщение  30182C06    ( Текст "0001" )
Это сообщение состоит из символов ASCII  '3' '0' '1' '8' '2' 'C' '0' '6'
Эти символы нужно преобразовать в HEX формат 
(или сразу в двичку) чтоб вывести в порт контроллера
Преобразуем в HEX:   30h 18h 2Ch 06h    ( ВОТ ЭТОГО И НЕ МОГУ !!! )
Распишем эти значения в виде двичной последовательности и
выстроим эту последовательность в такой ряд:
   06h      2Ch      18h     30h
00000110 00101100 00011000 00110000
Теперь из приведенной выше двоичной последовательности будем делать выборки
по 7 бит. Выборки делаем начиная справа. Причем сделав очередную выборку
добавим к ней 0 слева. 
Ниже показаны сделанные выборки с добавленными нулями
Выборка 1:   00110000   -  символ '0'  (ASCII)
Выборка 2:   00110000   -  символ '0'  (ASCII)
Выборка 3:   00110000   -  символ '0'  (ASCII)
Выборка 4:   00110001   -  символ '1'  (ASCII)
Остаток:     0000  (фиг знает что делать с остатком)
ВОТ МЫ И ПОЛУЧИЛИ УДОБОВАРИМЫЙ ВИД СООБЩЕНИЯ  SMS  С  ТЕКСТОМ   0001
;-------------------------------------------
       end
Этот способ конечно не мой, искал по инету, вот и насобирал.
Вот есть код для преобразования ASCII в HEX, но это для одного символа,
Код:
        ;***********************************************************
        ;************* Преобразования ASCII в HEX ******************
        ;***********************************************************
ASCI_HEX:
     movlw      b'01001111' ; Грузим маску 
            andwf      ASCI_IN,F   ; Сложение маски и результата  
            BTFSS      ASCI_IN,6 
            GOTO       FINAL_AH
            incf       ASCI_IN,F 
            BCF        ASCI_IN,3 
FINAL_AH:
            movlw      b'00001111' ; Маска 
            andwf      ASCI_IN,W   ; Удаление первой тетрады 
            movwf      HEX_OUT     ; Результат в регистр
 
            RETURN
а мне нужно "слепить" сразу два. Короче сам запутался. И повторюсь, что самое забавное что постоянно ловлю себя на глюке. Посмотрю на два символа ASCI, например '2С' , глаза сразу видят HEX и кажется что дело на пять минут. Сажусь за комп и тут понимаю что это иллюзия. Короче запутался.
Толкните в нужном направлении.
Миниатюры
киз преобразования.JPG  
fol вне форума   Ответить с цитированием
Старый 15.10.2008, 00:34   #9
Max77
Junior Member
 
Регистрация: 25.02.2007
Адрес: Черкассы
Сообщений: 25
Вес репутации: 104/48
Max77 will become famous soon enoughMax77 will become famous soon enough
По умолчанию Ответ: Вопрос по SMS. Снова.

На С у меня это выглядит так:
Код:
unsigned char ASCII2HEX(unsigned int j)
{
unsigned char x;
	x=Log[j]-0x30;//
	if (x>9) x-=7;
	x=(x<<4)+(Log[j+1]-0x30);
	if (Log[j+1]>0x39) x-=7;
	return x;
}
в Log находится принятая SMS
Max77 вне форума   Ответить с цитированием
Старый 16.10.2008, 01:03   #10
fol
Senior Member
 
Аватар для fol
 
Регистрация: 04.05.2007
Возраст: 44
Сообщений: 267
Вес репутации: 264/51
fol is a jewel in the roughfol is a jewel in the roughfol is a jewel in the rough
По умолчанию Ответ: Вопрос по SMS. Снова.

Спасибо.
Буду с "С" разбираться. Хотя уже туплю сильно. Седня картошку чистил так заметил за собой такой глюк, кидаю картошку в мусор, а очистки в кастрюлю... Не нравиться мне это.

Ладно, еще раз спасибо. Мне хотя бы понять по какому принципу все это делать эти преобразования с ASCII символами, то есть ПУТЬ.
Ладыть, надо поспать чель...

Если у тебя есть фонтан, ЗАТКНИ ЕГО
дай отдохнуть и фонтану.
(К. Прутков)
fol вне форума   Ответить с цитированием
Старый 16.10.2008, 12:44   #11
Sun525
Senior Member
 
Регистрация: 10.05.2008
Адрес: Murmansk
Возраст: 39
Сообщений: 414
Вес репутации: 398/50
Sun525 is just really niceSun525 is just really niceSun525 is just really niceSun525 is just really nice
По умолчанию Ответ: Вопрос по SMS. Снова.

'0'-'9' (0т 0х30 до 0х39) --- вычитать 0х30
'A'-'F' (0т 0х41 до 0х46) --- вычитать 0х37
'a'-'f' (0т 0х61 до 0х66) --- вычитать 0х57
Допустим есть на входе '2C', это 0х32,0х43
А дальше два варианта:
1. проверяем к какому диапазону относится число и соответсвенно -0х30, или -0х37, или -0х57
2.Вычитаем 0х30, проверяем результат если меньше 9 то все, если больше то вычитаем 7 и проверяем результат если меньше 0xF то все, если больше то вычитаем 0x20.
Делаем вариант 1 или 2 для первого и второго байта, получаем на выходе два байта 0х02 и 0х0С
потом с помощью SWAPF из 02 делаем 0х20 и прибавляем 0х0С получаем 0х2С

Последний раз редактировалось Sun525; 16.10.2008 в 12:50.
Sun525 вне форума   Ответить с цитированием
Старый 16.10.2008, 18:04   #12
Eugeny
Senior Member
 
Регистрация: 08.04.2007
Сообщений: 323
Вес репутации: 100/51
Eugeny will become famous soon enoughEugeny will become famous soon enough
По умолчанию Ответ: Вопрос по SMS. Снова.

извините что со своим вопросом в чужой топик лезу, но всётаки:
номер смс центра, например для МТС один и тот же для Московской области??? или они разные???
Eugeny вне форума   Ответить с цитированием
Старый 16.10.2008, 18:14   #13
Sun525
Senior Member
 
Регистрация: 10.05.2008
Адрес: Murmansk
Возраст: 39
Сообщений: 414
Вес репутации: 398/50
Sun525 is just really niceSun525 is just really niceSun525 is just really niceSun525 is just really nice
По умолчанию Ответ: Вопрос по SMS. Снова.

Наверно стоит посмотреть на сайте мтс или позвонить в службу поддержки. Микрочип врядли имеет отношение к мтс.
Sun525 вне форума   Ответить с цитированием
Старый 17.10.2008, 00:49   #14
fol
Senior Member
 
Аватар для fol
 
Регистрация: 04.05.2007
Возраст: 44
Сообщений: 267
Вес репутации: 264/51
fol is a jewel in the roughfol is a jewel in the roughfol is a jewel in the rough
По умолчанию Ответ: Вопрос по SMS. Снова.

Спасибо за ответы.
Я тут выстругал "буратину", не очень красиво но работает. Можно пооптимизировать но это после, если желание будет.
Принцип прост, азы школьной математики.
В одном регистре лежит символ 1, а в другом символ 8. 1 это к-во целых частей = 16. А 8 это просто 8 (десятичная). Блин криво излагаю. Короче в левом регистре старшая часть HEX чиста, в левом младшая. Все тупо просто. Процедура не очень красивая. Так что не обессудьте если что. Может кому и пригодится.


Код:
    ;*******************************************************************
    ;*** ПРОЦЕДУРА ПРЕОБРАЗОВАНИЯ ДВУХ "ASCII" СИМВОЛОВ В ОДИН "HEX" ***
    ;*******************************************************************
    ;--- УСЛОВИЕ: в каждом нечетном регистре ОЗУ лежит старшая часть ---
    ;--- HEX числа, а в каждом четном младшая часть HEX числа ----------


PEREUPAKOVKA:

            movlw      .106        ; Загрузка начального адреса в ОЗУ
            movwf      Count_OZU   ; из которого начинаем брать символы



READ_OZU_ASCII:

           ;--- ПРОВЕРИМ СКОЛЬКО ПЕРЕЛОПАТИЛИ РЕГИСТРОВ ---------------
           ;--- Как только Count_OZU станет =или> 150 то GOTO      ----
           ;--- Значит нужные регистры  ОЗУ  обработаны         -------
            movlw      .150
            SUBWF      Count_OZU,0 
            BTFSS      Status,0
            GOTO       $+2               ;  ПОКА НОРМА. ИДЕМ ПО  GOTO  $+
           ;--- Обработано все ОЗУ ---
            GOTO       EXIT_PEREUPAKOVKA ;  УХОДИМ ИЗ ПЕРЕУПАКОВКИ


      ;---------- ЧТЕНИЕ ИЗ ОЗУ СИМВОЛОВ В ФОРМАТЕ  ASCII -----------

        ;------- Выборка содержимого регистра ОЗУ ----------------
            movf       Count_OZU,w  ; Запишем в FSR адрес 
            movwf      FSR          ; находящийся в счетчике
            movf       Indf,w       ; Через  Indf копируем содержимое
            movwf      Buf_OZU      ; регистра ОЗУ в буфер  Buf_OZU
        ;---------------------------------------------------------


        ;--- Символ в ОЗУ монотонно сравниваем с образцами ----------

            BCF        Status,2    ; Предварит. очистить Z

           ;----------------------
            movlw      '0'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_0    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      '1'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_1    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      '2'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_2    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      '3'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_3    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      '4'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_4    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      '5'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_5    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      '6'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_6    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      '7'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_7    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      '8'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_8    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      '9'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_9    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      'A'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_A    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      'B'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_B    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      'C'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_C    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      'D'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_D    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      'E'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_E    ; Если это символ ' ' то  GOTO
           ;----------------------
            movlw      'F'         ; 
            XORWF      Buf_OZU,0   ; Хорим. Результат в W
            BTFSC      Status,2    ; 
            GOTO       SUMBOL_F    ; Если это символ ' ' то  GOTO
           ;----------------------


           ;--- символ не определеен ---

            GOTO       ERROR_1



SUMBOL_0:
            movlw      .0          ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_1:
            movlw      .1          ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_2:
            movlw      .2          ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_3:
            movlw      .3          ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_4:
            movlw      .4          ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_5:
            movlw      .5          ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_6:
            movlw      .6          ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_7:
            movlw      .7          ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_8:
            movlw      .8          ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_9:
            movlw      .9          ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_A:
            movlw      .10         ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_B:
            movlw      .11         ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_C:
            movlw      .12         ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_D:
            movlw      .13         ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_E:
            movlw      .14         ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ
SUMBOL_F:
            movlw      .15         ; Загрузка цифры
            movwf      Buf_OZU     ; соответсвующей ВИДИМОМУ символу
            GOTO       CONTROL_CHETNOST ; УХОДИМ НА КОНТРОЛЬ ЧЕТНОСТИ




CONTROL_CHETNOST:

        ;=== ПРОВЕРЯЕМ КАКОЙ РЕГИСТР ОБРАБАТЫВАЛИ ЧЕТНЫЙ ИЛИ НЕТ =====
        ;--- Проверяем, если в счетчике не четное число тогда --------
        ;--- 7 бит счетчика будет = 1 это значит что полученный и ----
        ;--- преобразованный символ является МЛАДШЕЙ частью HEX числа -

            BTFSS      Count_OZU,0 ; 
            GOTO       OUT_HEX_H   ; Count_OZU,7 = 1 то GOTO (не чет)
            GOTO       OUT_HEX_L   ; Count_OZU,7 = 0 то GOTO (четное)




OUT_HEX_L:
        ;----- ВЫЯСНИЛИ ЧТО ЭТО ПРИШЛА МЛАДШАЯ ЧАСТЬ ЧИСЛА  HEX ------
        ;----- ПОЭТОМУ БЕЗ КАКИХ ЛИБО ДЕЙСТВИЙ КОПИРУЕМ В ОЗУ   ------
        

            GOTO       WRITE_OZU_HEX ; ЗАПИСАТЬ ПОЛУЧЕННЫЙ HEX ОБРАТНО В ОЗУ



OUT_HEX_H:
        ;----- ВЫЯСНИЛИ ЧТО ЭТО ПРИШЛА СТАРШАЯ ЧАСТЬ ЧИСЛА  HEX ------
        ;----- ПОЭТОМУ УМНОЖИМ ЭТО ЧИСЛО НА  16  ---------------------

            RLF        Buf_OZU,f   ; Сдвиг влево. Результат в регистре
            RLF        Buf_OZU,f   ; Сдвиг влево. Результат в регистре
            RLF        Buf_OZU,f   ; Сдвиг влево. Результат в регистре
            RLF        Buf_OZU,f   ; Сдвиг влево. Результат в регистре

            GOTO       WRITE_OZU_HEX ; ЗАПИСАТЬ ПОЛУЧЕННЫЙ HEX ОБРАТНО В ОЗУ




WRITE_OZU_HEX:

      ;---------- ЗАПИСЬ В ОЗУ СИМВОЛОВ В ФОРМАТЕ  HEX --------------
      ;--- Значение в формате HEX пишем в тот же регистр ОЗУ из -----
      ;--- которого извлекли ASCII. То есть ASCII меняем на HEX -----

        ;--------- Запись в ОЗУ содержимого Buf_OZU --------------
            movf       Count_OZU,w  ; Запишем в FSR адрес 
            movwf      FSR          ; находящийся в счетчике
            movf       Buf_OZU,w    ; Данные из буфера Buf_OZU
            movwf      Indf         ; Копируем в регистр ОЗУ через INDF 
        ;---------------------------------------------------------


            incf       Count_OZU,f  ; УВЕЛИЧИМ СЧЕТЧИК ОЗУ


        ;--- Здесь по идее еще надо проверять на максимальный адрес ---
        ;--- который выбираем из ОЗУ, чтоб не брать верхние реги ------


            GOTO       READ_OZU_ASCII ; ПРОДОЛЖАЕМ ПРЕОБРАЗОВАНИЯ




      ;****** ЗАКОНЧИЛИ ПЕРЕУПАКОВКУ. ТЕПЕРЬ В РЕГИСТРАХ ОЗУ **********
      ;****** ЛЕЖАТ СИМВОЛЫ В ФОРМАТЕ  HEX. ПРИЧЕМ В РЕГИСТРАХ ********
      ;****** С НЕЧЕТНЫМИ НОМЕРАМИ ЛЕЖАТ СТАРШИЕ ЧАСТИ ЧИСЕЛ HEX ******
      ;****** А В РЕГИСТРАХ С ЧЕТНЫМИ НОМЕРАМИ МЛАДШИЕ ЧАСТИ HEX ******


EXIT_PEREUPAKOVKA:

      ;------ Теперь чтобы полностью завершить формирование HEX -------
      ;------ чисел нужно сложить четные и не четные регистры   -------
      ;------ То есть попарное сложение соседних регистров ------------
А вообще не понятно зачем они так придумали кучеряво кодировать.
Это типа пушкой из за угла.

Ну да ладно, зато я наконец закончил эту тему (почти). наконец УВИДЕЛ полученное сообщение!!! Ура, я ВИЖУ его.

Код:
                                 ".... поднимите мне веки"
(из одноименного произведения "ВИЙ", одного из моих любимых авторов)
fol вне форума   Ответить с цитированием
Старый 19.10.2008, 12:33   #15
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,893
Вес репутации: 5611/171
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию спасибо за предоставленный код

Цитата:
Сообщение от fol Посмотреть сообщение
Спасибо за ответы.
Я тут выстругал "буратину", не очень красиво но работает. Можно пооптимизировать но это после, если желание будет.
Принцип прост, азы школьной математики.
В одном регистре лежит символ 1, а в другом символ 8. 1 это к-во целых частей = 16. А 8 это просто 8 (десятичная). Блин криво излагаю. Короче в левом регистре старшая часть HEX чиста, в левом младшая. Все тупо просто. Процедура не очень красивая. Так что не обессудьте если что. Может кому и пригодится.

"не очень красивое" - это, конечно, мягко сказано, но для первого работоспособного варианта сойдёт...
просто идею с использованием xor можно существенно развить
рекомендую статью
http://onembedding.bialix.com/articles/xor/
Greg вне форума   Ответить с цитированием
Старый 19.10.2008, 14:46   #16
masterzx
Senior Member
 
Аватар для masterzx
 
Регистрация: 21.09.2007
Адрес: Барнаул
Возраст: 34
Сообщений: 1,507
Вес репутации: 826/68
masterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to beholdmasterzx is a splendid one to behold
Отправить сообщение для masterzx с помощью ICQ
По умолчанию Ответ: спасибо за предоставленный код

Цитата:
Сообщение от Greg Посмотреть сообщение
"не очень красивое" - это, конечно, мягко сказано, но для первого работоспособного варианта сойдёт...
просто идею с использованием xor можно существенно развить
рекомендую статью
http://onembedding.bialix.com/articles/xor/
спасибо за сылку
__________________
Если проблему можно решить за деньги, то это не проблема, это расходы. Еврейская мудрость.
masterzx вне форума   Ответить с цитированием
Старый 19.10.2008, 15:07   #17
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 44
Сообщений: 2,610
Вес репутации: 2570/98
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Ответ: Вопрос по SMS. Снова.

Цитата:
Сообщение от fol Посмотреть сообщение
Я тут выстругал "буратину", не очень красиво но работает.
Это скорее Франкинштейн получился. Не просто пушкой по воробьям, а царь пушкой.
fantom вне форума   Ответить с цитированием
Старый 19.10.2008, 15:59   #18
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,893
Вес репутации: 5611/171
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию можно ещё добавить

Цитата:
Сообщение от masterzx Посмотреть сообщение
спасибо за сылку
что подобные вычисления с xor компилятор хайтек выполняет автоматически.
например запись
Код:
  switch (seven) {
	
     case 0x7e:
       return 	(0);
     case 0x30:
       return 	(1);
     case 0x6d:
       return 	(2);
     case 0x79:
       return 	(3);
     case 0x33:
       return 	(4);
     case 0x5b:
       return 	(5);
     case 0x5f:
       return 	(6);
     case 0x70:
       return 	(7);
     case 0x7f:
      return 	(8);
     case 0x7b:
      return 	(9);
     default:
      return (' ');
 }	// case
породит код

Код:
  813                           ;met877.c: 160: switch (seven) {
   814                           ;met877.c: 162: case 0x7e:
   815                           ;met877.c: 163: return (0);
   816                           ;met877.c: 165: case 0x30:
   817                           ;met877.c: 166: return (1);
   818                           ;met877.c: 168: case 0x6d:
   819                           ;met877.c: 169: return (2);
   820                           ;met877.c: 171: case 0x79:
   821                           ;met877.c: 172: return (3);
   822                           ;met877.c: 174: case 0x33:
   823                           ;met877.c: 175: return (4);
   824                           ;met877.c: 177: case 0x5b:
   825                           ;met877.c: 178: return (5);
   826                           ;met877.c: 180: case 0x5f:
   827                           ;met877.c: 181: return (6);
   828                           ;met877.c: 183: case 0x70:
   829                           ;met877.c: 184: return (7);
   830                           ;met877.c: 186: case 0x7f:
   831                           ;met877.c: 187: return (8);
   832                           ;met877.c: 189: case 0x7b:
   833                           ;met877.c: 190: return (9);
   834                           ;met877.c: 193: default:
   835                           ;met877.c: 194: return (' ');
   836  0240  3A30               	xorlw	48
   837  0241  1903               	btfsc	3,2
   838  0242  3401               	retlw	1
   839  0243  3A03               	xorlw	3
   840  0244  1903               	btfsc	3,2
   841  0245  3404               	retlw	4
   842  0246  3A68               	xorlw	104
   843  0247  1903               	btfsc	3,2
   844  0248  3405               	retlw	5
   845  0249  3A04               	xorlw	4
   846  024A  1903               	btfsc	3,2
   847  024B  3406               	retlw	6
вот это действительно красиво (пусть красота и "машинная", но за ней стоит человек)

кстати, если входные значения для case идут подряд, то можно "подсказать" компилятору использовать метод табличного чтения
Greg вне форума   Ответить с цитированием
Старый 20.10.2008, 02:10   #19
fol
Senior Member
 
Аватар для fol
 
Регистрация: 04.05.2007
Возраст: 44
Сообщений: 267
Вес репутации: 264/51
fol is a jewel in the roughfol is a jewel in the roughfol is a jewel in the rough
По умолчанию Ответ: Вопрос по SMS. Снова.

Спасиб за ссылки, любопытные.
А асмовый код кот выложил, это всего лишь изложение способа преобразования. Я конечно мог зализать его до состояния идеала, но на фиг это надо. Так понятней тем, у кого погасла свеча, тем, кто ищет путь. И соотношение пушек, воробьев, галактик и дивана не к месту. В общем, решил задачу, пью пиво, чего и вам, господа, желаю.

Привет-буфет -))
fol вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
50-ти канальный GPS-модуль по технологии u-box 5 (LEA-5H) кто пробовал? (+ вопрос по GPS-антенне) Picozoid Общетехнические вопросы 13 26.05.2008 00:56
Вопрос по USB и флешкам Zloj_ya Продукция MICROCHIP 4 14.03.2008 18:49
И снова вопрос по MPLAB 7.42 Leonid_O Продукция MICROCHIP 13 10.09.2007 16:49
Вопрос по PIC контроллерам. vlad_er Продукция MICROCHIP 12 18.05.2007 10:15
Вопрос новичка по Си ramonchik Продукция MICROCHIP 3 05.03.2007 16:28


Часовой пояс GMT +3, время: 04:08.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot