как в asm занести значение регистра в один пин порта?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

Atmega8

командой in я могу считать в регистр R16 с пина PB3 значение логического уровня, а как теперь с R16 передать это значение, ну например, в PB4?
Реклама
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Здравствуйте. Может быть так

CLR R16
OUT DDRB,R16 ; порт В на ввод

IN R16,PINB
BST R16,6
BLD R16,7

PUSH R16
SER R16
OUT DDRB,R16 ; порт В на вывод
POP R16

OUT PORTB,R16
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

:) команды то какие малознакомые... а не затруднит комментари напротив основных строчек отписать?
Встал на лапы
Аватара пользователя
Сообщения: 115
Зарегистрирован: Вс апр 20, 2008 16:54:13
Откуда: Украина, Чернигов

Сообщение Callous »

2 Alexeus
Хотелось бы поинтересоватся, а как вы хотите затолкать 8 разрадное число в 1 пин????? Либо я не понимаю чегото. Если в порт то тогда akl правильно все написал. Если же "а как теперь с R16 передать это значение, ну например, в PB4?" имеется ввиду последовательная передача то это совсем другое. Уточните пожалуста.
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

да вот не 8 разрядное я хочу затолкать... а лог. уровень только с одного входа/пина.

значит на PB3 (вход) есть некий лог. уровень, пусть это будет высокий лог. уровень- "1", могу я его записать в R16 типа in R16,PB3 или нет? как этот лог. уровень будет представлен в регистре R16- как "1" или как "00000001" (тогда да, получается 8разрядов...)

ну а потом я из регистра хотел вывести, например на PB4 (ну светодиод у меня там подключен. альтернативные решения не нужно предлагать :) нужно вот такой пример рассмотреть)
Реклама
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Alexeus писал(а):да вот не 8 разрядное я хочу затолкать... а лог. уровень только с одного входа/пина.

значит на PB3 (вход) есть некий лог. уровень, пусть это будет высокий лог. уровень- "1", могу я его записать в R16 типа in R16,PB3 или нет? как этот лог. уровень будет представлен в регистре R16- как "1" или как "00000001" (тогда да, получается 8разрядов...)

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

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

in R16,PINB
далее в регистре r16 , бит, соответсвующий PB3 (скорее всего бит № 3 если считать с 0) будет иметь такое же логическое состояние как ваш пин. Т. е если в PINB3 была лог. 1, то и в регистре R16 бит № 3 будет равен 1.
Вы наверное спросите, а почему у меня компилируется с такой командой in R16,PB3? Отвечу. Компилятор не знает что такое PB3, вместо этого символьного значения подставляется число, определенное в файле m8def.inc, уверен на 90% что это число 3, т. е. командой выполняется команда in R16,PB3 то вы читаете в R16 регистр ввода - вывода с номером 3, т. е. TWDR
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

а если "in R16,pinc" -что будет в регистре, ведь порт "С" семибитный, а регистр 8ми...
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Alexeus писал(а):а если "in R16,pinc" -что будет в регистре, ведь порт "С" семибитный, а регистр 8ми...
Седьмой бит скорее всего прочитается как 0, в любом случае не стоит обращать на него внимания. (Главное, что регистр R16 имеет кол-во бит не меньшее чем PINC).
Вымогатель припоя
Аватара пользователя
Сообщения: 690
Зарегистрирован: Вс мар 04, 2007 01:17:12

Сообщение Alexeus »

Например у меня 7пинов порта"Б" сконфигурирован на выход и только пин порта "Б", допустим PB4, на вход... как мне в асме (пример кода) считать значение именно PB4? или считать весь порт со всей мишурой, а потом как то вычислить PB4...
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Можно так:
SBIC PINB,4
RJMP PINB4_SET
PINB4_CLR:
NOP
.
.
.
.
PINB4_SET:
NOP
.
.
.
.
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Alexeus писал(а):Например у меня 7пинов порта"Б" сконфигурирован на выход и только пин порта "Б", допустим PB4, на вход... как мне в асме (пример кода) считать значение именно PB4? или считать весь порт со всей мишурой, а потом как то вычислить PB4...
А зачем вычислять то? Можно так, как вам уже предложили, а можно так:

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

in r16, PINB
далее по биту с номером PB4, принимать решение
или

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

in r16, PINB ; читаем
bst r16, PB4; копируем интересующий нас бит в бит T регистра SREG
; далее можно принять решение по T  или
bld anyreg, anybit ; (0<anybit<7) - копируем из бита T в любой бит любого РОН (r0-r31)
Мучитель микросхем
Аватара пользователя
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

in tmp, PinB
andi tmp, 0b00010000
(если пин был сброшен, то tmp=0, если установлен, то 0х10 (0b00010000))
PS. Чот народ под новый год мудрить начал... :))
Нашел транзистор. Понюхал.
Сообщения: 151
Зарегистрирован: Пн сен 01, 2008 14:49:03
Откуда: Казахстан

Сообщение YurkaM »

Pooher писал(а):Чот народ под новый год мудрить начал... :))
Действительно :)))
Можно вообще не читать PinB, а сразу проверять нужный пин:

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

sbic PINB,4 ; если В4=0, то следующую команду пропускаем
rjmp _B4set ; переход если B4=1
...........; здесь работаем если B4=0
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»