Вопросы начинающих PIC ASM

Поклонники продукции Microchip Technology Inc тусуются тут.
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

Ну надо же и альтернативы развивать.
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25263
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

yor писал(а):Ну как тут не согласиться, согласен конечно со всем:)) Я в gpsim проверяю, случай с "btfsc W" поймал :))
Подобные ошибки в Си еще более распространены. И компилятор их не видит. И все потому, что существуют определенные СОГЛАШЕНИЯ языка, которые способны истрактовать ошибочную запись как верную.
То есть любой компилятор (включая ассемблер) не имеет логики живого человека. Он работает ПО ПРАВИЛАМ.
Аккумулятор в синтаксисе определен как НОЛЬ. То есть везде, где пишется слово W, будет ПОДСТАВЛЕН при компиляции НОЛЬ.
И этот ноль не противоречит синтаксису.
Реклама
yor
Говорящий с текстолитом
Сообщения: 1679
Зарегистрирован: Сб янв 19, 2008 23:57:27

Re: Вопросы начинающих PIC ASM

Сообщение yor »

На том и постановим :)) А вот к вопросу, в каком состоянии после включения, POR и прочих сбросов находятся общие регистры, которые ОЗУ? Родэрик пишет, что FF, это случайно не в режиме программирования память программная? При обычной работе в симуляторе вижу, что по нулям. Насколько это корректно?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25263
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

ОЗУ (общего назначения, а не спецрегистры) находятся В СЛУЧАЙНОМ СОСТОЯНИИ.
Симулятор тут вообще не причем.
Возьмите контроллер с отладчиком и включите его. Увидите в ОЗУ хаос. Правда этот хаос достаточно точно повторяем у данного образца...
Но это другая история...
SFR (регистры специального назначения) после сброса занимаю состояние указанное в даташите.
Последний раз редактировалось КРАМ Вт янв 12, 2016 17:51:01, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Вопросы начинающих PIC ASM

Сообщение Albert_V »

Их значение после включения питания не определено.
Только вам думать, делать ли при INIT-е (до MAIN) "очистку памяти".
----
P.S.
Дуплет.
Реклама
Аватара пользователя
Родэрик
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Чт ноя 26, 2015 23:22:35
Откуда: не с Уфы
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Родэрик »

yor писал(а):На том и постановим :)) А вот к вопросу, в каком состоянии после включения, POR и прочих сбросов находятся общие регистры, которые ОЗУ? Родэрик пишет, что FF, это случайно не в режиме программирования память программная? При обычной работе в симуляторе вижу, что по нулям. Насколько это корректно?
Возьми да проверь.
Я уже проверил в железе, поэтому и написал.
Как-то раз перенёс несколько регистров в другой банк, а очищал только нулевой. При включении питания у меня начало пикать по 255 раз, то есть содержимое тех регистров указывало но то сколько раз попикать, причём они там в очереди стояли. В чём дело, я далеко не сразу понял. И поверь, это не случайные значения каждый раз были, а всегда FF.
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25263
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

Родэрик писал(а): Возьми да проверь.
Я уже проверил в железе, поэтому и написал.
Как-то раз перенёс несколько регистров в другой банк
"Не верь глазам своим." (с)
:)))
Значит так перенес...
Никаких FF в ОЗУ общего применения при включении питания нет.
Вы ошиблись.
Аватара пользователя
БАТАРЕЙКУС
Потрогал лапой паяльник
Сообщения: 346
Зарегистрирован: Сб фев 07, 2009 19:21:25

Re: Вопросы начинающих PIC ASM

Сообщение БАТАРЕЙКУС »

доброе время суток коты.
давно уже программирую в MPLAB 8, но столкнулся с необходимостью к проекту на asm подцепить дополнительный файл на asm, порывшись в гугле нашёл подобные темы, а вот как решить эту проблему так и не понял ?
Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
Аватара пользователя
abc
Друг Кота
Сообщения: 3685
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Re: Вопросы начинающих PIC ASM

Сообщение abc »

Код: Выделить всё

include    "sample.asm"
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25263
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

Никаких инклюдов asm-исходников делать не надо.
Просто достаточно включить исходники в ветку Source проекта.
НО!
Все переменные нужно объявлять корректно.
То есть не как константы, а:

Код: Выделить всё

   udata
var1   res 1
var2   res 1
var3   res 1
Далее нужно объявить глобальные переменные, которые будут видимы всеми остальными файлами

Код: Выделить всё

    global  var1, var2
Соответственно в файлах, где эти переменные применяются должна быть строка

Код: Выделить всё

  extern    var1
Тоже самое должно быть с метками вызовов.
Константы оформляются в виде inc-файлов.
После секции объявления переменных код должен начинаться с директивы code.

Итого код будет выглядеть так:
Файл первый:

Код: Выделить всё

	list      p=12F683
	#include <p12F683.inc>
	udata		0x20
www			res 1
w_temp		res 1
status_temp		res 1

	global	www
	extern	Func

RST	  code	0x000
        nop
	goto    start
ISR	  code	0x004
................
................
MAIN	  code
start
................
	call           Func
................
	goto		start

	end
Файл второй:

Код: Выделить всё

	#include <p12F683.inc>
	#include <MyHeader.inc>
	extern	www
	global	Func

SUB	code

Func
	movf		www, f
	movlw		mask
	andwf		www, f
	movlw		offset
	addwf		www, w
	return

	end
inc-файл проекта (помимо стандартного контроллерного):

Код: Выделить всё

mask    equ    0x1F
offset    equ    .152

	list
inc-файлы объявляются инклюдами в каждом файле, где константы применяются.
Пользовательский inc-файл (в примере упомянут как MyHeader.inc во втором файле исходника) должен быть включен в проект в ветке Headers.

ЗЫ. Объявление переменных через директиву udata удобно тем, что в проекте РЕАЛЬНО УЧИТЫВАЕТСЯ объем использованного ОЗУ с контролем через скрипт линкера проекта. А так же можно увидеть текущий занятый объем ОЗУ в Wiew-Memory Usage Gauge в самом MPLAB IDE 8.
При объявлении переменных как адресных констант эти фичи недоступны.
Возможность загрузки адреса переменной как константы при косвенной адресации остается.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25263
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

Забыл.
В проект обязательно нужно В ЯВНОМ ВИДЕ включить скрипт линкера. Дженерик на свой целевой контроллер из папки MPASM Suite/LNK МПЛАБа.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

Прошу прощения, но задам глупый вопрос...
Пытаюсь поиздеваться над PIC16F84 и пишу кодовый замок с матричной клавиатурой и семисегментным трехразрядным индикатором.
Индикатор (общий анод) сидит на трех выводах порта А, который их поочередно перебирает в прерывании таймера. На них же висят столбцы матричной клавиатуры. Цифры выводятся через 595 регистр.
1. Цифры он у меня выводит правильно.
2. Динамическая индикация работает.
3. Клавиатура опрашивается в том же прерывании таймера и сохраняет значения опрошенных столбцов в три переменные.

А дальше стопор... :oops: :facepalm: :dont_know:
Не могу придумать как сделать, чтобы при нажатии кнопки любой число записывалось в первый разряд, при нажатии еще раз любой кнопки уже во второй разряд, и третий раз нажатие в третий разряд...

Написал ту часть программы, которая работает с сохраненными значениями столбцов клавиатуры и определяет какая кнопка была нажата. Даже вывод сделал, но скорость работы МК большая и он выводит все одинаковые цифры во все три позиции. Понятно, что надо вообще сделать как-то так, чтобы пока кнопка нажата, он ничего не выводил, а как только ее отпустили - он тут же вывел, при этом понял в какую позицию.
У меня же пока кнопка нажата - в прерывании в переменную уходит ее значение, а если она отпущена, то в том же очередном прерывании в переменную уходят нули. :facepalm:

Простите, нету кода, т.к. комп с проектом у друга.

З.Ы. Да, это все исключительно для обучения надо из любопытства. Просто PICи изучаю дня 4 всего. :dont_know:
Станислав
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25263
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

Для записи чисел в разные разряды, наверно нужно ввести УКАЗАТЕЛЬ на разряд.
И его инкрементировать. Или декрементировать. Или изменять по любому заранее выбранному закону таблично.
Факт нажатия меняет указатель ПОСЛЕ записи самого числа по первоначальному указателю.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

КРАМ писал(а):Факт нажатия меняет указатель ПОСЛЕ записи самого числа
Вот! так и делал. Инкрементровал переменную, потом сверял ее и по ней выводил, после последнего знакоместа обнулял ее и все по кругу.
Да, работает.
Однако проблема возникла в том, что у меня идет типа "дребезг" контактов у кнопок. Т.е. если я нажал на кнопку, при частоте в 4 МГц у микроконтроллера, он успевает заполнить все разряды. Т.е. мне надо значит нажать кнопку и дождаться пока я ее отпущу, чтобы заполнить разряд. Вот это у меня не получается... :oops:
Станислав
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы начинающих PIC ASM

Сообщение Аlex »

СКАЗОЧНИК писал(а):и дождаться пока я ее отпущу
Вовсе необязательно. Достаточно хранить предыдущее состояние кнопки и при очередном заходе проверять его. Если кнопка не была нажатой, а нажатие появилось - считаем что кликнули по кнопке, взводим флаг, который в основном цикле проверяется и сбрасывается.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25263
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

СКАЗОЧНИК писал(а): Однако проблема возникла в том, что у меня идет типа "дребезг"
Дребезг удаляется путем опроса с интервалом БОЛЬШЕ, чем дребезг.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

Хм.. Кнопки так и делал. А матричная клавиатура в прерывании опрашивается... :dont_know:
Станислав
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25263
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

СКАЗОЧНИК писал(а):матричная клавиатура в прерывании опрашивается...
Какая разница в чем она опрашивается? В прерывании или просто в программном цикле - без разницы.
При опросе реже, чем длится дребезг, дребезга не будет.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Re: Вопросы начинающих PIC ASM

Сообщение СКАЗОЧНИК »

Хорошо... Короче, я туплю. :(
У меня выводы индикатора и клавиатуры висят на одном порту. Соответственно, клавиатура опрашивается быстро, как и вывод цифр в динамической индикации. А если я отпустил кнопку, то тут же в порт уходят нули... Задержку по опросу кнопки в прерывании я сделать не могу.
Ткните носом, чего туда запихать? :roll:
Станислав
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25263
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вопросы начинающих PIC ASM

Сообщение КРАМ »

Причем тут вообще задержка?
Тут нужна не задержка, а ПРОПУСКИ.
Создаете переменную счетчик и инкрементируете ее в том месте, где опрашиваете кнопки. А сам опрос делаете только если счетчик кратен некоему коэффициенту деления. Сиречь, по условию равенства единице выбранного разряда счетчика. Нулевой разряд даст деление на 2 (опрос будет происходить через раз), первый разряд - даст деление на 4, второй - на 8 и так далее. Таким образом Вы понизите частоту опросов до нужного Вам значения. Сам счетчик будет тупо считать по кругу.
Ответить

Вернуться в «PIC»