АвторСообщение



Пост N: 256
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 1
ссылка на сообщение  Отправлено: 20.06.07 13:11. Заголовок: Директивы


В программах иногда используют директиву "#include".
В даташите на MPASM она обозначается как include.
Вопрос. Нужна ли "решётка" в начале слова?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 32 [только новые]


постоянный участник




Пост N: 110
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 1
ссылка на сообщение  Отправлено: 20.06.07 15:17. Заголовок: Re:


Пётр пишет:

 цитата:
Нужна ли "решётка"


Насколько я понял, наличие или отсутствие решётки не изменяет и не влияет на результат компиляции программы. Поэтому - как кому удобно, можно ставить решётку, можно не ставить... (IMHO)

Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 100
Зарегистрирован: 26.12.06
Откуда: Украина, Новомосковск
Рейтинг: 0
ссылка на сообщение  Отправлено: 20.06.07 21:14. Заголовок: Re:


мое мнение что решетка ставится только для того чтоб директива бросалас в глаза, а иначе зачем

Чюдес не бывает, особенно когда касается электроники. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 23
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг: 0
ссылка на сообщение  Отправлено: 18.01.08 18:05. Заголовок: Диалог на форуме Мик..


Диалог на форуме Микрочипа навел меня на мысль развить тему по использованию (конечно не в ущерб оптимизации) директив MPASM.
Если есть положительный опыт с обращением к этой "медвежей услуги"(директивам). Прошу высказаться.

Rimsky Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 495
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 1
ссылка на сообщение  Отправлено: 18.01.08 18:17. Заголовок: Rimsky пишет: этой ..


Rimsky пишет:

 цитата:
этой "медвежей услуги"


Ну почему-же медвежей? Очень часто пользуюсь CBLOCK, MACRO, DE, IF. В других пока не было необходимости.

Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 25
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг: 0
ссылка на сообщение  Отправлено: 18.01.08 18:34. Заголовок: Медвежей потому, чт..


Медвежей потому, что некоторые начинающие пикоманы желая "облегчить себе жизнь", используют директивы как попало, не думая об оптимизации кода, и рациональности их применения.

Rimsky Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 496
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 1
ссылка на сообщение  Отправлено: 18.01.08 18:41. Заголовок: Так с умом-же надо....


Так с умом-же надо... А с дуру можно и сломать.
Удобная директива CBLOCK. Указал начальный адрес, перечислил все используемые регистры. Нет смысла объявлять адрес для каждого регистра.

Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 26
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг: 0
ссылка на сообщение  Отправлено: 18.01.08 18:47. Заголовок: RW1ZK Так с умом-ж..


RW1ZK

 цитата:
Так с умом-же надо... А с дуру можно и сломать.


Согласен.
Вот я и предлагаю подробнее расмотреть вопросы Директив, чтобы люди меньше "боков напороли"
Делитесь господа опытом!

Rimsky Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 497
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 1
ссылка на сообщение  Отправлено: 18.01.08 19:06. Заголовок: Здесь: http://rw1zk...


Здесь: http://rw1zk.nextmail.ru/Dir_MPASM.rar
описание директив на русском.

Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 242
Зарегистрирован: 06.05.07
Откуда: Россия, Липецк
Рейтинг: 3
ссылка на сообщение  Отправлено: 18.01.08 21:58. Заголовок: Следует четко разг..


Следует четко разграничивать директивы, "прописанные" в "шапке" программы (на объем программы не влияют. Удобство "в чистом виде") и директивы, "прописанные" в "рабочей" части программы (до директивы end).
В последнем случае, каждая директива имеет свое разложение на команды, которого нет в тексте программы, но которое можно увидеть в окне ROM.
Это и есть истинная "масса" директивы.
Из этого следует то, что в тексте программы, директиву можно заменить на ее разложение на команды, и в памяти программ, после этого, ровным счетом ничего не изменится.
Вот и весь "глубинный смысл".


Безумству храбрых поем мы песню (А.М.Горький) Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 58
Зарегистрирован: 04.05.07
Откуда: Беларусь, Минск
Рейтинг: 0
ссылка на сообщение  Отправлено: 19.01.08 00:30. Заголовок: RW1ZK пишет: Удобна..


RW1ZK пишет:

 цитата:
Удобная директива CBLOCK


Приведите пример использования (кусок кода), очень любопытно, хочу взять на вооружение.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 498
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 1
ссылка на сообщение  Отправлено: 19.01.08 11:35. Заголовок: CBLOCK 0CH ; ..


			CBLOCK		0CH				; 
Reg_1 ;
Reg_2 ;
Reg_3 ;
ENDC ;


Аналогична следующему представлению:

 Reg_1		EQU			0CH				; 
Reg_2 EQU 0DH ;
Reg_3 EQU 0EH ;


Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 27
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг: 0
ссылка на сообщение  Отправлено: 19.01.08 16:24. Заголовок: В вирективе DT тоже ..


В директиве DT тоже не мало пользы (она с успехом заменяет команду RETLW):
Например код вида:

RETLW B'1001'
RETLW B'0110'
RETLW B'1001'
RETLW B'0110'

Можно записать так:

DT B'1001',B'0110',B'1001',B'0110'

RW1ZK пишет:

 цитата:
CBLOCK 0CH ;
Reg_1 ;
Reg_2 ;
Reg_3 ;
ENDC



А можно и так:

CBLOCK 0CH ; <= это адрес ОЗУ с которого стартует блок.
Reg_1, Reg_2, Reg_3 ; Регистры счетчика
..........
ENDC


Rimsky Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 28
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг: 0
ссылка на сообщение  Отправлено: 19.01.08 16:44. Заголовок: #DEFINE не менее по..


#DEFINE (определяет правила замены текста) не менее полезная директива. Очень помогает в работе, текст программы делает нагляднее.

Например код вида:
;************			************ 
; Точка входа в ппрограммму
;************ ************
ORG 0x00
;************ ************
; Инициализация
;************ ************
INIT BCF STATUS RP0 ; BANK0
CLRF GPIO ; Инициализация защелок
MOVLW 0x07 ; Отрубаем-
MOVWF CMCON ; -компаратор
BSF STATUS RP0 ;BANK1
CLRF ANSEL ; Отрубаем АЦП
CLRF TRISIO ; Все на выход, кроме конечно GP3
BCF STATUS RP0 ; BANK0
CLRF Button ; Очистить состояние кнопки
BSF GPIO,GP0 ; Включить светодиод
GOTO MAIN ; Переход в тело программы

Может быть таким:
;************ ************
#define BANK1 BSF STATUS,RP0
#define BANK0 BCF STATUS,RP0

;************ ************
; Точка входа в ппрограммму
;************ ************
ORG 0x00

;************ ************
; Инициализация
;************ ************
INIT BANK0
CLRF GPIO ; Инициализация защелок
MOVLW 0x07 ; Отрубаем-
MOVWF CMCON ; -компаратор
BANK1
CLRF ANSEL ; Отрубаем АЦП
CLRF TRISIO ; Все на выход, кроме конечно GP3
BANK0
CLRF Button ; Очистить состояние кнопки
BSF GPIO,GP0 ; Включить светодиод
GOTO MAIN ; Переход в тело программы


Rimsky Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 29
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг: 0
ссылка на сообщение  Отправлено: 19.01.08 17:56. Заголовок: RW1ZK пишет: Очень ч..


RW1ZK пишет:

 цитата:
Очень часто пользуюсь CBLOCK, MACRO, DE, IF


Интересно узнать, про блоки условай (IF, ELSE) .
Как и где их правильно использовать?
Как отражается на память программ?

Rimsky Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 31
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг: 0
ссылка на сообщение  Отправлено: 21.01.08 14:03. Заголовок: А вот пример исполь..


А вот пример использования директив MACRO ,ENDM (макрос) WHILE, ENDW(цикл)

          
    LIST P=16F84A
    INCLUDE P16F84A.INC

    ;****** Макрос . Добавить количество NOP

    Set_NOP macro Count_NOP ; Определить тело макроса с аргументом Count_NOP (Количество NOP)
    variable i ; Объявляем локальную переменную (i)
    i = 0 ; Присвоить "стартовое" значение локальной переменной i = 0
    while i < Count_NOP ; Тело цикла с условием:
    ; код в теле цикла (while --- endw) повторяется до тех пор,
    ; пока локал. переменная i меньше аргумента Count_NOP
    NOP ; Исполняемый код в теле цикла
    i ++ ; Инкремент локал. переменной (i)
    endw ; Конец цикла
    endm ; Конец макроса

    Start:
    ;...... Инициализация.....
    ;...... тело программы....
    Set_NOP 4 ; Вызов макроса с заданием значения аргумента Count_NOP в нашем случае 4 команды NOP.
    ;...... продолжение кода..
    ;.........................
    end


И эквивалентный этому код в памяти программ:

NOP
NOP
NOP
NOP

Rimsky Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 32
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг: 0
ссылка на сообщение  Отправлено: 23.01.08 10:23. Заголовок: Интересно узнать, пр..



 цитата:
Интересно узнать, про блоки условай (IF, ELSE) .


Немного разобрался сам с этим вопросом.
Директивами IF и ELSE удобно пользоваться в тех случаях, когда подразумевается несколько вариантов (сценариев) реализации программы или куска кода, и в зависимости от определённых условий (версии программы, конфигурация, модель контроллера и т. д.) С помощью заданного условия можно сконфигурировать(в памяти программ!) именно тот код, который в конкретном случае необходим. Остальные варианты исполняемого кода остаются за "кадром".

Например:

LIST P=16F84A
INCLUDE P16F84A.INC
;*****Пример формирования альтернативного блока программы*****

Demo SET 0 ; Определение константы Demo =0 (Демо версия программы)
Full SET 1 ; Определение константы Full=1 (Полная версия программы)
Version SET Full ; Установка версии (Демо или полная) в нашем случае полная
IF Version == Full ; Блок условий (версия демо или полная?), в нашем случае полная
Config_full: ; Исполняемый код при истинном (1)значении (Version == Full)
..........................
ELSE ; Если значение ложно, то
Config_demo: ; Исполняемый код при ложном (0)значении (Version == Demo)
..........................
ENDIF ; Конец блока условий
..........................

end

В память программ помещается именно тот код, который определен условием.

Rimsky Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 100
Зарегистрирован: 27.04.07
Откуда: Россия, Воркута
Рейтинг: 0
Фото:
ссылка на сообщение  Отправлено: 18.02.08 07:56. Заголовок: Тут хотел оптимизиро..


Тут хотел оптимизировать программу, по работе с датчиками DS18B20, но чтото не получается.
Например, при работе с датчиком указывается PortC,DQ , где DQ - номер вывода микроконтроллера. Всего 5 датчиков, которые висят на разных выводах микроконтроллера.
Я пробовал применить команду DQ set 1, DQ set 2 и т.д.
В Mplab работает подмена DQ, а в железе нет.
В чём может быть проблема?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 61
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг: 0
ссылка на сообщение  Отправлено: 18.02.08 08:13. Заголовок: Директива SET анало..


Директива SET аналогична EQU, но SET позволяет изменить значение (в вашем случае DQ). Посмотрите, как выглядит код после ассемблирования в окне Programm Memory ?
Например:
        DQ      set     1 
BSF GPIO, DQ
DQ set 4
BSF GPIO, DQ

в Programm Memory выглядит так:
     BSF    GPIO, 0x1 
BSF GPIO, 0x4


Rimsky Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 101
Зарегистрирован: 27.04.07
Откуда: Россия, Воркута
Рейтинг: 0
Фото:
ссылка на сообщение  Отправлено: 18.02.08 10:53. Заголовок: В Mplab всё нормальн..


В Mplab всё нормально отображается, а в железе не хочет работать.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 64
Зарегистрирован: 21.10.07
Откуда: Россия, Иркутск
Рейтинг: 0
ссылка на сообщение  Отправлено: 18.02.08 11:27. Заголовок: VARIABLE i WHILE i ..


VARIABLE i 
WHILE i < 5
DQ SET i + 1
BSF GPIO, DQ
CALL INIT_DS
i ++
ENDW
INIT_DS NOP ; действия с DS
RETURN

может пригодится.

Rimsky Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 102
Зарегистрирован: 27.04.07
Откуда: Россия, Воркута
Рейтинг: 0
Фото:
ссылка на сообщение  Отправлено: 18.02.08 11:46. Заголовок: Спасибо, буду пробов..


Спасибо, буду пробовать.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1
Зарегистрирован: 02.01.09
Откуда: Россия, г. Таганрог
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.01.09 23:20. Заголовок: Директива MPASM- SET


Перенесена из "Обсуждение открытой части "Самоучителя..."
RW1ZK


На форум пишу впервые. Самоучитель и практикум изучаю уже 5 месяцев. Очень благодарен Евгению Александровичу за его труд. Все понятно и систематизировано.
На базе программы терморегулятора termo_24 ( папка «Взлом») написал программу для двух датчиков. Показания температуры выводятся на двухразрядный индикатор. На освободившийся RA7 поцепил второй датчик. Процедура 1WIRE-протокола опрашивает порт RA4. По примеру Евгения Александровича хотел для краткости и красоты программы подправить процедуру, как универсальную. К примеру вместо «4» поставить допустим переменную «Y». А в процессе исполнения программы, подставляя вместо «Y» допустим "7" или "4", опрашивать первый или второй датчик.
Повторно перечитывая самоучитель, ничего подходящего в моем случае я не нашел.
Поэтому для получения результата пришлось написать две абсолютно одинаковые процедуры с той лишь разницей, что в одной обращение идет к RA4, а во втором к RA7. Не по хозяйски я потратил объем памяти программ.
Перенимая настойчивость нашего мэтра, хотел докопаться до самой сути сам. Извилистая тропинка меня привела к директиве макроассемблера MPASM –«SET», которая както обделена вниманием.
Начал работать с этой тёмной лошадкой, чтобы получить результат. На данный момент вот такая зарисовка у меня работает как в LAB так и в PIC Simulator IDE. Но её надо заставить работать с пользой.
Может быть я ошибаюсь и эта тропинка тупиковая? Подскажите.
;================================================================================
; Определение названий и положений регистров общего назачения.
;================================================================================
Top equ 20h ;
;================================================================================
; Определение места размещения результатов операций.
;================================================================================
W equ 0 ; Результат направить в аккумулятор.
F equ 1 ; Результат направить в регистр.
N set 3 ;
;================================================================================
; Присваивание битам названий.
;================================================================================
C equ 0 ; Флаг переноса-заема.
Z equ 2 ; Флаг нулевого результата.
;================================================================================
org 0 ; Начальная "точка отсчета" в PC - нулевой
; адрес.
; -------------------------- "РАБОЧАЯ" ЧАСТЬ ПРОГРАММЫ -----------------------
START clrf Top ; В регистре Top ‘00000000’
;--------------------------------------------------------------------------------
bsf Top,N ; В регистре Top ‘00001000’
N set (N+1) ; Директива MPASM с матем. выражением
bsf Top,N ; В регистре Top ‘00011000’
N set (N+1) ; Директива MPASM с матем. выражением
bsf Top,N ; В регистре Top ‘00111000’
bcf Top,N ; В регистре Top ‘00011000’
N set 4 ; Директива MPASM
bcf Top,N ; В регистре Top ‘00001000’
N set 3 ; Директива MPASM
bcf Top,N ; В регистре Top ‘00000000’
end ;Конец программы


Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 602
Зарегистрирован: 14.01.07
Откуда: Россия, Лиски
Рейтинг: 2
Фото:
ссылка на сообщение  Отправлено: 03.01.09 00:11. Заголовок: Есть в самоучителе, ..


Есть в самоучителе, пример опроса более одного датчика. Если память не изменяет, там применяется вычисляемый переход.
А если работать с не более чем двумя датчиками, то можно просто опрашивать нулевой бит регистра. Так называемая проверка на чётность. (бит=0 - опрос 1-го датчика, бит=1 - опрос 2-го датчика).
А с диррективой SET, честно говоря незнаком. Наверное пригодится когда нибудь.

В радиотехнике, существует два вида неисправностей-есть контакт там, где его не должно быть никогда и, нет контакта там, где он должен быть постоянно. Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 698
Зарегистрирован: 03.01.07
Откуда: Россия, Рассказово Тамбовская обл
Рейтинг: 3
ссылка на сообщение  Отправлено: 03.01.09 00:39. Заголовок: CLRF ..


" Директива SET эквивалентна директиве EQU за исключением того, что значение присвоенное метке этой директивой, впоследствии может быть изменено другой директивой SET."
После компиляции Вашего текста и перевода в АСМ, вот что получилось. Получается SET не был увиден компилятором. Но это не так, ошибок не было. Просто это почти, EQU.
CLRF Top
BSF Top , 03
BSF Top , 04
BSF Top , 05
BCF Top , 05
BCF Top , 04
BCF Top , 03
Мне кажется так проще и наглядней, то что Вы написали. Но наверно в некоторых случаях без директивы SET не обойтись. Ведь это смена определения в программе. Предлагаю попробывать еще раз все проанализировать и выложить в "Обмене". Многие на нее даже не глядели. Будет ценная информация. Еще один инструмент в руках.

Я знаю, что мало знаю, узнаю больше, и понимаю, что знаю еще меньше. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1087
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 03.01.09 00:58. Заголовок: Век живи, век учись...


Век живи, век учись.
MAZ пишет:

 цитата:
проще и наглядней, то что Вы написали


проще-то проще, но я только что тоже попробовал в MPLAB'е, получается что действительно можно при некоторых операциях память программ сэкономить. Надо еще попробовать, но мне уже понравилось.

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1088
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 03.01.09 01:13. Заголовок: Просто в тексте прог..


Просто в тексте программы работает, но... попробовал вынести в п/программу и усё...
Repeat: 
D set 0 ;
bsf PortB,D ;
nop ;
bcf PortB,D ;
nop ;
bsf PortB,D ;
nop ;
bcf PortB,D ;
; call Q_1 ;

D set(D+2) ;
bsf PortB,D ;
nop ;
bcf PortB,D ;
nop ;
bsf PortB,D ;
nop ;
bcf PortB,D ;
; call Q_1 ;
goto Repeat ;

Q_1:
bsf PortB,D ;
nop ;
bcf PortB,D ;
nop ;
bsf PortB,D ;
nop ;
bcf PortB,D ;
return ;

а я уж в дармовой сыр поверил ... Но законы физики не обманешь ...

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 538
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 1
Фото:
ссылка на сообщение  Отправлено: 03.01.09 01:27. Заголовок: Могу вас всех разоча..


Могу вас всех разочаровать. Директива SET не сработает при опросе таким способом двух датчиков с разных битов порта. Допустим делаете такую конструкцию:
N set 1
подпрограмма опроса датчика DS....
N set N+1
goto подпрограмма опроса датчика DS....
грубо говоря в такой конструкции вторая инструкция сет просто напросто не увидится в контроллере! Ведь память то уже прошита и 1 никак не может быть заменена на 2. Лаб у меня не возражал против такой компиляции, а надо бы возмущаться.
Colorit пишет:

 цитата:
bsf Top,N ; В регистре Top ‘00001000’
N set (N+1) ; Директива MPASM с матем. выражением
bsf Top,N ; В регистре Top ‘00011000’
N set (N+1) ; Директива MPASM с матем. выражением
bsf Top,N ; В регистре Top ‘00111000’
bcf Top,N ; В регистре Top ‘00011000’
N set 4 ; Директива MPASM
bcf Top,N ; В регистре Top ‘00001000’
N set 3 ; Директива MPASM
bcf Top,N ; В регистре Top ‘00000000’


Данная конструкция действительно будет нормально работать, ведь здесь нет вышеуказанного противоречия.
Colorit В вашем случае же проще будет организовать одновременный опрос сразу 2 датчиков. Для этого достаточно считывать сразу весь порт и распихивать данные сразу в два разных регистра. У меня таким образом организован одновременным опрос сразу трех датчиков, и все работает без каких либо проблем. Вот вам и унификация программы. Для большего количества датчиков не пробовал пока, нет необходимости...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 539
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 1
Фото:
ссылка на сообщение  Отправлено: 03.01.09 01:39. Заголовок: Alberto Именно здесь..


Alberto Именно здесь в твоем коде и кроется противоречие в подпрограмме Q_1. У тебя здесь должна прошится 2, при втором проходе компилятор переопределит константу и там будет portb,2. В первой части после сет 0 будет ноль, после сет (д+2) будет действительно 2. а вот после метки Q_1 будет тоже 2. Вот такая физика, компилятор не обманешь. Такое можно сморозить только программно перепрошивая память программ контроллера. В некоторых контроллерах такое возможно, но проще сделать как я сказал выше.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1090
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 03.01.09 02:58. Заголовок: Алексей пишет: Albe..


Алексей пишет:

 цитата:
Alberto Именно здесь в твоем коде и кроется противоречие


я ж и говорю что лоханулся , просто я думал что MPLAB сам создаст два одинаковых куска кода с разными переменными (ведь понятно что всякие там имена/буковки только в MPLAB'е, а в МК нолики с единичками которые не меняются в процессе работы), но увы... нужно работать (набивать коды) ручками .

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 540
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 1
Фото:
ссылка на сообщение  Отправлено: 03.01.09 11:43. Заголовок: Да я в свое время то..


Да я в свое время тоже с этой директивой ковырялся, настолько было заманчиво дармовщинкой попользоваться, но увы, фокусы с ней не прокатывают. Хотя есть идейка, пофокусничать со стеком. Если у нас в стеке только 8 уровней, то почему бы его не расширить? Интересно прокатит доступ к стеку через косвенную адресацию?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 2
Зарегистрирован: 02.01.09
Откуда: Россия, г. Таганрог
Рейтинг: 0
ссылка на сообщение  Отправлено: 03.01.09 22:52. Заголовок: Директива MPASM-SET


Что касается терморегулятора, большое спасибо за совет Алексею! Производя инициализацию, а потом опрашивая сразу два датчика, я экономлю время на многокилометровых паузах. В таком варианте процедура опроса будет явно не в два раза длинее во времени.
По теме директивы «SET» я очень признателен всем кто откликнулся. С большим вниманием и интересом я прочел все ответы. Причина которая меня толкнула к экспериментам над командой (BSF f,b) это попробовать гибкое управление символом «b». Согласно материалам самоучителя я могу поставить число которое соответствует номеру бита или название бита , присвоенное директивой EQU.
Меня терзает мысль, а могу ли я в этом месте (вместо «b») использовать содержимое какого нибудь регистра. Именно содержимое регистра, а не его адрес.
Попытки подставить на это место любой из регистов специального назначения с адресами от 00h до 06h дают положительный результат . К примеру :
BSF PortA, 05 равносильна BSF PortA, PortA
BSF PortA, 03 равносильна BSF PortA, Status и т. д.
Я пробовал определить регистр общего назначения например (Top equ 10h), положить в него число 05 и прогнать в ЛАБе. Компилятор работает с числом 16=10h но никак ни с 05. Подскажите отсюда тоже нет никакого выхода? Честно говоря этот шаг у меня был первым. А вот на втором шаге я дошел до директивы «SET»


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 541
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 1
Фото:
ссылка на сообщение  Отправлено: 03.01.09 23:51. Заголовок: То что вы описываете..


То что вы описываете, реализовать вряд ли получится. Ну а работать с содержимым а не с адресом в некоторых случаях лучше через косвенную адресацию.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 8
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия