Например TDA7294

Форум РадиоКот • Просмотр темы - Неадекватное поведение 16F630 при 259 слов в памяти программ
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт фев 17, 2026 16:16:21

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 19 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Неадекватное поведение 16F630 при 259 слов в памяти программ
СообщениеДобавлено: Вс мар 09, 2014 18:23:00 
Открыл глаза
Аватар пользователя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Пт июл 19, 2013 15:08:01
Сообщений: 44
Откуда: Дальний Восток
Рейтинг сообщения: 0
Доброго времени суток! Занялся написанием часов/будильника на PIC16F630..
Так вот, при занятых 258 словах памяти программ контроллера всё хорошо, ведет себя как и положено, но стоит только дабавить любую команду в начало исходника, то он начинает отображать не то что надо, в зависимости от места постановки лишнего слова..
Может есть какая-то особенность или секрет, которого я не знаю?

Пишу на ассемблере в MPLAB IDE v8.70
Прошиваю через PICkit 2 Programmer

Если нужно, могу выложить исходник..

P.S. Замена контроллера не помогла..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Вс мар 09, 2014 19:12:32 
Друг Кота

Карма: 27
Рейтинг сообщений: 1283
Зарегистрирован: Ср фев 11, 2009 20:35:58
Сообщений: 7853
Рейтинг сообщения: 0
Цитата:
Если нужно
тебе совет,то выкладывай. Форуму ни чего не нужно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Вс мар 09, 2014 19:21:50 
Открыл глаза
Аватар пользователя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Пт июл 19, 2013 15:08:01
Сообщений: 44
Откуда: Дальний Восток
Рейтинг сообщения: 0
Вот исходник с 259-й командой NOP в блоке инициализации
Собрано на макетной плате: PIC16F630, сдвиговый регистр 74HC595, 4-х разрядный 7-ми сегментный индикатор FYQ-2541AS
Схему соединения сейчас нарисую..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Вс мар 09, 2014 19:30:55 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1400
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7346
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
И не мудрено. Вы очень вольно обращаетесь с таблицами. И не учитываете, что команда ADDWF PCL не выполняет перенос в старший байт адреса, при переполнении в младшем.
У меня для контроля в таких случаях всегда стоял предохранитель:

Код:
decpartb:   
   andlw   0x0f
   addwf   pcl
        DT      0,    1,    1,    2,    3,    3,    4,    4
        DT      5,    6,    6,    7,    8,    8,    9,    9
;
   IF high($-1)-high(decpartb)
   ERROR "decpartb over page edge"
   ENDIF


Последний раз редактировалось uldemir Вс мар 09, 2014 19:41:26, всего редактировалось 3 раз(а).

Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Вс мар 09, 2014 19:31:33 
Друг Кота

Карма: 27
Рейтинг сообщений: 1283
Зарегистрирован: Ср фев 11, 2009 20:35:58
Сообщений: 7853
Рейтинг сообщения: 0
Компилируй и пиши дальше. Объяснять лень. Читай про PCL и PCH


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Вс мар 09, 2014 19:39:15 
Открыл глаза
Аватар пользователя

Карма: 1
Рейтинг сообщений: 10
Зарегистрирован: Пт июл 19, 2013 15:08:01
Сообщений: 44
Откуда: Дальний Восток
Рейтинг сообщения: 0
uldemir писал(а):
И не учитываете, что команда ADDWF PCL не выполняет перенос в старший байт адреса, при переполнении в младшем.


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

Благодарю за разъяснение! :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Ср мар 12, 2014 12:40:55 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср фев 16, 2011 22:58:23
Сообщений: 193
Рейтинг сообщения: 0
CaseBot писал(а):
частично даташиты
В даташите этому 2-3 странице посвящено, и насколько помню даже со стрелочками куда какие биты переносятся показано. Даташиты надо изучать, а не хрень самописную всякую. Если программа не сильно объемная, то можно сделать так: в мплабе (если там пишете) ставим
Код:
TABLE1     ORG 0xXXXX ;где XXXX адрес начала страницы памяти команд, смотреть ДШ
     ADDWF PCL,1 ;
     RETLW ... ;изымаемые данные
      .....
     RETLW ... ;изымаемые данные

Таблица должны быть в самом конце программы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Ср мар 12, 2014 12:51:49 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1400
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7346
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Не буду комментировать Ваш наезд на ТС - человек учится, но отмечу, что последнее Ваше утверждение - спорное.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Ср мар 12, 2014 13:37:30 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1502
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15461
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
iGraphicsS писал(а):
Таблица должны быть в самом конце программы.


Однако в случае с PICами это утверждение весьма спорно.
Сработает только в случае, если у применяемого МК только одна страница памяти программ.
Ежли мы имеем дело с МК имеющим более 1 страницы памяти программ, то повылазят дополнительные "подарки" от неучтенного содержимого PCLATH даже при обработке простейших подпрограмм (не говоря уже о таблицах). 8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Ср мар 12, 2014 14:03:41 
Друг Кота

Карма: 27
Рейтинг сообщений: 1283
Зарегистрирован: Ср фев 11, 2009 20:35:58
Сообщений: 7853
Рейтинг сообщения: 0
Цитата:
последнее Ваше утверждение - спорное.

Добавлю: вообще не правильное. И приложенный код тоже.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Ср мар 12, 2014 17:24:04 
Нашел транзистор. Понюхал.

Зарегистрирован: Ср фев 16, 2011 22:58:23
Сообщений: 193
Рейтинг сообщения: 0
Эм... прошу изъяснений.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Ср мар 12, 2014 17:41:25 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2962
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 24831
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Таблица вообще может быть где угодно, хоть кусками в разных местах.
Весь это пустопорожний разговор от желания упростить расчет перехода через addwf PCL, f.
Универсальный расчет перехода включает в себя вычисление ЗНАЧЕНИЯ для PCL с переносом (переполнения) в PCLATH и лишь затем записью в сам PCL. Это слегка длиннее, но абсолютно универсально.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Ср мар 12, 2014 19:23:21 
Друг Кота

Карма: 27
Рейтинг сообщений: 1283
Зарегистрирован: Ср фев 11, 2009 20:35:58
Сообщений: 7853
Рейтинг сообщения: 0
Цитата:
прошу изъяснений

По выложенному тексту таблица должна находиться в первой странице т.е. в начале программы и заканчиваться не далее 0xFF.
Если хотите располагать таблицу в любом месте, то как описал КРАМ.
Поиграйте с текстом в MPLAB.
Код:
   LIST      P=16F630
                      #INCLUDE <P16F630.INC>                     
                      ERRORLEVEL  -302
                      __CONFIG 3FF1H
;=========
REG   EQU   0x20
;==========
      ORG 0
      CALL   TABLE
      NOP
;=================
         ORG   220H      ; РАСПОЛОЖЕНИЕ В ЛЮБОЙ СТРАНИЦЕ ПАМЯТИ ПРОГРАММ

TABLE       MOVLW       HIGH TABL    ; СТАРШИЙ БАЙТ АДРЕСА ТАБЛИЦЫ
            MOVWF       PCLATH      ; В PCLATH
            MOVF        REG,W       ; ЗАБИРАЕМ ЧТО НУЖНО ПЕРЕКОДИРОВАТЬ
            ADDLW       LOW TABL     ; СКЛАДЫВАЕМ С МЛАДШИМ БАЙТОМ АДРЕСА ТАБЛИЦЫ
            BTFSC       STATUS,C    ; ПРОВЕРКА ПЕРЕПОЛНЕНИЯ
            INCF        PCLATH,F    ; ЕСТЬ ПЕРЕНОС PCLATH+1
            MOVF        REG,W       ; НЕТ ПЕРЕНОСА.ЗАБИРАЕМ ЧТО НУЖНО ПЕРЕКОДИРОВАТЬ
;==================
            ADDWF       PCL,F       ;
TABL        RETLW       B'11000000' ;
            RETLW       B'10011111' ;
           ; ...
      END


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Ср мар 12, 2014 22:08:08 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1502
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15461
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
МММ...
Поговорим о "среднемладших"... Исходим из следующего:
В большинстве случаев таблица нужна для быстрого преобазования данных и редко превышает 256 байт.
Общий объём памяти программ превышает 1 страницу...
Возможна работа активных аппаратных перрываний...
Поскольку при вызове подпрограммы преобразования по CALL TABLE содержимое PCLATH.4:PCLATH.3 уже автоматически сбрасывается в PCH, то загрузка старшего байта адреса указателя таблицы должна быть выполнена перед вызовом CALL TABLE, а не в самом теле обработчика.
Для удобства работы начальную точку желательно размещать на границе областей (0x0000/0xNN00).
Следует учесть, что ADDWF PCL,1 при W=0xFF даст "бесконечный цикл"... :cry: (если не учитывать перенос в старший разряд при "примитиве" минимальной реализации алгоритма обращения к PCL)
Таким образом вводится еще одно ограничение на входные параметры при вызове обработчика.
В обработчике прерываний обязательным пунктом будет хранение в программном блоке временных регистров содержимого PCLATH и его последующее восстановление по завершению обработчика прерываний.
Пример с дополнительной предобработкой содержимого PCLATH в теле обработчика необходим лишь в случае произвольной точки вхождения в обработчик таблиц в любой точке адресного пространства памяти программ.
В большинстве практических применений достаточно предварительное указание старшего байта адреса таблицы, не забывая при том, что исходное (до CALL TABLE) содержимое PCLATH после выполнения RETLW X будет искажено (если не добавить еще один промежуточный регистр временного хранения).
Кстати PIC16F630 такие страсти-ужасти практически не угрожают - диапазон адресов не затрагивает PCLATH.4:PCLATH.3 (0x000-0x3FF) да еще при весьма "льготном" режиме доступа ко второму банку РПД. :))
Единственно надо следить за PCLATH.2:PCLATH.1:PCLATH.0, но и это не обязательно, если таблица на границе 256 байтовой области, либо значение в W не превышает 127.
Т.е. для 630-го это будет:

REG EQU 0x20
;==========
ORG 0
CALL TABLE
NOP
;=================
ORG 220H ; РАСПОЛОЖЕНИЕ В ЛЮБОм
; месте памяти программ при разрешенном
; диапазоне значений в W от 0 до 127 (0x00-0x7F)
TABLE
ADDWF PCL,F ;
TABL RETLW B'11000000' ;
RETLW B'10011111' ;
; ...
END

Если же необходимо использовать страничный механизм, то прийдется сделать такое:

movlw high TABLE
movwf PCLATH
CALL TABLE
_____
TABLE
movlw low TABLE
addwf reg,w
btfsc STATUS,C
incf PCLATH,f
movwf PCL
ну и далее кучка retlw
а вот как насчет 0xFF в REG... и дополнительного хранения/восстановления PCLATH - кому надобно - додумывайте. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Ср мар 12, 2014 22:33:03 
Друг Кота

Карма: 27
Рейтинг сообщений: 1283
Зарегистрирован: Ср фев 11, 2009 20:35:58
Сообщений: 7853
Рейтинг сообщения: 0
Код:
REG EQU 0x20
;==========
ORG 0
CALL TABLE
NOP
;=================
ORG 220H ; РАСПОЛОЖЕНИЕ В ЛЮБОм
; месте памяти программ при разрешенном
; диапазоне значений в W от 0 до 127 (0x00-0x7F)
TABLE
ADDWF PCL,F ;
TABL RETLW B'11000000' ;
RETLW B'10011111' ;
; ...
END

BOB51 Не поленись в MPLAB прогнать этот код.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Ср мар 12, 2014 22:46:06 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
Да у Микрочипа есть апнота по этому злодейству... поиском её...

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Ср мар 12, 2014 23:13:09 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1502
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15461
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
otest писал(а):
Код:
REG EQU 0x20
;==========
ORG 0
CALL TABLE
NOP
;=================
ORG 220H ; РАСПОЛОЖЕНИЕ В ЛЮБОм
; месте памяти программ при разрешенном
; диапазоне значений в W от 0 до 127 (0x00-0x7F)
TABLE
ADDWF PCL,F ;
TABL RETLW B'11000000' ;
RETLW B'10011111' ;
; ...
END

BOB51 Не поленись в MPLAB прогнать этот код.


Верно... :oops: Зевнул :) - любая запись весь PCLATH загружает, а старшей двойки там не будет.
зато второй пример к месту :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Ср мар 12, 2014 23:24:34 
Друг Кота

Карма: 27
Рейтинг сообщений: 1283
Зарегистрирован: Ср фев 11, 2009 20:35:58
Сообщений: 7853
Рейтинг сообщения: 0
Цитата:
зато второй пример к месту

Импровизация не возбраняется. Главное не упускать из виду основную суть.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Неадекватное поведение 16F630 при 259 слов в памяти прог
СообщениеДобавлено: Чт мар 13, 2014 07:55:00 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1502
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15461
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Благодарю всех участников данного обсуждения, особо otest за помощь в разрушении "стереотипа ADDWF PCL,f"/подсказку решений относительно особенностей работы с PCL/PCLATH для режимов таблица данных/вычисляемый переход (таблица векторов)!
8)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 19 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y