реклама на сайте
подробности

 
 
> С ввода на вывод, at2313
what_you_want
сообщение Oct 15 2010, 14:24
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 15-10-10
Пользователь №: 60 186



Здравствуйте, стал разбираться с программой Isis для эмулирование МК, столкнулся со странной проблемой. Код:
CODE
.cseg
.org 0
ldi temp,RamEnd ;инициализация стека
out SPL,temp

ldi temp,0xFF ;настройка порта D на вывод
out DDRD,temp

ldi temp,0x00 ;настройка порта B на ввод
out DDRB,temp


Begin:

clr temp1 ;обнуляем регистр temp1
in temp1, PINB ;записываем данные из порта B в темп1
rcall Delay ;задержка
out PORTD, temp1 ;выводим данные в порт D
rcall Delay ;задержка
rjmp Begin ;сначала

; задержка

Delay:
ldi Temp3,0
ldi Temp4,0

Loop:
dec Temp3
brne Loop

dec Temp4
brne Loop

ret


Программа простая, в зависимости от нажатых кнопочек читаем единицы-нули с порта B и передаем их на порт D. Но тем не менее, на выходе всегда горят единицы, вне зависимости от нажатых кнопок. Что я делаю не так?

Сообщение отредактировал what_you_want - Oct 15 2010, 14:28
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
ut1wpr
сообщение Oct 15 2010, 15:07
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 98
Регистрация: 20-06-05
Пользователь №: 6 150



Что значит "нажатых кнопочек"? Входы порта B куда замыкаются при нажатии? Это же не очевидно, надо указывать. Если замыкаем на землю, не мешает включить подтягиваюшие резисторы.
Зачем такая большая задержка. Да и вообще, зачем она?
Зачем обнулять временный регистр temp2, если после следующей команды он примет новое значение?
Проверить ещё раз внимательно схему. Кнопко-ногодрыгание должно работать без особых проблем.
Если нет "хомутов".
Код
MainLoop:
  in temp, PINB
  nop                            ; Если очень уж нужна задержка...
  out PORTB, temp
  rjmp MainLoop


Сообщение отредактировал IgorKossak - Oct 15 2010, 22:08
Go to the top of the page
 
+Quote Post
SergeyGrig
сообщение Oct 15 2010, 19:40
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 25-03-10
Из: Москва
Пользователь №: 56 197



Позвольте поправить предыдущего отвечающего: в MainLoop должно быть - out PortD,temp (дабы автор темы не принял как должное).
Подтянуть входа "внутренними" средствами:

после

ldi temp,0x00 ;настройка порта B на ввод
out DDRB,temp

поставить:
ldi temp,0xFF
out PortD,temp
Go to the top of the page
 
+Quote Post
what_you_want
сообщение Oct 15 2010, 20:23
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 15-10-10
Пользователь №: 60 186



все заработало, ошибка была в схеме.


Цитата(SergeyGrig @ Oct 15 2010, 22:40) *
ldi temp,0x00 ;настройка порта B на ввод


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

еще возник вопрос по команде bld

bld temp, 0 ; записываем в нулевой бит регистра temp значение из T

А остальные биты регистра temp чем заполнены? нулями по умолчанию?

Go to the top of the page
 
+Quote Post
tazik
сообщение Oct 16 2010, 04:44
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691



Цитата(what_you_want @ Oct 16 2010, 04:23) *
А остальные биты регистра temp чем заполнены? нулями по умолчанию?


остальные биты не меняются
Go to the top of the page
 
+Quote Post
what_you_want
сообщение Oct 16 2010, 08:46
Сообщение #6





Группа: Новичок
Сообщений: 3
Регистрация: 15-10-10
Пользователь №: 60 186



Цитата(tazik @ Oct 16 2010, 07:44) *
остальные биты не меняются


А если до этого регистр temp не был определен?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 16 2010, 09:16
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(what_you_want @ Oct 16 2010, 12:46) *
А если до этого регистр temp не был определен?
Включаем мозг и после целой секунды размышлений приходим к логичному выводу - остальные биты будут иметь
прежнее значение что и до инструкции BLD (неопределённое в вашем случае).

Начинающему AVR'щику посвящается:
http://www.atmel.com/dyn/resources/prod_do...nts/doc0856.pdf
http://www.atmel.com/dyn/resources/prod_do...nts/doc1022.pdf


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 15:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01406 секунд с 7
ELECTRONIX ©2004-2016