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

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

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

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

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

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

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

 
Опции темы
Непрочитано 28.02.2007, 09:08  
TheSvin
Частый гость
 
Регистрация: 01.02.2005
Сообщений: 14
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
TheSvin на пути к лучшему
По умолчанию Работа с PCL в PIC12F510

Есть безбранчевый код, который работает с PCL корректно в верхних 256 командах.
Размещаю его в начало следующих 256 команд (верхние нужны для процедур в 12F510 восьмой бит PC при CALL сбрасывается, приходится распологать входы в них в верхней области).
После расположения в верхней области в симуляторе начинают показываться странные результаты.
Например текущие
W= B'00000100'
PCL = B'00001011'
(находимся в "следующих 256 командах" так что в PC реально 100001011)
следующая команда
addwf PCL,1
должно получится в PCL текущая PCL+1+W=010011
Однако
Во-первых сбрасывается 8ой бит PC - это видно по тому что симулятор "прыгает" в область верхних 256 команд.
Во-вторых в самом PCL оказывается 0111011 вместо 010011.(т.е. оказывается в PC 000111011 вместо ожидаемого 1000010011)
Как видно из примера никаких "переполнений" "заворачиваний" и т.п. с этими значениями быть не может. Ожидается что 8ой бит PC останется как и был а в битах 7:0(PCL) окажется 010011. Однако, результат неожиданный.
Это глюк симулятора? (проверить на реальном устройстве пока не могу - программатор будет только во вторник, а программу нужно до его приезда сделать)
Или я какой-то тайны не знаю про PCL в 12F510?
Мануал весь наизусть выучил. (Ошибок кстати очень много, вобще не лучший даташит от Microchip'а прямо скажем).
Ничего по этому поводу разъяснительного не нашёл.

Заранее спасибо за объяснения.
Только пожалуйста по-существу, без лирики. Код мне нужен компактный. Без работы с PCL это будет малореально сделать.
Реклама:
TheSvin вне форума  
Непрочитано 28.02.2007, 10:01  
vasseff
Гражданин KAZUS.RU
 
Регистрация: 24.01.2005
Сообщений: 489
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
vasseff на пути к лучшему
По умолчанию

Почитайте AN556, “Implementing a Table Read”
(DS00556).

Код:
    movWf Temp
    movLw HIGH,Table
    movWf PCLATH
    movFw Temp
    addwf PCL,F
Table
    retlw 1
    retlw 2
    retlw 3
    .......
Вообще трогать PCL без предватительной установки PCLATH нельзя. Исключение PIC10F200. Там память 256 слов
__________________
Удачи!
vasseff вне форума  
Непрочитано 28.02.2007, 10:16  
TheSvin
Частый гость
 
Регистрация: 01.02.2005
Сообщений: 14
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
TheSvin на пути к лучшему
По умолчанию

Спасибо за ответ.
Но я знаю как делать LookUp таблицы.
Тем более в моём случае они не помогут. Да и код у меня нормально работает в верхних 256 командах.
Дело вот в чём ещё:
В pic12F510 нельзя
movWf PCLATH
Нет там такого регистра.
Поэтому я код организую так (распологаю) чтобы младшие биты PC были такими что не получалось при сложении addwf PCLW,1 переполнений.
Вы сами попробуйте определив в конфигурации 12F510 выполнить предложенный Вами код расположив его в командах за 255ой (org .256). И удивитесь глядя на то, что покажет симулятор в результате.
TheSvin вне форума  
Непрочитано 28.02.2007, 10:40  
vasseff
Гражданин KAZUS.RU
 
Регистрация: 24.01.2005
Сообщений: 489
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
vasseff на пути к лучшему
По умолчанию

Цитата:
В pic12F510 нельзя movWf PCLATH Нет там такого регистра.
А ведь правда ! Век живи, век ругайся. В статусе
bit 5 PA0: Program Page Preselect bit
1 = Page 1 (200h-3FFh)
0 = Page 0 (000h-1FFh)
Each page is 512 bytes.
Только он для инструкций goto. С инструкциями call и операциями над PCL бит 8 програмного счетчика всегда 0.
Note: Because PC‹8› is cleared in the CALL
instruction or any modify PCL instruction,
all subroutine calls or computed jumps are
limited to the first 256 locations of any
program memory page (512 words long).
Если надо, не располагайте код с операциями над PCL с адреса H'100' а с адреса H'200'.
Сделайте что будете делать с pic12F510 и бегите наверх, к 16f, 18f, а то и выше.
__________________
Удачи!
vasseff вне форума  
Непрочитано 28.02.2007, 10:58  
TheSvin
Частый гость
 
Регистрация: 01.02.2005
Сообщений: 14
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
TheSvin на пути к лучшему
По умолчанию

Угу. Я знаком с банками и сбросом 8го бита CALLом.
Действительно выучил уже наизусть ман.
Но у меня не в процедуре код то.
В обоих банках программных верхние 256 адресов забиты уже процедурами.
Код безбранчевого перехода от значения в АЦП.
Примерно такой:
Код:
CheckIfBtn
	call GetADC
	addwf constAddFst,0 ;если больше кнопочного 
	btfsc STATUS, C
	goto CheckIfBtn
	clrf btncode

CheckNextBtn
	incf btncode
	addwf constAddNext,0 ;вольтаж пров.
	btfss STATUS, C
	goto CheckNextBtn
	movf btncode,W
	addwf PCL,1
      nop
	goto btn0
	goto btn1
	goto btn2
	goto btn3
      ...
      goto btn(n-1)
btnn:
      ...
	goto CheckIfBtn

btn3:
      ....
	goto CheckIfBtn
btn2:
      ....
	goto CheckIfBtn
btn1:
      ....
	goto CheckIfBtn
btn0:
      ...
	goto CheckIfBtn
Там до фига функций. Вобщем тесновато.
Цитата:
Сделайте что будете делать с pic12F510 и бегите наверх, к 16f, 18f, а то и выше.

Хороший совет. Но не я решаю на чём работать )
TheSvin вне форума  
Непрочитано 28.02.2007, 11:18  
vasseff
Гражданин KAZUS.RU
 
Регистрация: 24.01.2005
Сообщений: 489
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
vasseff на пути к лучшему
По умолчанию

Ну и задачка ! Кроме основательного переразмещения кода ничего посоветовать не могу. Ясно, что весь участок кода должен быть в странице 0 или 2.

Код:
 
   movf btncode,W
   addwf PCL,1
   nop
   goto btn0
   goto btn1
   goto btn2
   goto btn3
      ...
   goto btn(n-1)
Могу только посоветовать переместить имеющийся код из страниц 0 и 2 в страницы 1 и 3.

Старое
; в странице 0
КОД
;;;;;;;;;;;;;;;;;;;
Новое
; в странице 0
goto КОД
addr_ret

; в странице 1
КОД
goto addr_ret

Дико, естественно, но ничего другого на ум не приходит
__________________
Удачи!
vasseff вне форума  
Непрочитано 28.02.2007, 19:15  
TheSvin
Частый гость
 
Регистрация: 01.02.2005
Сообщений: 14
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
TheSvin на пути к лучшему
По умолчанию

Там только две страницы (0 и 1) по 512 командных слов. Или Вы что то другое имели ввиду?

В любом случае хотелось бы чисто математически однозначно убедится влияют ли операции с PCL на верхние биты программного счётчика (из манов следует что не влияют, но симулятор показывает обратное) и выполняются ли они строго по модульной арифметике как это происходит с любым другим регистром.
Опять же симулятор показывает, что нет. Что видно из числовых примеров в посте.
Я попробую поделать экспериментов и доложу по эмпирике.
Попробую в разных симуляторах. (Программатор забрали гады , на 12F510 его и не было ещё а с 16F84 можно было бы поэкспериментировать - проверить на практике повлияют ли операции с PCL на старшие биты счётчика).
Беда в том, что симуляторы, дебагеры и т.п. пишут люди. А людям свойственно ошибаться. Просто я часто на опыте своём обнаруживал ошибки в софте, и сам писал подобный.
Код о котором я писал пробывался на MPLAB SIM, который идёт с MPLAB IDE 7.42
Я в нём попробывал посмотреть а как будет влиять на верхние биты счётчика операции с PCL когда в них › 0.
Такой же странный результат.
Причём если до их же пропишешь (они уже там! есть). Т.е. те же самые биты которые там уже есть ещё раз принудительно запишешь! То работает без странностей.
Из чего подозрение, что это глюк софта.
Хочу попробывать с симулятором из старого MPLAB. Там нет поддержки 12F510 но можно посмотреть на 16F84 (в новом то симуляторе он тоже даёт причудливый результат)
Т.е. вопрос простой - влияют ли операции с PCL на старшие биты PC (которые в PCL на входят) или нет, и работают ли эти операции так как с любым другим регистор т.е. 2+2=4 там или как показывает симулятор 2+2= не четыре в PCL если в старших битах не 0.
TheSvin вне форума  
Непрочитано 28.02.2007, 20:12  
TheSvin
Частый гость
 
Регистрация: 01.02.2005
Сообщений: 14
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
TheSvin на пути к лучшему
По умолчанию

Понял свою ошибку.
Невнемательно прочитал. CALL or any MODIFY
Про CALL увидел про MODIFY пропустил
Вобщем сложение тоже будет чистить 8 бит.
Задача как я хотел её сделать неразрешима.
Буду придумывать ещё что-то.

Спасибо за участие в разговоре.
TheSvin вне форума  
Непрочитано 01.03.2007, 09:55  
vasseff
Гражданин KAZUS.RU
 
Регистрация: 24.01.2005
Сообщений: 489
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
vasseff на пути к лучшему
По умолчанию

Был неясен. Хочу уточнить, что под страницей 0 подразумеваю адреса 00-FF, 1: 100-1FF, 2: 200-2FF, 3: 300-3FF. Все по 256 байт.
__________________
Удачи!
vasseff вне форума  
Непрочитано 09.03.2007, 02:17  
TheSvin
Частый гость
 
Регистрация: 01.02.2005
Сообщений: 14
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
TheSvin на пути к лучшему
По умолчанию Загадочные действия CALL и GOTO в pic12F510

В описании работы CALL и GOTO для pic12F510 (ман DS41268B) есть одно странное действие:

"The upper bits TO and PD are set.
PC‹10:9› are loaded from
STATUS ‹6:5›"

Про бит 5 из STATUS всё понятно - это страница программной памяти.
Непонятно зачем копируется бит 6 из STATUS в PC?
Почему именно только в командах GOTO и CALL.
К адресации бит отношения не имеет (да и не используется и в PC 10ый бит).
Бит 6 STATUS - это
"
bit 6 CWUF: Comparator Reset bit
1 = Reset due to wake-up from Sleep on comparator change
0 = After power-up or other Reset"

Зачем его в копировать в PC и именно при CALL и GOTO?
Как это может использоваться?

Вобще единственная дока по PIC12F510, которую удалось мне найти, - это DS41268B.
Там он описывается на пару с PIC16F506.
Пришёл PicKit2. Там в частности и программатор для PIC12F510. В Kit'е два CD, куча
исходников, но ни одного для 12F510!
Сама единственная дока - вся в ошибках и противоречиях.
Делители для АЦП указанны неверно.
В одном месте написано что такие то инструкции сбрасывают 8 бит PC, в другом - что 9ый.
Я уж не говорю про опечатки на каждом шагу.
Вроде программу я уже написал для него, вроде работает.
Но как-то внутри неуютно без нормальной документации...
Может кто знаком с этой микробой?
И может поделится альтернативными источниками информации о ней?
Был бы очень благодарен.

И наверно нужно будет erratу написать по DS41268B.
Чтобы хоть другие шишок с этим маном не набили.
TheSvin вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна инфа и софт PCL-714 Super-Lab Card (14bit) A/D+D/A+DIO Nikocth Информация по радиокомпонентам 3 26.12.2007 02:21
Загадочные действия CALL и GOTO в pic12F510 TheSvin Микроконтроллеры, АЦП, память и т.д 0 09.03.2007 02:14


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


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