Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: 8051. Прерывание на кнопке, жесть.

Чт янв 21, 2021 17:05:29

Ничего сложнее чем две кнопки я пока не подключал к МК, с микрухами проще. Таймер срабатывает где придется, при этом после срабатывания его надо перезагружать, значит надо разбирать и собирать стек с другим адресом возврата, и из-за двух кнопок я уже экран текста настрочил, и не представляю как это вкорячивать в реальную программу. Просто хардкор.

Re: 8051. Прерывание на кнопке, жесть.

Чт янв 21, 2021 17:46:27

Не нужно перезагружать. У этого МК не смотрел, а таймеры в 15F204/408 имеют режим с предзагрузкой начальных значений. После переполнения начальные значения загружается автоматически.
Позже посмотрю ДШ на 11-й.

Re: 8051. Прерывание на кнопке, жесть.

Чт янв 21, 2021 17:58:44

У 11-го простые таймеры как у 8051

Re: 8051. Прерывание на кнопке, жесть.

Чт янв 21, 2021 19:19:51

Режим с автозагрузкой есть, но он только 8-битный.
Младший регистр тикает, во время переполнения взводится флаг и из старшего в младший подгружается стартовое значение.
Для комфортного, без лишних манипуляций, прерывания в 1 мс 8-битный таймер маловат будет, нужно еще счетчик переполнений добавить.

Единственное, что мне непонятно, это какова частота внутреннего генератора. Нигде об этом явно не пишется.
В 15-х значение генератора устанавливалось в конфигурации на стадии прошивки. С этим непонятно пока.

Re: 8051. Прерывание на кнопке, жесть.

Чт янв 21, 2021 19:53:04

Zhuk72 писал(а):Единственное, что мне непонятно, это какова частота внутреннего генератора. Нигде об этом явно не пишется.
В 15-х значение генератора устанавливалось в конфигурации на стадии прошивки. С этим непонятно пока.

Некоторые опции устанавливаются в прошивальщике. Частота тоже.
Я вот на STC11F04 искал в даташите, как (не очень нужный) reset переделать в P3.6 Думал, что-то куда-то надо записать или бит поставить, но в даташите ни слова. Оказывается, это галка в прошивальщике.
Вложения
IRC_freq.png
(77.04 KiB) Скачиваний: 80

Re: 8051. Прерывание на кнопке, жесть.

Чт янв 21, 2021 20:04:50

Это картинка про 15F204, я же про него и писал постом выше.
А в 11F04 частота при прошивке не выставляется, там все гораздо хуже.
User can use “MOV @Ri” instruction read RAM unit FC~FF to get the internal oscillator frequency of the factory and read RAM unit F8~FB to get internal oscillator frequency of last used to download programs within the internal oscillator after power on.


И вообще рекомендуют использовать кварц, особенно если планируется использовать УАРТ или другие временно-чувствительные функции, ибо у внутреннего генератора частота очень нестабильна.

Re: 8051. Прерывание на кнопке, жесть.

Чт янв 21, 2021 20:28:24

Я кажись придумал, что надо сделать с таймером. Там есть режим 0 (13-битный таймер), это сделано для совместимости с MCS-48. Если его просто запустить без загрузки в счетные регистры, он будет считать по кругу, переваливаясь через переполнение, и генерировать прерывания через ~8 мс. Я недавно изображал динамическую индикацию таким способом, там ровно такая-же проблема была.


Прошивалка написала 5,4 МГц. У меня кварц 12МГц. УАРТ, к счастью у них некапризный.
Вложения
STC11_IRC.png
(74.76 KiB) Скачиваний: 72

Re: 8051. Прерывание на кнопке, жесть.

Чт янв 21, 2021 21:43:49

Прошивалка читает данные о частоте из регистров, выше я давал цитату из ДШ.
Код:
TIMER0INIT:         ;1000us@12.000MHz
   ORL AUXR,#80H   ;Timer clock is 1T mode
   ANL TMOD,#0F0H   ;Set timer work mode
   MOV TL0,#020H      ;Initial timer value
   MOV TH0,#0D1H   ;Initial timer value
   CLR TF0         ;Clear TF0 flag
   SETB TR0              ;Timer0 start run
   RET

Вот готовый код на 12 МГц с прерывание в 1 мс.
В прерывании нужно только добавить загрузку TL0/TH0 теми же значениями.

Re: 8051. Прерывание на кнопке, жесть.

Чт янв 21, 2021 23:00:02

Прерывание нужно только для активации режима клавиатурного ввода.
При самом вводе работаем обычным опросом порта ЛВК.
А уже по завершении работ с клавиатурой (отсутствие активности энное время) возвращаемся в ожидание воздействия через прерывание.
8)
Ответить