Код: Выделить всё
LDI TEMP,$3
out OCR1AH,TEMP
LDI TEMP,$E8
out OCR1AL,TEMP
delay:
ldi Temp, 0x04
out TCCR1B, temp
LDI Temp,$10
OUT TIMSK,TEMP
sei
RET
Код: Выделить всё
LDI TEMP,$3
out OCR1AH,TEMP
LDI TEMP,$E8
out OCR1AL,TEMP
delay:
ldi Temp, 0x04
out TCCR1B, temp
LDI Temp,$10
OUT TIMSK,TEMP
sei
RET
kvadrats писал(а): организовать задержку . Но что-то я не пойму , как отработать что либо по прерыванию от таймера , не представляю как написать обработчик, помогите пожалуйста
Код: Выделить всё
.INCLUDE "tn2313def.inc"
.equ Fo=1000000
.def temp=r16
.CSEG
.ORG 0x0000
START0:
RJMP START
.ORG 0x0004
T1_COMPA:
SBI PIND,0
RET
;***********************************
;***********************************
START:
LDI R20,LOW(RAMEND)
OUT SPL,R20
SBI ACSR,ACD
LDI R20,1<<SE
OUT MCUCR,R20
SBI DDRD,0
LDI XH,HIGH(1*Fo/1000-1)
out OCR1AH,XH
LDI XL,LOW(1*Fo/1000-1)
out OCR1AL,XL ;Интервал 1мс
;LDI TEMP,$3
;out OCR1AH,TEMP
;LDI TEMP,$E8
;out OCR1AL,TEMP
delay:
ldi Temp, 0x09
out TCCR1B, temp ; режим CTC Fo/1
; ldi Temp, 0x04
; out TCCR1B, temp
LDI Temp,1<<OCIE1A ;$10
OUT TIMSK,TEMP
sei
WAIT:
SLEEP
BRIE WAIT
NOP
RJMP START
.EXIT
Код: Выделить всё
delay:
cli ; запрещаем прерывания
ldi Temp, 0x00 ;не работаем с выходами
out TCCR1A, Temp
ldi Temp, 0x00 ; содержимое старшего байты
out TCNT1H,Temp
ldi Temp, 0x00 ; содержимое младшего байты
out TCNT1L,Temp
ldi Temp,0x10 ;прерывание по совпадению c A
out TIMSK,Temp
ldi Temp, 0x01 ;чистый CLK
out TCCR1B, Temp
sei
loop:
rjmp loop
END_DELAY:
pop r16
pop r16
RET
Код: Выделить всё
ldi Temp,0x00
out OCR1AH,Temp
ldi Temp,0x43
out OCR1AL,Temp
RCALL LOWW
Rcall delay
Код: Выделить всё
.org $0006
rjmp comp1a
;*******************Обработчик прерываний*******************************
comp1a:;обработчик прерывания таймера 1 по сравнению с А
ldi Temp, 0x00 ;выключили счетчик
out TCCR1B, Temp
rjmp END_DELAY ;переход за 1 такт до конца подпрограммы задержки
RETi