BOB51, в коде всё правильно?
Добавлено after 5 minutes 5 seconds:
И дело не только в симуляторе. Я на железе проверяю. Нет захода в обработчик.
ATTiny13 работа с таймером
Re: ATTiny13 работа с таймером
Я код особо не смотрел. Просто по опыту работ - не все аппаратные модули и их режимы симуляторы могут корректно поддерживать.
Конечная проверка всегда только за макетом.
Была бы единая макетная платка и единый подход задаче проекта - тогда можно чего то корректировать с конкретной проверкой.
(Вариант "дистанционных уроков").
Для начала хоть словесное описание задачи составить надо, а уж под него по даташиту подставлять нужные значения и затем команды соответствующие подобрать для загрузки значений и управления аппаратным модулем (счетчиком или чем другим).
Для проверок "на железе" тем более надо разумно контрольные тесты проектировать.

Конечная проверка всегда только за макетом.
Была бы единая макетная платка и единый подход задаче проекта - тогда можно чего то корректировать с конкретной проверкой.
(Вариант "дистанционных уроков").
Для начала хоть словесное описание задачи составить надо, а уж под него по даташиту подставлять нужные значения и затем команды соответствующие подобрать для загрузки значений и управления аппаратным модулем (счетчиком или чем другим).
Для проверок "на железе" тем более надо разумно контрольные тесты проектировать.
- VNS
- Говорящий с текстолитом
- Сообщения: 1614
- Зарегистрирован: Пт дек 10, 2021 12:48:46
- Откуда: Тюмень
Re: ATTiny13 работа с таймером
[uquote="alsav22",url="/forum/viewtopic.php?p=4771041#p4771041"]Что не так в коде?
;предделитель тактовой частоты CLK/2 (старт таймера)
ldi temp, 0b00000010;
out TCCR0B, temp;[/uquote]
При установке тактовой частоты счётчика не нужно забывать и о регистре TCCR0A. Установите необходимые значения (0х02) в регистр TCCR0A перед установкой значений в TCCR0B и тогда должно заработать.
;предделитель тактовой частоты CLK/2 (старт таймера)
ldi temp, 0b00000010;
out TCCR0B, temp;[/uquote]
При установке тактовой частоты счётчика не нужно забывать и о регистре TCCR0A. Установите необходимые значения (0х02) в регистр TCCR0A перед установкой значений в TCCR0B и тогда должно заработать.
Re: ATTiny13 работа с таймером
В коде это есть. Сразу после Srart.
- VNS
- Говорящий с текстолитом
- Сообщения: 1614
- Зарегистрирован: Пт дек 10, 2021 12:48:46
- Откуда: Тюмень
Re: ATTiny13 работа с таймером
Теперь увидел... Возможно я и ошибаюсь, но по логике… при настройке работы таймера, необходимо вначале настроить регистры TCCR0A и TCCR0B, далее настроить регистр TIMSK0, а уже затем разрешить глобальные прерывания. И далее к этим настройкам не возвращаться.
ЗЫ. И как сие творение должно работать?
ЗЫ. И как сие творение должно работать?
Re: ATTiny13 работа с таймером
Установите адрес входа в прерывание типа как ниже
Код: Выделить всё
.ORG 0x06
; обаработчик прерывания при сравнении
TIM0_COMPA:
nop
reti
Start:Re: ATTiny13 работа с таймером
Сделал по-другому, но ваше сообщение подтолкнуло к размышлениям в нужном направлении. Спасибо. Теперь код работает правильно.
Спойлер
Код: Выделить всё
.include "tn13def.inc";
.def temp = r16
.cseg
.org 0
rjmp Start ; Переход на начало программы
reti
reti
reti
reti
reti
rjmp TIM0_COMPA ; Прерывание по совпадению
reti
reti
reti
; обаработчик прерывания при совпадении
TIM0_COMPA:
nop
reti
/*; обаработчик прерывания при переполнении счётчика
TIM0_OVF:
nop;
reti;*/
Start:
; инциализация стека
ldi temp, low(RAMEND);
out SPL, temp ; Set Stack Pointer to top of RAM
clr temp
; режим сравнения (CTC)
ldi temp, 0b00000010;
out TCCR0A, temp
clr temp;
out TCNT0, temp; начальное значение счётчика
;устанавливаем биты разрешения прерывания 0-ого счетчика
ldi temp, 0b00000100; прерывание при совпадении с OCR0A
out TIMSK0, temp;
;значение для сравнения
clr temp;
ldi temp, 0x1E;
out OCR0A, temp;
;разрешить глобальные прерывания
sei;
;предделитель тактовой частоты (старт таймера)
ldi temp, 0b00000010;
out TCCR0B, temp;
Cicle:
nop
nop
nop
rjmp Cicle
Последний раз редактировалось alsav22 Ср дек 10, 2025 17:47:48, всего редактировалось 2 раза.
Re: ATTiny13 работа с таймером
Больно смотреть на "муки творчества" котейки без минимальных базовых знаний....
(Хотя иной раз о троллинге мысля заползает)...
Ну какое ж тут
;предделитель тактовой частоты CLK/2 (старт таймера)
Если в даташите CS01 = 1 означено как clkio/8 (from prescaler) ....
Да еще учитывать на какой частоте системный генератор работает и что в CLKPR по умолчанию установлено.

(Хотя иной раз о троллинге мысля заползает)...
Ну какое ж тут
;предделитель тактовой частоты CLK/2 (старт таймера)
Код: Выделить всё
ldi temp, 0b00000010;
out TCCR0B, temp;Да еще учитывать на какой частоте системный генератор работает и что в CLKPR по умолчанию установлено.