реклама на сайте
подробности

 
 
> Таймер1 на atmega8, хз
Aleck
сообщение Mar 18 2006, 20:18
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 24-06-05
Из: Новосибирск
Пользователь №: 6 296



Вводная: Тахометр для стенда, есть 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Laksus
сообщение Mar 24 2006, 20:28
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



Цитата
WHALE Дата Сегодня, 20:11
В даташите-же все есть
in r18,sreg
cli
in r16,tcnt1h
in r17,tcnt1l
out sreg,r18
Т.е для чтения счетчика на лету надо добиться атомарности операции чтения


____________
Небольшое, но важное уточнение!
цитата из www.atmel.com/... .../doc2486.pdf (ATmega8)
Цитата
To do a 16-bit write, the High byte must be written before the Low byte. For a 16-bit
read, the Low byte must be read before the High byte.
...
Assembly Code Example(1)
...
Код
; Set TCNT1 to 0x01FF
    ldi r17,0x01
    ldi r16,0xFF
    out TCNT1H,r17
    out TCNT1L,r16
    
; Read TCNT1 into r17:r16
    in r16,TCNT1L
    in r17,TCNT1H

...

То есть, при чтении 16-разрядного регистра таймера необходимо читать
сначала младший байт, а затем старший.
А при записи - наоборот.

Смотри в даташите раздел "Accessing 16-Bit Registers".
(Или, если проблемы с англицким, в книге:
Евстифеев А.В.
"Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL")

Александр
2006 03 24
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 23:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016