Вводная: Тахометр для стенда, есть atmega8, 16mhz необходимо подсчитывать импульсы и каждые 0,5 сек отправлять в порт UART, посылка происходит по прерыванию таймера1, но он не выходит из прерывания не пойму в чем дело:
; программа для ATMEGA8 16MHz 01,03,2006
; датчик оборотов (holl) + порт 232
.include "m8def.inc"
.include "macros.inc"
.equ dholl = PD7
.cseg ;
.org 0 ;коды программы
rjmp reset; инициализация
nop; rjmp INT_int0 ; внешнее прерывание 0
nop; rjmp INT_int1 ; внешнее прерывание 1
nop; rjmp INT_t2c ; совпадение т/с Т2
nop; rjmp INT_t2o ; переполнение т/с Т2
nop; rjmp INT_t1cpt ; захват т/с Т1
nop; rjmp INT_t1cmpA ; совпадение A т/с Т1
rjmp INT_t1cmpB ; совпадение B т/с Т1
nop; rjmp INT_t1o ; переполнение т/с Т1
nop; rjmp INT_t0o ; переполнение т/с Т0
nop; rjmp INT_SPI ; передача по SPI завершена
nop; rjmp INT_USART_RX ; прием завершен
nop; rjmp INT_USART_UDRE; регистр данных пуст
nop; rjmp INT_USART_TX ; передача завершена
nop; rjmp INT_ADC ; преобразование АЦП завершена
nop; rjmp INT_EE_RDY ; EEPROM готово
nop; rjmp INT_ANA_COMP ; аналоговый компаратор
nop; rjmp INT_TWI ; прерывание от модуля TWI
nop; rjmp INT_SPM_RDY ; Готовность SPM
;-----инициализация----
RESET:
cli ; Запретить прерывания
ldi r16,$7E ; 0111 1110
out DDRD,r16
clr r16
out DDRB,r16
out DDRC,r16
out PORTB,r16
out PORTC,r16
;----UART---------------------------------
UARTINIT
;----Timer1-------------------------------
T1_ustavka
T1_start
T1_Int_Init
sei ; Разрешить прерывания
;----- главный цикл
main:
sbis PIND,dholl
rjmp endc ;возврат к main
sbrc r19,7 ;r19 старое значение
rjmp endc ;возврат к main
inc r18 ; r18=r18+1 счетчик с накоплением
endc:
in r19,PIND
rjmp main ;возврат к main
;-----------------------------------------------------
INT_t1cmpB:
out udr,r18
clr r18
reti
; Макроопределения для ATMEGA
.macro UARTINIT; инициализация скорости обмена и разрешение прерываний по приходу данных
;---------------------------------------------------------------------------------
ldi r16,0b00011000 ; RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB8
out UCSRB, r16 ; 0 0 0 1 1 0 0 0
; режим 8 бит причем 9-й - TXB8 - используется как расширенный стоп-бит
ldi r16,$33 ; скорость порта 16000000/16*51+1=19200 для 16МГц кварца
out UBRRL,r16
.endm
.macro T1_Int_Init ;разрешение прерывания от таймеров 1
ldi r16,(1<<OCIE1B)
out TIMSK,r16
.endm
.macro T1_ustavka ;сравнение
ldi r16,high(7812)
out OCR1BH,r16
ldi r16,low(7812)
out OCR1BL,r16
.endm
.macro T1_start
ldi r16,$5 ;clk/1024
out TCCR1B,r16
.endm
помогите плз...