Сб мар 09, 2013 20:07:59
Спасибо большое за ответ !
пользуюсь AVRStudio 4 . моделирую схемы в Proteus .
Отпишусь о результатах позже .
Сб мар 09, 2013 21:32:12
RossiaForever писал(а):При моделировании программа запускаетcя через время равное времени задержки по таймеру , дальше выполняется тело программы ( бегущие огни ) , т.е. сначала выполняется задержка по таймеру , потом обработчик прерываний ( до бесконечности ) .
Программа не выходит из обработчика прерываний .
Init: Ldi Temp1 , 0b00000001 ; начало тела программы
Shift :
cpi Temp1,0b10000000
breq Init
lsl Temp1
;********************************************
OUT PORTD,TEMP1
;********************************************
rjmp Shift ; конец тела программы
reti
Вс мар 10, 2013 11:13:49
.include "m8def.inc"
.def Temp=R16
.def Temp1=R17
.def Count_Time=R18
.org 0
.cseg
rjmp _Reset
;----------
; ***** ВЕКТОРА ПРЕРЫВАНИЙ *****
.org $0001
rjmp INT_0
.org $0009
RJMP TIM0
;rjmp Timer0_OVF0
INT_0:
;Timer0_OVF0:
reti
;*******************************************
;----------
; ***** ИНИЦИАЛИЗАЦИЯ *****
_Reset:
Ldi Temp1 , 0b00000001
ldi Count_Time, 255
ldi Temp,0b11111111 ; настройка порта D на выход
out DDRD,Temp
LDI R16,Low(RAMEND)
OUT SPL,R16
LDI R16,High(RAMEND) ; установка указателя стека для стека можно и так
OUT SPh,R16
; LDI R16,High(RAMEND)
; OUT SPH,R16
; LDI R16,Low(RAMEND) ; установка указателя стека
; OUT SPL,R16
;*******************************************************
ldi Temp,0b00000001 ;разрешить прерывание по переполнению
out TIMSK,Temp
;ldi Temp,0b00000010 ;????????????????разрешить прерывание по переполнению
;out TIMSK,Temp
;*******************************************************
ldi Temp,0b00000010 ;тактовый сигнал = CK/8
out TCCR0,Temp
sei ;разрешить прерывания
;----------
; ***** ОСНОВНОЙ ЦИКЛ *****
Inf: rjmp Inf ;бесконечный цикл
;----------
; ***** ОБРАБОТЧИК ПРЕРЫВАНИЯ ТАЙМЕРА *****
TIM0:
ldi Temp,0 ;обнуление таймера
out TCNT0,Temp
dec Count_Time ; регистр для отсчета прерываний
cpi Count_Time,0b00000000
breq end_timer
reti
end_timer:
cpi Temp1,0b10000000 ; начало тела программы
breq Init
lsl Temp1
rjmp Output
Init:Ldi Temp1 , 0b00000001
;********************************************
Output:OUT PORTD,TEMP1
;********************************************
; конец тела программы
reti