Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Микроконтроллеры, робототехника, схемотехника, 3D принтеры
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2024, 11:57   #1
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 748
По умолчанию Почему перескакивает команду?

Здравствуйте. Сейчас изучаю программу таймера и там есть вот такой кусок кода:
Код:
.equ S1_Button = PINB0
;====================================================================
;Основное тело программы
START:
		wdr
		sbic PINB,S1_Button	;если кнопка S1 нажата, то вызвать задержку 0,1 с
		rjmp S2_PRESS		;если нет, то переход на метку S2_PRESS
		rcall del_01s					
		sbic PINB,S1_Button	;и вновь проверить кнопку S1 на нажатие				
		rjmp START			;если нажата, начинается основной цикл программы
Проблема в том, что когда отлаживается в симуляторе, то при установке PB0 = 1 команда sbic отрабатывает неправильно, т.е. перескакивает следующую команду, хотя Skip (Next Instruction If Selected) Bit (in) I/O (Register) Cleared, т.е. она должна перескакивать при нуле, а я ставлю там 1. Работает неправильно и в AVR Studio и в Atmel Studio. Это симулятор кривой или что вообще? Подскажите, пожалуйста, как исправить?
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 23.06.2024, 13:34   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,593
По умолчанию

За давностью не помню подробности, но Bug Errata (так вроде называлось сообщение фирмы о найденных багах и методах их устранения) что-то было на тему sbic. Конечно, тип МК и part number забыты прочно, но что было - помню точно.
У каждого своя метода, но я в таких случая предпочитал не бодаться со стеной непонятки, а переписывл аналогом.
Код:
       in Tmp,PINB
       andi Tmp,S1_Button
       breq 	S2_PRESS;если кнопка S1 нажата, то вызвать задержку 0,1 с
      rcall del_01s
S2_PRESS	....
breq или brne - в зависимости от того, что делает кнопка: подаёт + или тянет к земле. Я всегда выбирал второй вариант.
Ещё до прочтения Bug Errata я почему-то люто невзлюбил sbic, и его нет ни в одном из моих проектов.

Последний раз редактировалось digitalis; 23.06.2024 в 13:39.
digitalis вне форума Ответить с цитированием
Старый 23.06.2024, 14:02   #3
DeepFlake
Пользователь
 
Регистрация: 16.05.2024
Сообщений: 37
По умолчанию

А если в программе прямо перед sbic PINB,S1_Button написать sbi PORTB, PORTB0 ?
То есть установить нужный бит. Что будет?
DeepFlake вне форума Ответить с цитированием
Старый 23.06.2024, 19:27   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,593
По умолчанию

А попробовать? AVR Studio под руками.
digitalis вне форума Ответить с цитированием
Старый 24.06.2024, 06:51   #5
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 748
По умолчанию

Здравствуйте. А что пробовать? Попробовал уже. Если перед этой командой сразу ставить мышкой бит в PINB0, то не работает. Если поставить эту 1 вначале предыдущего блока кода(инициализация), то работает. Это, короче, я понял, для железа сделано, а симуляция во 2 или в последнюю очередь.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 27.06.2024, 12:51   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,593
По умолчанию

Давно не занимался АВРами, но, помнится, была у них (у более новых) такая странная фича.
Скажем, регистр PINB предназначен для чтения, и запись чего-нибудь туда вроде не имеет смысла. Но нет, запись 1 в бит регистра PINB... переключает соотв. бит в регистре PORTB ?! (как в Т-триггере). Так что эффект может быть неожиданным, если не знать.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Здравствуйте ! в чем проблема,почему почему время исполнения операций не работает ? ion leahu Помощь студентам 6 23.11.2014 19:36
Combobox перескакивает на первый символ warder49 Компоненты Delphi 1 19.07.2013 15:18
DBGrid перескакивает на 1ю запись a_n_n_a Общие вопросы Delphi 1 21.05.2011 05:42
Перескакивает вниз блок слева tark HTML и CSS 2 21.06.2010 18:21