Помогите с портами

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Чт янв 11, 2007 12:14:33

Сообщение Пожиратель 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 тоже чтонить происходило.
Помогите новичку разобраться как сразу с двумя портами работать :))
Контактная информация:
Реклама
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Так же как и с одним.
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18785
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Во первых, советую программу упростить примерно так:

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

Begin:
     ldi   Temp, 1
loop:
     rcall Delay
     rol   Temp ; будем единицу в Temp сдвигать 
     rjmp  loop
Зачем 100 раз повторять то, что можно сделать автоматически?

Теперь: что именно с другим портом ты собрался делать?
Если тоже просто что-то выводить одновременно с портом В - заведи другую переменную, например Temp2, заноси в нее что надо и выводи в PortB в своей подпрограмме Delay...
А вот если надо делать не одновременно - тогда сложнее...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Чт янв 11, 2007 12:14:33

Сообщение Пожиратель AVR »

у меня какойто глюк сначала выполняется первая програма бегуших огней на порте B после неё начанает выполнятся вторая на порт D но проблема она выводится в оба порта микроконтролера а не токо в D и первый кусок програмы больше невыводится (нажелезе непробовал делал в PROTEUSE)
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Чт янв 11, 2007 12:14:33

Сообщение Пожиратель 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

Правильно скажите ??? :idea:

Если нет то напишите как надо правильно писать заранее благодарен :))
Контактная информация:
Реклама
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение 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 входы.
Последний раз редактировалось tych Пт апр 27, 2007 13:01:22, всего редактировалось 1 раз.
Контактная информация:
Реклама
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Ели не настраивать порты то в них будут числа по-умолчанию - в даташите эти числа указаны - посмотрите в конце дш таблицу регистров.

И еще вот этот шаблон:
http://www.radiokot.ru/forum/viewtopic.php?t=2273
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Чт янв 11, 2007 12:14:33

Сообщение Пожиратель 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

почему она неработает??
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Чт янв 11, 2007 12:14:33

Сообщение Пожиратель AVR »

а почему ты написал настройка порта D ба сам написал B?????


;настройка порта D

ldi Temp,0b00001111 ; загрузить в temp число 0Fh
out DDRB,Temp ; загрузить число из temp в регистр
;управления режимом работы выводов порта D

В DDRB должна стоять буква D мы же настраиваем на вывод порт D ?а не B
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Ошибочка-закладочка для проверки бдительности и читаемости.

Вижу ты уже "въехал" - я рад :lol:
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18785
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Иван.паяльшик, если бы ты заменил БЕСТОЛКОВЫЙ комментарий:

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

rjmp Begin ;поехали по новой! 
На имеющий смысл :

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

rjmp Begin  ; перейти на метку - Begin 
Наверняка сразу бы понял как будет выполнятся программа.

=====

Пиши комментарии точно описывающие действия программы !
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Чт янв 11, 2007 12:14:33

Сообщение Пожиратель AVR »

Я убрал команду rjmp Begin и само begin,begin 2 я тоже убрал но у меня теперь проблема , а суть в том что у меня сначала выполняется первая програма на порте B а потом вторая на порте D Но при выполнении програмы на порте D она её выводит и на порт B почему?
И первая програма больше невыполняется почему вот незадача стоко ошибок .Мож кто поможет для понятия работы портов написать бегуший огонек токо чтобы он работал с портом B,D и на них огонек бежал каждый со своей програмой, а не вместе от одной .
Если кто шас незанет накалякайте прогу чтобы наконец разобраться как все это работает :))
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Иван.паяльшик писал(а): почему?
ПАФТАРЯЮ !

Напишите комментарий к каждой строке программы - что она делает.

Теперь двигайтесь по программе - вы увидите как она выполняется.

Либо в симуляторе VMLAB запустите.
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Чт янв 11, 2007 12:14:33

Сообщение Пожиратель AVR »

Ну ты интересный я откуда могу знать все команды и как ими пользоваться я занимаюсь програмированием 1 неделю и я еше сам немогу полностью знать как и что выполняется в програме вот я и прошу чтобы ктонить для примера написал прогу как я говорил в преведушем сообшении.
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Поэтому я и говорю вам в 3-й раз - Напишите что делает каждая строка программы !

А как иначе вы собираетесь учится ???

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

Советую вам скачать и читать книги - вот библиотека целая для скачивания: http://www.roboforum.ru/viewtopic.htm?p=28601
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Например:

Баранов В.Н.
Применение микроконтроллеров AVR: схемы, алгоритмы, программы.

Гребнев В.В.
Микроконтроллеры семейства AVR фирмы ATMEL.

А.В. Евстифеев.
Микроконтроллеры AVR семейств Tiny и Mega фирмы Atmel
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Чт янв 11, 2007 12:14:33

Сообщение Пожиратель AVR »

Ну может всетаки ктонить напишит для премера програму :)) :)) :)) :))
Последний раз редактировалось Пожиратель AVR Сб апр 28, 2007 07:58:57, всего редактировалось 1 раз.
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Дак программ - примеров МОРЕ ! И в тех книгах и в апноутах и в интернете и в обучалке. Выбирай любую.
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Чт янв 11, 2007 12:14:33

Сообщение Пожиратель AVR »

Примера видно я недождусь :cry:
Контактная информация:
Закрыто

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