1) да
2),3) пишется 0b, in temp,pd0 работать не будет, командой in можно заслать регистр в регистр(общего назначения), например так in temp,pind
4) да
roboforum.ruТехнический форум по робототехнике. |
|
|
не понял. у меня есть ATmega8L (насколько я понимаю, порты у неё идентичны с ATmega8), там есть 8 портов D (с PD0 по PD7), 8 портов B (с PB0 по PB7) и 7 портов C (с PC0 по PC6). Так вот, мне нужно использовать порты D и B.2),3) пишется 0b, in temp,pd0 работать не будет
Спасибо, помню её (давно читал), сегодня вечером засяду снова читать.Ответы на все Ваши вопросы есть в книге:
Джона Мортона Микроконтроллеры AVR Вводный курс. Там же есть примеры, упражнения, описания мк-роллеров и великолепные примеры программ на асм.
ldi In_Screen,1 ; константу 1 в регистр In_Screen
in Temp,PD0 ; получаем данные с ножки PD0
cp In_Screen,Temp ; сравниваем
breq 123 ; если 0, то 123
jmp 321 ; иначе 321
Неужели чтобы узнать данные с одной ножки/бита придётся получать данные со всех ножек этого порта
sbis PIND,0 ; пропускаем следующую команду, если нулевой бит в регистре PIND равен единице
очень интересно, спасибо. Значит, если мне нужно сделать 123, в случае если на ножке PD5 находится 0, то выглядеть это будет так:Можно сделать проще
sbis PIND,5 ; получаем данные с ножки PD5
jmp 123 ; если 0, то 123
jmp 321 ; иначе 321
Мне нужно, чтобы происходило определённое действие в случае замыкания контактов. Как сделать программное размыкание при физическом замыкании контактов я не знаю.Затея же с "соприкасающимися ножками" довольно странная.
Во-первых, почему бы вам не коротить ногу на землю (а не на соседнюю ногу).
Во-вторых, лучше ловить ноль, а не единицу. Так можно использовать встроенную подтяжку.
Когда вы проверяете уровень на оторванной от всего ноге (просто висящей в воздухе),
то вы не сможете рассчитывать на какой-то определенный уровень - там может оказаться как ноль
так и единица в зависимости от погоды на луне. Поэтому стОит использовать подтяжку,
которая будет притягивать высокоомную ногу куда-нибудь.
Подтяжки есть встроенные в проц и они тянут вверх - к единице.
Мне нужно, чтобы происходило определённое действие в случае замыкания контактов
расскажите подробнее об этом, пожалуйста, и как это реализовать через встроенные возможности МК.
Я себе слабо представляю что МК сможет понять, если на ноге будет 1, который будет замыкаться на землю. Где здесь ввод-то?
Значит, если мне нужно сделать 123, в случае если на ножке PD5 находится 0, то выглядеть это будет так:1. Настраиваете ногу на вход с подтяжкой:
- в регистр PORT (в нужный битик) кладем единичку
- в регистр DDR (в тот же битик) кладем нолик
2. Проверяете сотсояние ноги
- читаете нужный битик в регистре PIN
ldi Temp,0d00000000
out DDRD,Temp
ldi Temp,0d00100000
out PortD,Temp
sbis PIND,5 ; получаем данные с ножки PD5
jmp 123 ; если 0, то 123 (есть замыкание)
jmp 321 ; иначе 321 (нет замыкания)
А если взяться голыми руками (может быть мокрыми) только за ножку порта PD5, то тоже будет замыкание (0)?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4