Осталось самое сложное , отладить программу .
Дело вот в чем : посчитанное время задержки и время при моделировании различаются , т.е. в ниже приведенной программе при 4 МГц ( а при 8 МГц еще меньше ) я посчитал время задержки примерно 0,1 с , а при моделировании это время составляет чуть меньше 1 с .
Так же при отладке в AVRStudio 4 показывает частоту 4 МГц .
В чем может быть причина ? Заранее спасибо !!!
Код: Выделить всё
.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