Добрый день! Нужна помощь в поиске ошибки,скорее всего в голове. Программировал до этого 2313. Решил перейти на Мегу 16 и сразу грабли.Вот:
CODE
.device Atmega16
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m16def.inc"
.list
;====== Объявления ===========================================
.def temp =r16
;=======Начало программы========================================
jmp init ;RESET
jmp Impuls1 ;внешнее прерывание от INT0
jmp Impuls2 ;внешнее прерывание от INT1
reti
reti
reti
reti
reti
reti
jmp Display ;таймер/счётчик №0 переполнение
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
;========= СТЕК =================================================
ldi temp,LOW(RAMEND)
out SPL,temp
ldi temp,HIGH(RAMEND)
out SPH,temp
;===========================================================================
Init:
ser temp ;все выхода PB1-PB7_индикаторы
out DDRB,temp
ldi temp,0b11100111 ; PD3@PD4 вход счета импульсов
out DDRD,temp ; PD0-PD2_номер индикатора
ldi temp,0b00000010 ;частота TCNT0 равна CK/8
out TCCR0,temp
ldi temp,0b00001100 ;частота TCNT1 равна CK/256
out TCCR1B,temp ;сбрасывать TC1 при совпадении
ldi temp,0b10110111
out OCR1AH,temp
ldi temp,0b00011011
out OCR1AL,temp
ldi temp,0b11000011
out GICR,temp
ldi temp,0b00001010 ;прерывание INT1 - низкий уровень
out MCUCR,temp
ldi temp,0b00001001 ;разреш.прерывания по переполнению TC0
out TIMSK,temp
sei
;=================================================
CHK:
ldi temp,0b00000001 ;устанавливаем 0 нулевого разряда
out PortD,temp
mov temp,r0
out PortB,temp
sei
;==========================================================
Start:
rjmp Start
Impuls1:
nop
reti
Impuls2:
nop
reti
Display:
nop
reti
При возникновении прерывания переходит на строчку " jmp init ;RESET". Шаманский бубен и ночные пляски у костра не помогли! Программа AVR Studio.
Сообщение отредактировал IgorKossak - Apr 18 2011, 11:45
Причина редактирования: [codebox] !!!