MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки
 Новости   Конференция   Контакты 
 

Количество команд в коде для PIC16F84A

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 Количество команд в коде для PIC16F84A
Автор: Роман ()
Дата:   02/03/2004 23:47

Народ, помогите, уже запарился причину искать !!!!!
Проблема в следующем:
Написал программу строк в 200-250, все работает. Добавляю в программу ещё строк 30, программа
работать перестаёт. Пишет ,что перепоснен сокет. Прогоняю в MPLAB пошагово, замечаю что когда
идет выборка из таблицы (таблица сделана с помощью RETLW) почему то происходит не возвращение из
таблицы, а переход по PCL на 26 строку(этот адрес имеет PCL когда вызывается подпраграмма
таблицы и по команде addwf PCL, F и происходит переход к символу), а это где то в начале
программы, хотя команда должна возврашать символ в W для вывода на экран.
Кто знает почему пожалуйста напишите, буду весьма благодарен.




 
 Re: Количество команд в коде для PIC16F84A
Автор: Bill ()
Дата:   02/03/2004 23:58

Надо исходный код посмотреть. Вполне возможно, таблица на границу страницы попадает.


 
 Re: Количество команд в коде для PIC16F84A
Автор: KYV ()
Дата:   03/03/2004 00:00

Это у вас страница новая началась, нужно почитать описание MPASM, а именно о PCLATH и его
модификации. Вот примерно такая таблица, а переход к метке HELIT делайте как LCALL HELIT.

ORG 0x1800
HELIT
ADDWF PCL,1
RETLW '0'
RETLW '1'
RETLW '2'
RETLW '3'
RETLW '4'
RETLW '5'
RETLW '6'
RETLW '7'
RETLW '8'
RETLW '9'
RETLW 'A'
RETLW 'B'
RETLW 'C'
RETLW 'D'
RETLW 'E'
RETLW 'F'

Я знаю, что ничего не знаю.
Сократ.


 
 Re: Количество команд в коде для PIC16F84A
Автор: Alex B. ()
Дата:   03/03/2004 02:16

И почитайте ветку:
http://www.microchip.ru/phorum/read.php?f=2&i=42568&t=42568




 
 Re: Количество команд в коде для PIC16F84A
Автор: Роман ()
Дата:   03/03/2004 23:51

Действительно, команды попали на следущую страница. Я относительно PCLATH понял, но в PIC16F84
его нет, страницы устанавливаются в регистре STATUS. Кто знает как это делается для процов с 12
битными командами, дайте пожалуйста пример кода. Заранее благодарен.


 
 Re: Количество команд в коде для PIC16F84A
Автор: Gipsy ()
Дата:   04/03/2004 00:40

PCLATH это PCL, и количество бит в адресе имеет ограниченное, смотри описание адресации в
контроллере


 
 Re: Количество команд в коде для PIC16F84A
Автор: Nиколай ()
Дата:   04/03/2004 12:28

Роман писал(а):

> Действительно, команды попали на следущую страница. Я
> относительно PCLATH понял, но в PIC16F84
> его нет,
Издеваешся ?
Посмотри в даташит.
Карта памяти - адрес 0Ah,8Ah,10Ah,18Ah. Что там написано?

> страницы устанавливаются в регистре STATUS.
В регистре STATUS выбирается номер банка рабочих регистров и памяти.
(Посмотри в даташит "Косвенная адресация,регистры INDF,FSR")
> Кто знает как это делается для процов с 12 битными командами,
> дайте пожалуйста пример кода.
(Посмотри в даташит "Регистры PCLATH, и PCL")

Более подробно можеш взуть на этом сайте и почитать
Справочник по среднему семейству микроконтроллеров PICmicro.
Раздел 6. Организация памяти.
http://www.microchip.ru/files/d-sheets-rus/pic16_6.pdf


 
 Re: Количество команд в коде для PIC16F84A
Автор: Роман ()
Дата:   04/03/2004 15:03

Sorry? не туда смотрел :), впреть буду внимательней.
МАленькое уточнение, одна страница - 0x000 - 0x0FF ?


 
 Re: Количество команд в коде для PIC16F84A
Автор: Nиколай ()
Дата:   04/03/2004 19:08

Роман писал(а):

> Sorry? не туда смотрел :), впреть буду внимательней.
> МАленькое уточнение, одна страница - 0x000 - 0x0FF ?
Если уже скачал "pic16_6.pdf", то на стр.4 сказано, что страница = 2К (0x7FFh),
тоесть 11 разрядов. У 84 PICa всего одна страница, в пределах 2К прооблем с работой
GOTO и CALL не будет (см. страницы 7,9).

Но применяя ADDWF PCL,F работаем только с 8-ю разрядами (00-FF = блоки по 256) .
9-13 разряды в вычислениях не участвуют, а берется предварительно подготовленное
значение из PCLATH и автоматом заносится в PCH (см. стр.8).
Если таблица пересекает FF при неизменном PCLATH - получаем проблемы.
Как вариант, вручную указывать начало размещение таблицы (например ORG 0x100) с тем
расчетом, чтобы максимальное количество елементов не пересекало границы блока.

Примеры выполнения табличного чтения смотри AN556 от микрочипа.

Или поиском по конференции все даты и в теле сообщения ищи PCLATH,не раз обсуждали.


 
 Re: Количество команд в коде для PIC16F84A
Автор: Роман ()
Дата:   04/03/2004 20:40

C PCLATH я разобрался, но маленький нюанс, у меня в проге таблиза на границу
страницы не попадает (она полностью в 1 странице), вызов тоже идет с первой странице
и если в ручную не установить PCLATH то при обращение к таблице retlw перекидывает
его в начало проги (на нулевую страницу) => глюк. Если же я перед переходов
выставляю в PCLATH значение страницы где находится таблица то всё ОК (потом
значение PCLATH выставляю перед обращением в другую таблицу :) ). Как я понимаю
если обращение к таблице из одной страницы, сама таблица в другой , а возврат вообще
в третий (это общий случай) то ОБЯЗАТЕЛЬНО необходимо выставить PCLATH ? я правильно
понял ?
Это просто мне надо для справки, а то с дипломом пригрузили а я ещё не во всем
разобрался :)

Кстати, если у кого-то есть опыт изготовления термометров на PIC скинте пожалуйста,
если не жалко на roman2712@mail.ru. Заранее благодарен.


 
 Re: Количество команд в коде для PIC16F84A
Автор: Nиколай ()
Дата:   05/03/2004 11:35

Роман писал(а):

> C PCLATH я разобрался, но маленький нюанс, у меня в проге таблиза на границу
> страницы не попадает (она полностью в 1 странице), вызов тоже
> идет с первой странице

Имеется ввиду, что таблица в пределах одного блока ? и через FF не переходит?

>и если в ручную не установить PCLATH то при обращение к таблице retlw перекидывает
> его в начало проги (на нулевую страницу) => глюк.

Перекидывает в данном случае не RETLW ,а ADDWF PCL,F с учетом PCLATH для PCH.
Проверь симулятором пошагово работу с таблицей и увидиш, какая строка программы
будет после выполнения ADDWF. Если выпадаеш за END, то PCL по кругу дойдет до 0х000.

> Если же я перед переходов
> выставляю в PCLATH значение страницы где находится таблица то всё ОК
> (потом значение PCLATH выставляю перед обращением в другую таблицу :)).
> Как я понимаю если обращение к таблице из одной страницы,
> сама таблица в другой , а возврат вообще в третий (это общий случай)
> то ОБЯЗАТЕЛЬНО необходимо выставить PCLATH ?
> я правильно понял ?

RETLW - возврат из подпрограммы с загруженой константой в W.
Возвращаемся из подпрограммы на следующюю строку после CALL, а не в какоето другое
место. Значение PCLATH на адрес возврата не влияет.