|
|
  |
Присваивание имени биту порта на ASM |
|
|
|
Jan 24 2008, 17:53
|

Знающий
   
Группа: Свой
Сообщений: 562
Регистрация: 25-07-06
Из: Зеленоград, Новосибирск
Пользователь №: 19 088

|
Цитата(=GM= @ Jan 24 2008, 21:55)  Попробуйте вот так
.equ ТХС=6 Насколько я понял под TXC вы подразумеваете имя, а 6 - бит. Не понятно как ассемблер определит какому регистру принадлежит этот бит, кстати в inc файлах делают также как вы: .equ PORTA1 = 1 ; Port A Data Register bit 1 Поясните, пожалуйста. Цитата(Qwertty @ Jan 24 2008, 22:30)  AVRASM2 поддерживает сишныйе директивы препроцессора. Так что можно применять #define Name PORTA,5 Ваш способ работает, спасибо.
--------------------
"Отсутствие вашей судимости - это не ваша заслуга, а наша недоработка." Ф.Дзержинский.
|
|
|
|
|
Jan 24 2008, 18:35
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Turnaev Sergey @ Jan 24 2008, 21:53)  Не понятно как ассемблер определит какому регистру принадлежит этот бит, кстати в inc файлах делают также как вы: .equ PORTA1 = 1 ; Port A Data Register bit 1 Поясните, пожалуйста. А он и не связан с портом. После х51 я тоже страдал, а потом выяснил, что это можно даже использовать. Редко правда. например in xPortA,PORTA sbrs xPorta, RTS Используется например при совтовом ШИМовании и других операциях, когда данные по портам просчитываются какое-то время и собираются в образе портов, а образы портов выводятся в порт по таймеру.
|
|
|
|
|
Jan 25 2008, 09:43
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(Turnaev Sergey @ Jan 25 2008, 01:53)  Насколько я понял под TXC вы подразумеваете имя, а 6 - бит. Не понятно как ассемблер определит какому регистру принадлежит этот бит Бит может принадлежать любому регистру. Ведь символическое имя бита, в данном примере TXC, это всего лишь номер разряда, в нашем случае 6. Разряд 6 может также принадлежать любому регистру, а вот с каким именно работать, указывает программист. Например: Код .equ KeyLine = 7
.... cbi DDRA, KeyLine; настроить линию порта, к которой подключена кнопка, на вход
_scan_key: sbic PINA, KeyLine; если кнопку нажали, то на линии лог. 0, пропустить одну команду и идти дальше rjmp _scan_key; иначе, снова на опрос кнопки .... Как видите, один и тот же бит используется для разных регистров. И это очень удобно. Разумеется это лишь частный случай, бит может использоваться и для одного регистра.
--------------------
Выбор.
|
|
|
|
|
Jan 25 2008, 09:57
|

Местный
  
Группа: Свой
Сообщений: 226
Регистрация: 25-03-05
Из: Беларусь
Пользователь №: 3 672

|
Вот пример моего определения выводов порта: Код ;**************** Определение портов:******************************* ; порт D .equ CONTROL = PORTD ; ПОРТ ВЫВОДА УПРАВЛЯЮЩИХ СИГНАЛОВ .equ CONTROL_DIR = CONTROL-1; ПОРТ ВЫВОДА УПРАВЛЯЮЩИХ СИГНАЛОВ .equ CONTROL_IN = CONTROL-2; ПОРТ ЧТЕНИЯ УПРАВЛЯЮЩИХ СИГНАЛОВ ;.equ TCS = 0 ; выход сигнала выбора микросхемы памяти ;.equ T45 = 1 ; вход сигнала BUSY от микросхемы памяти .equ UCS = 2 ; выход выбора источника для данных (0 -- PDIUSB, 1 -- LCD) .equ UIN = 3 ; вход сигнала прераывния от PDIUSB .equ URD = 4 ; выход строба чтения для PDIUSB .equ UWR = 5 ; выход строба записи для PDIUSB .equ UA0 = 6 ; выход сигнала управления для PDIUSB
--------------------
Ничто так не ограничивает полет мысли программиста, как компилятор
|
|
|
|
Guest_=VRA=_*
|
Jan 25 2008, 10:51
|
Guests

|
Чтобы не путать теплое с мягким, нужно раз и навсегда запомнить следующее:
.equ - численное присваивание, поэтому .equ NAME = PORTA.0 не имеет смысла, т.к. PORTA.0 не может быть выражено одним числом. Кроме того, синтаксически сама конструкция PORTA.0 некорректна для AVR Assembler(2).
#define Name PORTA,5 - текстовая подстановка, после которой команда sbi NAME будет трактоваться как sbi PORTA,5, что в этом конкретном случае автору корневого поста и требовалось.
|
|
|
|
Guest_=VRA=_*
|
Jan 25 2008, 15:49
|
Guests

|
Цитата .equ KeyLine = 7 по сути является присваиванием имени константе Строго наоборот - объявлением (созданием) символического имени _И_ присвоением ему численного значения
|
|
|
|
|
Jan 26 2008, 11:42
|
Местный
  
Группа: Свой
Сообщений: 303
Регистрация: 3-03-05
Пользователь №: 3 044

|
А я так делаю в отдельном месте или файле настроек: Код ;=== Светодиод #define bLed 2 #define prt_Led portC,bLed #define ddr_Led ddrC,bLed #define pin_Led pinC,bLed А потом: Код sbi ddr_Led cbi prt_Led
sbis pin_Led Легко перестраиваться, если светодиод по портам или кристалам бегать начал
--------------------
Опыт - чудесная вещь: легко использовать, можно продать, трудно пропить.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|