|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.05.2011, 01:51 | #11 |
Участник клуба
Регистрация: 07.07.2009
Сообщений: 1,385
|
Спасибо))))
Сейчас буду тестить)) Нажимаю на весы))))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
|
23.05.2011, 02:10 | #12 |
Участник клуба
Регистрация: 07.07.2009
Сообщений: 1,385
|
Уважаемый Ulex, у меня вопрос (наверное, вы уже спите(((() - вот насколькл я поняла вся эта красота запускается "сбросом кубика" с порта PD0. То есть эта кнопка. Но я как не сбрасываю вручную, а он все в main крутится(((
Кстати, эмулятор съел Ваш код и не подавился не разу)))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
|
23.05.2011, 02:30 | #13 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
А он и должен в main_e крутиться. Это же монитор, программа никогда не должна уходить из монитора надолго. А вдруг у вас там ещё будет 10-15 кнопок на разных портах висеть и каждая на свою функцию. Тогда контроллер просто оглохнет на некоторое время. Так делать нельзя. Поэтому сделано как положено, по нажатию кнопки просто устанавливается режим таймера и стартовые временные хар-ки ну и порт переключается (ксати, переключается, или нет?). Всё, а программа дальше себе молотит в мониторе. Вся дальнейшая обработка вынесена в обработчик прерывания по совпадению таймера 0. И майн будет вертеться, пока не сработает прерывание (~ ч.з. 50 мс). Нажимая на кнопку F11 вы этого момента в эмуляторе будете ооочень долго ждать. Порт переключается на жёлтый фонарик, или нет?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru |
23.05.2011, 02:40 | #14 |
Участник клуба
Регистрация: 07.07.2009
Сообщений: 1,385
|
С зеленого на желтый уходит. А на красный нет(( Таймер сконфигурировался, но время на нем не тикает.....значения не меняются. Вот я и не понимаю, как таймер запустить(((
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
|
23.05.2011, 02:51 | #15 |
Участник клуба
Регистрация: 07.07.2009
Сообщений: 1,385
|
Вот написано sbic PIND, start
насколько я понимаю, пропустить команду, если на порту PIND уровень start. А уровень start=PD0. То есть сбив это значение, мы можем продолжить дальнейшее движение по листингу программы. Я практически уверена, что я что-то просто не допоняла
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
|
23.05.2011, 03:07 | #16 | |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Тут два варианта:
Вариант первый - студия переглючила. Бывает что эмулятор не запускает счётчик, не знаю почему. Помогает перезапуск студии. Вариант второй - просто дождаться не можешь. Там стоит коэфф. деления для счётчика 1024. Т.е. ч.з 1024 такта выполнится один тик (инкремент счётчика). А прерывание первый раз выполнится ч.з. 194 таких тика, т.е. ч.з. 194*1024=198656 тактов (по времени это ~ 50 мс). А переключится порт на красный ч.з. 4 сек, т.е ч.з 80*198656=15.892.480 тактов. Если просто жать F11, то это надо железной леди быть чтобы дождаться. Т.е так не проверить. В студии есть функция Run To Cursor. Но даже с ней сложно такие тайминги проверять. Например, на своём 3Гц двухъядернике пока студия просчитает эти 4 секунды я успеваю пару песенок в Winampe послушать. Цитата:
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru Последний раз редактировалось Ulex; 23.05.2011 в 03:13. |
|
23.05.2011, 03:16 | #17 |
Участник клуба
Регистрация: 07.07.2009
Сообщений: 1,385
|
Счас проверим про 1 тик счетчика за 1024 такта))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
|
23.05.2011, 03:26 | #18 |
Участник клуба
Регистрация: 07.07.2009
Сообщений: 1,385
|
Да, таймер пошел))))
Я хочу своими глазами убедиться что красный загориться. Я то думала что в эмуляторе как в реальном временени 4 секунды это 4 секунды))))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
|
23.05.2011, 03:38 | #19 |
Участник клуба
Регистрация: 07.07.2009
Сообщений: 1,385
|
Эмулятор завис((((( Я его свернула, чтобы калькулятор достать - чтобы узнать где же этот коэффициент 1024 (мало ли преподаватель скажет - делать коэф 255 как обычно), чтобы сообразить где винтануть в случае чего. И завис эмулятор.. так я красного и не долждалась
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
|
23.05.2011, 04:06 | #20 |
Непрофессионал
Участник клуба
Регистрация: 01.01.2008
Сообщений: 1,405
|
Давай я тебе ещё пару моментов поясню. И отключаюсь.
1. 1024 - коэффициент аппаратный. Если в TCCR0 установить биты 0,1,2, то будет такой коэффициент деления. Соответственно время одного тика таймера для 4МГц будет 256 мкс. 2. Период срабатывания прерывания таймера я выбрал ~50 мс, для этого OCR0 установлен в 194. Т.к. срабатывание прерывания происходит в следующий тик после совпадения OCR0 и TCNT0, то соответственно получается, что прерывание по совпадению будет выполняться в 195*256=49920 мкс или в 49,92 мс. что примерно равно 50 мс. 3. Так как 50 мс (0,05 с), это тоже ещё мало, то заводим переменную в озу DIV_SEC - это программный коэффициент деления. Для получения одной секунды он должен быть изначально равен 20 (20*0,05=1с). И каждый раз в обработчике прерывания эта переменная декрементируется, пока не станет равна нулю - это значит натикала секунда. Далее он опять становится равным 20 и цикл повторяется. 4. Следующий коэфиициент CNT_SEC, вот он уже устанавливает задержку в секундах. Он декрементируется тогда, когда DIV_SEC равен 0. Тоже всё это в обработчике прерывания. Ну и конечное время задержки получается как: CNT_SEC(стартовое)*DIV_SEC(стартово е)*195*256 мкс. Например для CNT_SEC=4 4*20*195*256=3.993.600 мкс = 3,99 с
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------ Страничка с моими программками http://ulex-masm.ru Последний раз редактировалось Ulex; 23.05.2011 в 04:18. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
AVR Atmega 128: сигнализация не срабатывает на ключи | Blondy | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 16 | 20.05.2011 12:29 |
AVR ATmega 128: почему не происходит переход? | Blondy | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 06.05.2011 01:28 |
Двоичный счетчик в AVR studio 4 | UKG | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 22.10.2010 17:48 |
MCS-51 таймер/счетчик | Steff-z | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 05.06.2009 23:15 |
Добавить инди в delphi 10 light, но как это зделать и где её взять не знаю | 100GRamm | Компоненты Delphi | 1 | 09.02.2009 13:38 |