Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AVR_ASM, почему прекращается цикл? 
:(
    Опции темы
pettimm
Дата 13.10.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.9.2005

Репутация: 1
Всего: 1



 Здравствуйте,уважаемые програмисты,братья и сестры!
Подскажите пожалуйста почему не работает цыкл с метки Start2 ,если обнулять таймер0 (ldi temp,0x00;out TCNT0,temp)сразу после метки  Start2, проверял много раз на реальном контроллере Atmega8 . Спасибо.Петр.

.device     atmega8
.nolist
.include  "m8def.inc"
.list

; Îáúÿâëåíèÿ

.def  temp=  r16
.def  temp1=  r18

Init  :      ;Îïðåäåëåíèå  âõîäîâ\âûõîäîâ  è  èõ íà÷àëüíûõ çíà÷åíèé

                      ;Êîíôèãóðàöèÿ ïîðòîâ
;êîíôèãóðàöèÿ ïîðòà Â
Ldi  temp , 0b00111000
Out  DDRB , temp
; è  èõ íà÷àëüíûõ çíà÷åíèé
Ldi  temp , 0b00000000
Out  PORTB , temp
;êîíôèãóðàöèÿ ïîðòà C
Ldi  temp , 0b00111110
Out  DDRC , temp
; è  èõ íà÷àëüíûõ çíà÷åíèé
Ldi  temp , 0b00001111
Out  PORTC , temp
     ;êîíôèãóðàöèÿ ïîðòà D
Ldi  temp , 0b11111011
Out  DDRD , temp
Ldi  temp , 0b01000100
Out  PORTD , temp

Rjmp  Start

; Îáðàáîòêà ïðåðûâàíèé

; ******

Start :              ;Íà÷àëî ïðîãðàììû

;èíèöèàëèçàöèÿ ñòåêà

ldi   temp,low (RAMEND)
out   SPL,temp
ldi   temp,high (RAMEND)
out   SPh,temp

on:
;êîíôèãóðàöèÿ òàéìåðà  sk/1024= 6347,65625 ðàç â ñåê.
ldi temp,0b00000101

out tccr0,temp


Start2:
;ldi temp,0x00
 ;out TCNT0,temp
in temp,TCNT0
cpi temp,48
breq svet1
 
 rjmp Start2

svet1:
       ldi temp1,0b00001000
       out portd,temp1

ldi temp,0x00
 out TCNT0,temp
 
Start3:
in temp,TCNT0

cpi temp,48
breq svet2
rjmp Start3
svet2:
ldi temp1,0b00000000
       out portd,temp1

ldi temp,0x00
 out TCNT0,temp

rjmp Start2


Это сообщение отредактировал(а) pettimm - 13.10.2007, 22:32
PM MAIL   Вверх
cardinal
Дата 13.10.2007, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



1. Пользуйся кнопкой "код".

2. Значит срабатывает:
Код

breq svet1


А зачем ты на ассемблере пишешь (если можно AVR Studio + GCC)?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
pettimm
Дата 13.10.2007, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.9.2005

Репутация: 1
Всего: 1




Здравствуйте ,Bradypus ! Спасибо за ответ, я пишу в AVR Studio4 ,но будьте добры подскажите что означает GCC ? Опыта маловато...  Ассемблер мне нравится...

Реально вижу по светодиоду(+наушником слышу генератор):
если " ldi temp,0x00  , out TCNT0,temp "    заремляно, то срабатывает  "breq svet1" ,
а если нет - то не срабатывает (светодиод не горит).
Спасибо Петр.
 
Start2:
;ldi temp,0x00         
 ;out TCNT0,temp
in temp,TCNT0
cpi temp,48
breq svet1
 
 rjmp Start2

svet1:
       ldi temp1,0b00001000
       out portd,temp1

ldi temp,0x00
 out TCNT0,temp
 

Это сообщение отредактировал(а) pettimm - 13.10.2007, 23:52
PM MAIL   Вверх
AVR32
Дата 14.10.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.4.2007
Где: СПб

Репутация: 1
Всего: 1



Замени инструкции breq на brsh
PM MAIL WWW   Вверх
pettimm
Дата 14.10.2007, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.9.2005

Репутация: 1
Всего: 1



Не помогло ... ложусь спать,до завтра ... у нас 00:45 ,Украина.
PM MAIL   Вверх
cardinal
Дата 14.10.2007, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Смотришь тут
http://winavr.sourceforge.net/
, качаешь, создаешь С проект в AVR Studio и лишаешься многих проблем.

И еще раз! Обрати (со мной тоже можно на ты) внимание на кнопку "код" над сообщением!!!

А ник у меня cardinal (а bradypus - это статус)... smile 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
AVR32
Дата 14.10.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.4.2007
Где: СПб

Репутация: 1
Всего: 1



Передвинь метку Start2
Код

Start2:
ldi temp,0x00
out TCNT0,temp

на другое место
Код

ldi temp,0x00
out TCNT0,temp
Start2:

Иначе ты постоянно в цикле обнуляешь таймер
PM MAIL WWW   Вверх
pettimm
Дата 15.10.2007, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.9.2005

Репутация: 1
Всего: 1




Спасибо cardinalu  за совет  , а  avr32  ответил правильно  но сейчас другая проблема возникла : когда обнуляю таймер  в метке "Perehod1" то тоже прекращается работа программы , а без обнуления в метке "Perehod1, все работает. Обнуление нужно для точности. Подскажите пожалуйста причину... Спасибо.

                    ldi r19,0xff
                   ldi r20,0x88
Pausa15sek:

 in temp,TCNT0
     cpi temp,0x88
breq Perehod1
rjmp Pausa15sek

Perehod1:
   dec r19
   cpi r19,0
   ;ldi temp,0x00
 ;out TCNT0,temp
   brne Pausa15sek

    dec r20
    cpi r20,0
    brne Pausa15sek

rjmp Generator

Generator:

in temp,TCNT0
cpi temp,48
brsh svet1
 
 rjmp Generator

svet1:
       ldi temp1,0b00001000
       out portd,temp1

ldi temp,0x00
 out TCNT0,temp
 
Start3:
in temp,TCNT0

cpi temp,48
breq svet2
rjmp Start3
svet2:
ldi temp1,0b00000000
       out portd,temp1

ldi temp,0x00
 out TCNT0,temp

rjmp Generator
PM MAIL   Вверх
AVR32
Дата 15.10.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 28.4.2007
Где: СПб

Репутация: 1
Всего: 1



Опять те же грабли, обнуляешь таймер в цикле!
Код

Perehod1:
   dec r19
   cpi r19,0
   ;ldi temp,0x00
 ;out TCNT0,temp
   brne Pausa15sek

    dec r20
    cpi r20,0
    brne Pausa15sek

rjmp Generator

Generator:

Сделай так
Код

Perehod1:
    dec    r19
    cpi    r19, 0
    brsh    Pausa15sek
    dec    r20
    cpi    r20,0
    brsh    Pausa15sek

    ldi    temp, 0x00
    out    TCNT0,temp

Generator:


PM MAIL WWW   Вверх
pettimm
Дата 15.10.2007, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.9.2005

Репутация: 1
Всего: 1



А вот и нет ....Глаза открыл ГОСПОДЬ  , просто   обнуление в метке "Perehod1",
сильно удлиняет время данного цыкла и  я немогу дождаться перехода на метку 
"Generator". 
                     Вобщем достаточно  использовать один регистр (  r19) , при частоте кварца 
6,5 Мгц и при ниже приведенных цыфрах длительность подпрограммы  "Pausa15sek" примерно и будет=15 сек.
 Спасибо cardinal  и  AVR32   , успехов вам...

on:ldi r19,0xff
    ;ldi r20,0x88
;êîíôèãóðàöèÿ òàéìåðà  sk/1024= 6347,65625 ðàç â ñåê.
ldi temp,0b00000101
out tccr0,temp

Pausa15sek:

     in temp,TCNT0
     cpi temp,0xff
breq Perehod1
rjmp Pausa15sek

Perehod1:
   dec r19
   cpi r19,0
                l di temp,0x00

                 out TCNT0,temp
   brne Pausa15sek

   ; dec r20
   ; cpi r20,0
   ; brne Pausa15sek

rjmp Generator

Generator:



Это сообщение отредактировал(а) pettimm - 15.10.2007, 22:01
PM MAIL   Вверх
cardinal
Дата 15.10.2007, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 8
Всего: 99



Спасибо! Тебе тоже - успехов! smile 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0877 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.