Мряу коты и кошечки !!!
Хочу подёргать вывод с частотой 5 Гц. attiny2313a тактируется от кварца на 4 МГц. Использую 16 битный таймер 1. Тактирую таймер от предделителя на 256. Итого, таймер считает каждый 15625 такт, что равно 0,000064 с. 5 Гц это 0,2 с, следовательно, для 5Гц таймер должет считать до 0,2/0,000064 = 3125 = 0xC35. Пишу код:
В итоге имею на 0 ножке порта В 3 Гц вместо 5 Гц, что я делаю не так?
Хочу подёргать вывод с частотой 5 Гц. attiny2313a тактируется от кварца на 4 МГц. Использую 16 битный таймер 1. Тактирую таймер от предделителя на 256. Итого, таймер считает каждый 15625 такт, что равно 0,000064 с. 5 Гц это 0,2 с, следовательно, для 5Гц таймер должет считать до 0,2/0,000064 = 3125 = 0xC35. Пишу код:
Спойлер
Код: Выделить всё
.include "tn2313adef.inc"
.def tmp = r16
.def tmp1 = r17 ;здесь будет состояние порта B
.org 0
rjmp init
reti
reti
reti
rjmp timer1
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
init:
; отсюда будем считать порт В
ldi tmp1, 0xff
; Все порты на выход с подтяжкой
ldi temp, 0xff
out DDRD, temp
out DDRB, temp
out PORTD, temp
out PORTB, temp
;предделитель на 256, обнуление при совпадении с OCR1A
ldi temp, 0b00001100
out TCCR1B, temp
; считаем до 3125 потом сбрасываем счётчик и уходим на прерывание
ldi temp, 0xC
out OCR1AH, temp
ldi temp, 0x35
out OCR1AL, temp
;разрешаем прерывание при совпадении счетчика с содержимым OCR1A
ldi temp, 0b01000000
out TIMSK, temp
sei
main:
rjmp main
timer1:
inc tmp1
out PORTB, tmp1
reti

