Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 16.09.2007, 21:44  
rremix
Временная регистрация
 
Регистрация: 01.11.2006
Сообщений: 66
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
rremix на пути к лучшему
По умолчанию

Цитата:
Поскажи что здесь сделать,счетчик команд pclath старший его биты
для переносимости кода использую следующую структуру:
if low($) › 0
org (high($)+1) *.256
endif
Tables
и дальше все коротенькие таблицы. А заголовки размещаю в программе.
Старшие биты можно получить директивой компилятора high(Tables). А именно их и нужно сувать в PCLATH
Цитата:
1)не понял для чего регистры ZumCnt(сколько опрос если не изменилось) и HoldTimer(удержание кнопки) ведь при декриминировании этих регистров они внновь загружаются новыми значениями
нда... мозг мертв, думаю глазами, но попытаюсь вспомнить. Вот пример обработчика Hold
Код:
KeyUpH ; Кнопка "вверх" удержана
	decfsz 	HoldTimeDecCount,F
	goto 	KeyUpP ; переход на кн. "нажата"
	movlw 	HoldTimeDecCountInit
	movwf 	HoldTimeDecCount
	decfsz 	HoldInit,F
	goto 	KeyUpP
	incf 	HoldInit,F ; если перестарались с уменьшением - вернём обратно (min val = 1)
	goto 	KeyUpP
HoldTimeDecCount - регистр, определяющий, через какое количество ПОВТОРНЫХ реакций (напр. приращений значения, если кнопка удерживается) необходимо увеличить скорость этих реакций (т.е. снизить задержку).
HoldInit - как уже говорил, время, в течении которого надо держать кнопку, чтобы произошло повторное нажатие. Оно-то и уменьшается после каждых HoldTimeDecCount событий удержания.
Цитата:
регистр KbdO служит для того чтоб обозначивать какая кнопка была отжата и нажата
нет, регистр KbdO исторически хранит старое состояние клавы для сравнения с новым. Но в момент, когда мы уже сравнили его и обрабатываем, необходимость в старом состоянии теряется и регистр хранит биты измененных кнопок. В конце обработки в него снова загружается очередное состояние клавы, которое уже и стало "старым" - т.е. обработанным.
Код:
	; Запоминаем новое состояние как старое
	movfw 	KbdN
	movwf 	KbdO
Реклама:
rremix вне форума  
Непрочитано 16.09.2007, 23:35  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

разобрался относительно того, почему компилятор не сохраняет pclath -
Да, при каждой команде goto call содержимое pclath переписывается автоматом в рсн. Но 3 старшие разряда -а8 а9 а10 берутся из кода операции, поэтому для объема кода программ до 2 к. слов адресация проходит нормально.
Другими словами, при покареженном pclath
goto 0x7ff - проходит нормально
goto 0x800 - будет ошибка
А поскольку компилил под 628, где 7ff - крайнее...
urry вне форума  
Непрочитано 17.09.2007, 07:34  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Теперь понял что такое счетчик команд и как пользоватся с PCLATH,хотя неудобно то что он разделен на старший и младший.
Операторы high, low и upper используются для получения одного байта из многобайтного значения, соответствующего метке. Применяются для управления расчетом точек динамического перехода при чтении таблиц и записи программ.

-- Прилагается рисунок: --

CERGEI1982 вне форума  
Непрочитано 17.09.2007, 07:35  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Конечно речь шла сначало о кнопках и AVR как я помню,а ушли на счтчик команд в пиках,наверно не хорошо

-- Прилагается рисунок: --
CERGEI1982 вне форума  
Непрочитано 17.09.2007, 08:57  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

rremix
Ошибочку нашел:
При вызове таблицы
Код:
BtnPress 
    andlw   0x0F 
    movwf   Tbl_Tmp 
    movlw   high(Font) 
    movwf   PCLATH 
    movfw   Tbl_Tmp 
    addwf   PCL,F 

   return     
   return 
   return 
   return 
   return 
   return 
   goto    Key1P 
   goto    Key2P 
   goto    Key3P
Нужно вместо команд Key1P и т.д. ставить call так как при вызове команды goto программа просто уходит на выполнение и потом в главную программу,но у нас же остался недокрученый регистры KbdN и KbdO и при следущем сканировании сравнивая потом с регистром KbdO будет ошибка.
И в конец таблице наверно надо ставить еще return или retlw 0.
CERGEI1982 вне форума  
Непрочитано 17.09.2007, 09:16  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Не так не вышло как предлогал.Может после выполнения например Key1P нас уже не волнует что в регистре KbdO осталось? Но как же потом увидеть что кнопка удерживается?
CERGEI1982 вне форума  
Непрочитано 17.09.2007, 12:51  
rremix
Временная регистрация
 
Регистрация: 01.11.2006
Сообщений: 66
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
rremix на пути к лучшему
По умолчанию

Цитата:
Ошибочку нашел:
Цитата:
Не так не вышло как предлогал.Может после выполнения например Key1P нас уже не волнует что в регистре KbdO осталось? Но как же потом увидеть что кнопка удерживается?
А в этом и есть маленький хитрость:
При работе процедуры анализа происходит следующая последовательность call-goto:
Код:
	call 	BtnHold
        .... в стеке - адрес возврата в проц. анализа
        .... PC в таблице
	goto 	Key1H 
        ...  в стеке тот же адрес
        ... исполняем реакцию на кнопку 
        return 
        ... возвращаемся в процедуру анализа
справедливости ради надо отметить, что:
1. процедура реакции на кнопку должна быть короткой по времени (еще и потому, что анализ вызывается из прервыания)
2. в обработчиках кнопок нельзя использовать регистры работы с клавой (и читать тоже - не знаем, как он повернут). Хотя, если известно, какая кнопка нажата - зачем они нам?

Таким образом, обрабатываются все нажатые кнопки за один вызов KbdScan в строко определенной последовательности (начиная с конпки с большим "виртуальным" номером).
rremix вне форума  
Непрочитано 17.09.2007, 12:54  
rremix
Временная регистрация
 
Регистрация: 01.11.2006
Сообщений: 66
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
rremix на пути к лучшему
По умолчанию

и еще...
1. не получилось, потому, что если вместо goto ставишь call то после исполнения процедуры реакции PC вернется в ТАБЛИЦУ. А нам эта нада?

2. насчет retlw 0: можно, но не нужно. Вырезая, я, кончено, отрезал еще 8 return-ов, и, естественно, забыл
Код:
    andlw   0x0F
исправить на 0x07. Таким образом ширина прыжка маскируется 8-мью значениями. Некорректный прыжок исключается.
rremix вне форума  
Непрочитано 19.09.2007, 04:57  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

rremix
Все разобрался,спасиб.
Только у меня не применяется HoldTimeDecCount,кажись и без него хватает задержек.Сделал небольшой проектик на протеусе,только одно но.
Опишу програмку на портах RB0-RB2 кнопки,RB3 выставляем единицу для опроса кнопок,RB4-RB6 выходы на светодиоды загарается в зависимости от нажатой кнопки.Но только все портит команда bsf PORTB,3 светодиод сам выключается,видать это и есть чтение-модификация-запись,я ее так и не понял,сейчас еще почитаю.

Прикрепленный файл: 7075335.rar
CERGEI1982 вне форума  
Непрочитано 19.09.2007, 05:13  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Понял с командой bsf ,поставил последовательно со светодиодами резисторы по 470 Ом,заработало как надо,но будет ли так реально работать?
Да и еще немножко там напутал в подпрограмках Key1P-Key3P сейчас поправлю если надо выложу на протеусе.
CERGEI1982 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задержка нажатой кнопки yostaf Электроника - это просто 31 15.04.2008 13:37
Опрос кнопки Electric111 Микроконтроллеры, АЦП, память и т.д 15 18.12.2007 22:48
Снова кнопки.... dosikus Микроконтроллеры, АЦП, память и т.д 34 10.08.2007 20:46


Часовой пояс GMT +4, время: 12:29.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot