Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таблицы и смещения в PIC, Как этим пользоваться 
:(
    Опции темы
rcdimon
Дата 5.1.2005, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



Что такое эти таблицы? Вот нашли такой код.

Код

org 0x10
segment ; Таблица преобразования DEC -> семисегментный код.
     CLRF   PCLATH
ADDWF  PCL, F
dt 07E, 00C, 0B6, 09E, 0CC, 0DA, 0FA, 00E, 0FE, 0DE
;-----------------------------------------------------------------------
tab_dec  ; Таблица преобразования HEX -> DEC
CLRF   PCLATH
ADDWF  PCL, F
base dt 0 ; База для вычисления смещения в таблице.
dt c_00-base, c_01-base, c_02-base, c_03-base
dt c_04-base, c_05-base, c_06-base, c_07-base
dt c_08-base, c_09-base, c_10-base, c_11-base
dt c_12-base, c_13-base, c_14-base, c_15-base, c_16-base
 ; Таблица десятичных значений двоичных разрядов
c_16 dt 6, 3, 5, 5, 6 ; 2^15 = 63556.
c_15 dt 3, 2, 7, 6, 8 ; 2^15 = 32768.
c_14 dt 1, 6, 3, 8, 4 ; 2^14 = 16384.
c_13 dt 0, 8, 1, 9, 2 ; 2^13 = 8192.
c_12 dt 0, 4, 0, 9, 6 ; 2^12 = 4096.
c_11 dt 0, 2, 0, 4, 8 ; 2^11 = 2048.
c_10 dt 0, 1, 0, 2, 4 ; 2^10 = 1024.
c_09 dt 0, 0, 5, 1, 2 ; 2^9 = 512.
c_08 dt 0, 0, 2, 5, 6 ; 2^8 = 256.
c_07 dt 0, 0, 1, 2, 8 ; 2^7 = 128.
c_06 dt 0, 0, 0, 6, 4 ; 2^6 = 64.
c_05 dt 0, 0, 0, 3, 2 ; 2^5 = 32.
c_04 dt 0, 0, 0, 1, 6 ; 2^4 = 16.
c_03 dt 0, 0, 0, 0, 8 ; 2^3 = 8.
c_02 dt 0, 0, 0, 0, 4 ; 2^2 = 4.
c_01 dt 0, 0, 0, 0, 2 ; 2^1 = 2.
c_00 dt 0, 0, 0, 0, 1 ; 2^0 = 1.
; **********************************************************





Почему в начале у нее жестко задается адрес ORG ****

И если там есть строка tab_dec, могу предположить, что это подпрограмма, но где же тогда из нее выход?

А что это такое c_02-base ? Почему там знак -? Это минус? Или что это?
И что такое вот эти метки c_03, стоящие слева от таблицы?

PM MAIL ICQ   Вверх
rcdimon
Дата 8.1.2005, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



ЧТО? никто не знает? И я вот не знаю.
PM MAIL ICQ   Вверх
Sardar
Дата 8.1.2005, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 2
Всего: 317



Таблица это просто массив данных(читай строка байт) под каким либо адресом. Например base это просто метка, любые операции с меткой вычисляют адрес.
Строка: dt c_00-base, c_01-base, c_02-base, c_03-base создаёт 3 элемента, первый наохидтся по адресу base+1, второй base+2 и т.д. Выражение c_00-base есть метка - метка, каждая мекта эвалюируется в адрес под меткой. Таким образом мы создаём этой строкой 3 асреса относительно метки base.

Что конкретно не ясно?


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
rcdimon
Дата 9.1.2005, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



Спасибо, за ответ.
Нам больше понятно вот это.

Код

Tbl
           addwf      PCL,1      ; W + PC -> PC
           retlw      b'00111111'; ..FEDCBA = '0'
           retlw      b'00000110'; .....CB. = '1'
           retlw      b'01011011'; .G.ED.BA = '2'
           retlw      b'01001111'; .G..DCBA = '3'
           retlw      b'01100110'; .GF..CB. = '4'
           retlw      b'01101101'; .GF.DC.A = '5'
           retlw      b'01111101'; .GFEDC.A = '6'
           retlw      b'00000111'; .....CBA = '7'
           retlw      b'01111111'; .GFEDCBA = '8'
           retlw      b'01101111'; .GF.DCBA = '9'
           retlw      b'01110111'; .GFE.CBA = 'A'
           retlw      b'01111100'; .GFEDCBA = 'B'
           retlw      b'00111001'; ..FED..A = 'C'
           retlw      b'01011110'; .G.EDCB. = 'd'
           retlw      b'01111001'; .GFED..A = 'E'
           retlw      b'01110001'; .GFE...A = 'F'
           retlw      b'01110110'; .GFE.CD. = 'H'


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.