Коллеги, есть небольшой вопросик. Уже многие годы сижу на 1.11.9.8, довольно много наработал на этой версии. Неоднократно делал попытки перейти на более новую версию, но что-то "не срастается". В частности, обнаружил, что после компиляции в версии 2.0.Х.Х перестают работать все команды вида
, программа в этих местах просто зависает. Кто-нибудь сталкивался с таким? Я чего-то не учёл или это пока не замеченный баг компилятора, кочующий из версии в версию?
Даже остановленные часы два раза в сутки показывают правильное время.
Давай, давай. Вообще то это указывалось количество, а не номер бита. И в единицу должен стать шестой бит. Если посмотреть два предыдущих сообщения более внимательно.
Ну хорошо-хорошо. Верю. Не так понял просто. А на деле вопрошающий действительно невнимателен был, довольно частая ошибка. И тут в том же шестнадцатеричном (десятичном) виде хоть и менее наглядно, но ошибиться шанс меньше, думается мне. Больше осознанных действий, все же...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Бывает. А про ошибку, так сейчас редко кто свободно владеет двоичным кодом. Многие программисты встают в позу усиленного мозгового вычисления 2^12. Даже на форуме, судя по сообщениям, 2^16 остается тайной работы часовых кварцев.
Есть такая схема (во вложении), должно работать так: при отпускании кнопки должен мигать светодиод и играть звук, длительностью одна минута, после этого программа должна переходить в начало опроса кнопки. Как сделать чтобы светодиод и звук работали одновременно, и как написать чтобы мигание и звук продолжались только 1 минуту. Вот что удалось написать самому. Спасибо.
$regfile = "attiny13.dat" $crystal = 8000000
Config Pinb.3 = Input Config Portb.2 = Output
Do
If Pinb.3 = 0 Then Portb.2 = 0 If Pinb.3 = 1 Then Portb.2 = 1 If Portb.2 = 1 Then Goto Metka1
Loop
Metka1:
Waitms 1000 If Portb.2 = 1 Then Portb.2 = 0 Waitms 1000 If Portb.2 = 0 Then Portb.2 = 1 Waitms 1000
Исходник писать не буду. А реализация простая. После нажатия кнопки ждем её отпускания, выставляем флаг, что музыка идет. Запускаем музыку. запускаем таймер. Когда таймер отсчитает секунду - сбрасываем флаг. Возможно множество вариаций алгоритма, но смысл в том, что бы таймер в фоновом режиме считал время.
зачем ждать отпускания кнопки ? выставляем флаг ? какой?? запускаем таймер, вопрос тот же какой ? почему сбасывать флаг после секунды ? извините за вопросы это первый проэкт
Это кто писал? Контроллер, эта такая штука, которая работает непрерывно. Поэтому ему лучше знать, что музыка играет, и что нужно дождаться когда пройдет секунда по внутреннему таймеру. В качество флага использовать любую переменную типа "байт". 1 = включена музыка, 0 = выключена. Опять же ситуация: когда играет музыка нажать кнопку что будет(должно) быть? Наплевать? Или начать сначала? Или заткнуться? Какая реакция контроллера должна быть? Ну это так, для примера. Про таймеры подробно расписано в даташите на контроллер. Он (даташит) должен быть "настольной книгой", особенно при первых про[b]Е[/b]ктах. И примеров с описанием как их использовать навалом.
Пробуй. Только что будет внутри этого цикла? А мигать светодиодом будет тот же таймер. Почитай все же даташит. Поймешь, что таймер можно заставить "тикать" с любой частотой. Если с частотой 0.5 герца, то каждое срабатывание будет переворачивать выход на светодиод, а через 120 срабатываний прекратит музыку.
Как уже выше сказали - загляните в даташит на свой МК и посмотрите какие есть у него таймеры. Также, там сможете найти информацию по их настройке и применению. Аппаратные таймеры считают время в фоновом режиме, вызывая обработчик прерываний по окончанию отсчёта. Им пофигу на основную программу и задержки типа Waitms в ней.
Обратите внимание, здесь основной цикл Do ... Loop совершенно пустой, контроллер в нем топчется без дела. А в то же время таймер 0 молотит, и при переполнении счетного регистра (каждые 65,536 мс) программа уходит по вектору переполнения таймера. Где ведется подсчет этих переполнений, и при наборе нужного количества, светодиод меняет состояние на противоположное. Мигает, проще говоря. Сам.
Вы мне вопрос, и я Вам тоже: с какой частотой (хотя бы примерно) мигает светодиод в данном примере?
P.S. Это один из вариантов реализации на таймере. Можно изящнее, но боюсь, совсем непонятно будет...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон