Вводная: Тахометр для стенда, есть 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
помогите плз...
Сообщение отредактировал Aleck - Mar 18 2006, 20:21
|