Страница 1 из 2
Помогите с портами
Добавлено: Пт апр 27, 2007 06:28:52
Пожиратель AVR
вот напремер в обучалке есть такая програма
.cseg
.org 0
ldi Temp,RamEnd ;инициализация стека
out SPL,Temp
ldi Temp,0b11111111 ;настройка портов
out DDRB,Temp
Begin: ldi Temp,0b00000001 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
ldi Temp,0b00000010 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
ldi Temp,0b00000100 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
ldi Temp,0b00001000 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
ldi Temp,0b00010000 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
ldi Temp,0b00100000 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
ldi Temp,0b01000000 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
ldi Temp,0b10000000 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
rjmp Begin ;поехали по новой!
;****************************************************
;Задержка
Delay: out PortB,Temp
ldi Temp1,0
ldi Temp2,0
ldi Temp3,10
Loop: dec Temp1
brne Loop
dec Temp2
brne Loop
dec Temp3
brne Loop
ret
Там используется токо порт B.
Вот хотелось бы чтобы когда на порте B бежит огонек ,с порте D тоже чтонить происходило.
Помогите новичку разобраться как сразу с двумя портами работать

Добавлено: Пт апр 27, 2007 10:40:11
tych
Так же как и с одним.
Добавлено: Пт апр 27, 2007 10:44:24
ARV
Во первых, советую программу упростить примерно так:
Код: Выделить всё
Begin:
ldi Temp, 1
loop:
rcall Delay
rol Temp ; будем единицу в Temp сдвигать
rjmp loop
Зачем 100 раз повторять то, что можно сделать автоматически?
Теперь: что именно с другим портом ты собрался делать?
Если тоже просто что-то выводить одновременно с портом В - заведи другую переменную, например Temp2, заноси в нее что надо и выводи в PortB в своей подпрограмме Delay...
А вот если надо делать не одновременно - тогда сложнее...
Добавлено: Пт апр 27, 2007 11:35:08
Пожиратель AVR
у меня какойто глюк сначала выполняется первая програма бегуших огней на порте B после неё начанает выполнятся вторая на порт D но проблема она выводится в оба порта микроконтролера а не токо в D и первый кусок програмы больше невыводится (нажелезе непробовал делал в PROTEUSE)
Добавлено: Пт апр 27, 2007 11:49:11
Пожиратель AVR
И где надо ставить настройку порта D Перед первой програмой или после
.cseg
.org 0
ldi Temp,RamEnd ;инициализация стека
out SPL,Temp
ldi Temp,0b11111111 ;настройка портов
out DDRB,Temp
ldi Temp,0b10101010 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
.......
ldi Temp,0b10010010 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
Суда ли писать настройку порта?????
ldi Temp2,0b11111111 ;настройка портов
out DDRD,Temp
ldi Temp2,0b10101010 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
..........
ldi Temp2,0b10101010 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
;****************************************************
;Задержка
Delay: out PortB,Temp
ldi Temp1,0
ldi Temp2,0
ldi Temp3,10
Loop: dec Temp1
brne Loop
dec Temp2
brne Loop
dec Temp3
brne Loop
ret
Правильно скажите ???
Если нет то напишите как надо правильно писать заранее благодарен

Добавлено: Пт апр 27, 2007 11:58:15
tych
Иван.паяльшик писал(а):И где надо ставить настройку порта D Перед первой програмой или после
Настраивать порт можно и нужно в любом месте программы где это требуется.
По ходу программы вам возможно понадобится изменить режим работы ножки порта.
Эту запись в обучалке
Код: Выделить всё
ldi Temp,0b11111111 ;настройка портов
out DDRB,Temp
я предлагал исправить чтоб было понятней
к чему относится комментарий.
Например так:
Код: Выделить всё
;настройка порта В
ldi Temp,0b11111111 ; загрузить в temp число 255
out DDRB,Temp ; загрузить число из temp в регистр
;управления режимом работы выводов порта В
теперь все выводы порта В стали активными выходами - что это такое смотри по линку выше.
Теперь вы можете конфигурировать следующий порт
исправил :
Код: Выделить всё
;настройка порта D
ldi Temp,0b00001111 ; загрузить в temp число 0Fh
out DDRD,Temp ; загрузить число из temp в регистр
;управления режимом работы выводов порта D
теперь PD0_PD3 выходы а PD4_PD7 входы.
Добавлено: Пт апр 27, 2007 12:04:20
tych
Ели не настраивать порты то в них будут числа по-умолчанию - в даташите эти числа указаны - посмотрите в конце дш таблицу регистров.
И еще вот этот шаблон:
http://www.radiokot.ru/forum/viewtopic.php?t=2273
Добавлено: Пт апр 27, 2007 12:14:19
Пожиратель AVR
Вот сейчас я сделал так ну почемуто у меня выплняется токо первая часть програмы а вторая неначинается
новый текст.
ldi Temp,RamEnd ;инициализация стека
out SPL,Temp
ldi Temp,0b11111111 ;настройка портов
out DDRB,Temp
Begin: ldi Temp,0b00000001 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
...........
ldi Temp,0b10000000 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
rjmp Begin ;поехали по новой!
ldi Temp1,0b11111111 ;настройка портов
out DDRD,Temp1
Begin2: ldi Temp1,0b00010001 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
..............
ldi Temp,0b10011100 ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержк
rjmp Begin2 ;поехали по новой!
;****************************************************
;Задержка
Delay: out PortB,Temp
out PortD,Temp1
ldi Temp2,0
ldi Temp3,0
ldi Temp4,10
Loop: dec Temp2
brne Loop
dec Temp3
brne Loop
dec Temp4
brne Loop
ret
почему она неработает??
Добавлено: Пт апр 27, 2007 12:24:41
Пожиратель AVR
а почему ты написал настройка порта D ба сам написал B?????
;настройка порта D
ldi Temp,0b00001111 ; загрузить в temp число 0Fh
out DDRB,Temp ; загрузить число из temp в регистр
;управления режимом работы выводов порта D
В DDRB должна стоять буква D мы же настраиваем на вывод порт D ?а не B
Добавлено: Пт апр 27, 2007 12:54:42
tych
Ошибочка-закладочка для проверки бдительности и читаемости.
Вижу ты уже "въехал" - я рад

Добавлено: Пт апр 27, 2007 12:59:11
ARV
Обрати внимание, что ниже команды
rjmp Begin программа никогда не пойдет, никаких "поехали по новой" не будет! Поэтому у тебя "вторая часть программы" и не выполняется -
rjmp Begin мешает. Убери его - тогда выполнится сначала первая часть, потом вторая

Добавлено: Пт апр 27, 2007 13:14:19
tych
Иван.паяльшик, если бы ты заменил БЕСТОЛКОВЫЙ комментарий:
На имеющий смысл :
Наверняка сразу бы понял как будет выполнятся программа.
=====
Пиши комментарии точно описывающие действия программы !
Добавлено: Пт апр 27, 2007 13:42:50
Пожиратель AVR
Я убрал команду rjmp Begin и само begin,begin 2 я тоже убрал но у меня теперь проблема , а суть в том что у меня сначала выполняется первая програма на порте B а потом вторая на порте D Но при выполнении програмы на порте D она её выводит и на порт B почему?
И первая програма больше невыполняется почему вот незадача стоко ошибок .Мож кто поможет для понятия работы портов написать бегуший огонек токо чтобы он работал с портом B,D и на них огонек бежал каждый со своей програмой, а не вместе от одной .
Если кто шас незанет накалякайте прогу чтобы наконец разобраться как все это работает

Добавлено: Пт апр 27, 2007 14:09:35
tych
Иван.паяльшик писал(а): почему?
ПАФТАРЯЮ !
Напишите комментарий к каждой строке программы - что она делает.
Теперь двигайтесь по программе - вы увидите как она выполняется.
Либо в симуляторе VMLAB запустите.
Добавлено: Пт апр 27, 2007 16:33:37
Пожиратель AVR
Ну ты интересный я откуда могу знать все команды и как ими пользоваться я занимаюсь програмированием 1 неделю и я еше сам немогу полностью знать как и что выполняется в програме вот я и прошу чтобы ктонить для примера написал прогу как я говорил в преведушем сообшении.
Добавлено: Пт апр 27, 2007 16:42:58
tych
Поэтому я и говорю вам в 3-й раз - Напишите что делает каждая строка программы !
А как иначе вы собираетесь учится ???
Естественно для этого вам нужно прочитать что команды означают.
Советую вам скачать и читать книги - вот библиотека целая для скачивания:
http://www.roboforum.ru/viewtopic.htm?p=28601
Добавлено: Пт апр 27, 2007 16:44:04
tych
Например:
Баранов В.Н.
Применение микроконтроллеров AVR: схемы, алгоритмы, программы.
Гребнев В.В.
Микроконтроллеры семейства AVR фирмы ATMEL.
А.В. Евстифеев.
Микроконтроллеры AVR семейств Tiny и Mega фирмы Atmel
Добавлено: Пт апр 27, 2007 16:52:51
Пожиратель AVR
Добавлено: Пт апр 27, 2007 17:00:29
tych
Дак программ - примеров МОРЕ ! И в тех книгах и в апноутах и в интернете и в обучалке. Выбирай любую.
Добавлено: Сб апр 28, 2007 08:11:37
Пожиратель AVR
Примера видно я недождусь
