Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 09.01.2008, 15:09  
J-t
Частый гость
 
Регистрация: 18.10.2007
Сообщений: 22
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
J-t на пути к лучшему
По умолчанию

Да, эта идея хороша (писал о ней в начале темы ) Только вот по быстродействию храмает. Перебирать прийдется все значения из таблиц, да еще и флаг проверять, потом всеравно переход идет, а это еще время, на мой взгляд последний вариант подходящий. Всем спасибо за помощь.
Реклама:
J-t вне форума  
Непрочитано 09.01.2008, 22:53  
mike2026
Прохожий
 
Регистрация: 10.10.2006
Сообщений: 1
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
mike2026 на пути к лучшему
По умолчанию

CALL TABLE ;

;теперь выполнена нужная подпрграмма

TABLE ADDWF PC ;W=смещение
goto M1 ;переход на М1
goto M2 ;переход на М2

Решение для PIC стандартное, но необходимо обязательно отследить два момента:
1) расположение таблицы в памяти программы должно быть таким, чтобы при выполнении ADDWF PC не произошел переход через 0.
2) При вычисляемых переходах используется регистр PCLATH. Не разобравшись с этим механизмом кроме глюков ничего не получишь.
mike2026 вне форума  
Непрочитано 09.01.2008, 23:56  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 113
Сказал спасибо: 14
Сказали Спасибо 32 раз(а) в 21 сообщении(ях)
varostov на пути к лучшему
По умолчанию

Есть такой вариант:
Код:
            ; Подготовка параметров вызова таблицы
TABLE_OP    MOVLW    high TBL_OP
            MOVWF    PCLATH
            MOVLW    low TBL_OP
            ADDWF    N_OP,W	
            SKPNC
            INCF     PCLATH,F
            MOVWF    PCL            ; прямой переход на строку таблицы N:
            ; Таблица вызовов операций
TBL_OP      CALL    PROC_ENDMES         ; 0
            GOTO    END_OP
            CALL    PROC_RST            ; 1
            GOTO    END_OP
            CALL    PROC_CLS            ; 2
            GOTO    END_OP
            CALL    PROC_CR             ; 3

Обратите внимание на фрагмент:
            ADDWF   N_OP,W	
            SKPNC
            INCF    PCLATH,F
Здесь реализована проверка, не переходит ли сгенерированное смещение через границу 0xFF и, соответственно, коррекция PCLATH.
P.S. То, что N_OP должен быть умножен на 2 (сдвинут влево), я думаю понятно. Недостаток - можно обработать напрямую только 128 кодов.Я пороюсь в старых asm программах на предмет более ёмкой процедуры, но и в лоб можно разбить множество кодов на две группы
C Новым годом !
varostov вне форума  
Непрочитано 11.01.2008, 18:02  
J-t
Частый гость
 
Регистрация: 18.10.2007
Сообщений: 22
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
J-t на пути к лучшему
По умолчанию

Интересный код. А есть к нему более подробные описания, с удовольствием возьму на заметку.
J-t вне форума  
Непрочитано 11.01.2008, 22:57  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 113
Сказал спасибо: 14
Сказали Спасибо 32 раз(а) в 21 сообщении(ях)
varostov на пути к лучшему
По умолчанию

Сообщение от J-t
Интересный код. А есть к нему более подробные описания, с удовольствием возьму на заметку.
Спрашивайте конкректно, пожалуйста.
varostov вне форума  
Непрочитано 13.01.2008, 16:14  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 113
Сказал спасибо: 14
Сказали Спасибо 32 раз(а) в 21 сообщении(ях)
varostov на пути к лучшему
По умолчанию

Вот ещё примерчик (немного громоздко держать фактически три таблицы: ст.байта адреса символа, мл.байта адреса символа и непосредственно знакогенератор, но ничего, в 16F877 помещалось ). Первые две таблицы можно без всяких премудростей расположить на границе сегментов, напр.
ORG 100h
первая таблица
ORG 200h
вторая таблица
(если, конечно, достаточно 255 символов в знакогенераторе ).
Код:
;================================================
; Считывание одной строки матрицы символа ASCII
;   IN:    N_STR   - номер строки (0-8)
;          CHAR   - внутр. код символа
;   OUT:   W    - байт матрицы
;   TEMP:   TEMP1, TEMP2
;   NOTE:   После возврата (RETLW) из "улёта"
;        необходимо восстановить PCLATH‹4:3›
;        в соответствии с тек. страницей,
;        если таблица пересекает границу
;================================================
READ_STR
      MOVFW   CHAR         ; код символа
      CALL   TBL_CHAR_MSB
      MOVWF   TEMP1         ; ст. байт адреса матрицы
      MOVFW   CHAR
      CALL   TBL_CHAR_LSB      ; мл. байт адреса матрицы
      ADDWF   N_STR,W         ; + номер строки
      MOVWF   TEMP2         ; мл. байт адреса строки
      SKPNC            ; перешли на сл. страницу ?
      INCF   TEMP1,F         ;   да, коррекция ст. байта
RD_STR      MOVFW   TEMP1
      MOVWF   PCLATH
      MOVFW   TEMP2
      MOVWF   PCL         ; и улетели ... , но обещали вернуться
;
varostov вне форума  
Непрочитано 13.01.2008, 16:52  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 113
Сказал спасибо: 14
Сказали Спасибо 32 раз(а) в 21 сообщении(ях)
varostov на пути к лучшему
По умолчанию

Sorry, забыл вставить кусочки самих таблиц:
Код:
; ‹первая страница 00h-FFh›
;------------------------------------------------
; Таблица сносок на матрицы символов (lsb)
;------------------------------------------------
TBL_CHAR_LSB
      CLRF   PCLATH
      ADDWF   PCL,F
   dt   low M20, low M21, low M22, low M23, low M24, low M25, low M26, low M27
..................................................  .

; ‹вторая страница - см. org и incf pclath›
;------------------------------------------------
; Таблица сносок на матрицы символов (msb)
;------------------------------------------------
   org   100h
TBL_CHAR_MSB
      CLRF   PCLATH
      INCF   PCLATH,F
      ADDWF   PCL,F
   dt   high M20, high M21, high M22, high M23, high M24, high M25, high M26, high M27
..............................................

; ‹где-то в далёкой-далёкой галактике...› 
M20 ;- пробел
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'
	RETLW	B'00000000'
M21 ;- !
	RETLW	B'00001000'
	RETLW	B'00011100'
	RETLW	B'00011100'
	RETLW	B'00011100'
	RETLW	B'00011100'
	RETLW	B'00001000'
	RETLW	B'00001000'
	RETLW	B'00000000'
	RETLW	B'00001000'
.........................................
varostov вне форума  
Непрочитано 28.01.2008, 05:09  
T-34
Прохожий
 
Регистрация: 24.07.2005
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
T-34 на пути к лучшему
По умолчанию

2varostov
хм.. зачем лишние навороты с таблицами адресов
код символа умножаем на 9 (из вашего примера) и адрес у нас в кармане
T-34 вне форума  
Непрочитано 28.01.2008, 15:57  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 113
Сказал спасибо: 14
Сказали Спасибо 32 раз(а) в 21 сообщении(ях)
varostov на пути к лучшему
По умолчанию

Сообщение от T-34
2varostov
хм.. зачем лишние навороты с таблицами адресов
код символа умножаем на 9 (из вашего примера) и адрес у нас в кармане
1. Данному куску кода уже лет 11 , и тогда у меня не было ни плавающей, ни тонущей точки .
2. Совет дан для начинающих, а в этом случае лучше пусть код будет объёмным, но железно работающим.
varostov вне форума  
Непрочитано 29.01.2008, 22:39  
T-34
Прохожий
 
Регистрация: 24.07.2005
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
T-34 на пути к лучшему
По умолчанию

плавающая точка!? 8O
кстати, реорганизовав таблицу знакогенератора (1-ая строка всех символов, 2-ая и т.д.) можно соптимизировать расчет адреса.
T-34 вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Защита от чтения delay AVR 5 15.11.2012 13:01
RSTDSBL в Attiny26 – защита от чтения? dima777 Микроконтроллеры, АЦП, память и т.д 3 10.03.2008 21:08
AT89S8253 проблема чтения из внутренней EEPROM thunder367 Микроконтроллеры, АЦП, память и т.д 5 09.08.2007 13:08
Устройства для записи/чтения на TLCS-47 (Toshiba)??? seruj Микроконтроллеры, АЦП, память и т.д 0 30.11.2006 11:18
USB Флэш память: помогите подобрать контроллер чтения/записи Vaicartana Микроконтроллеры, АЦП, память и т.д 0 30.01.2005 06:30


Часовой пояс GMT +4, время: 09:56.


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