Года 2 назад программировал на 90s2313. Недавно купил себе Atmega162. И не могу написать даже самой простой программы-моргание диода. Подскажите пожалуйста исходный код на ассемблере!
Зы- для компиляции использую avr studio 4 и для прошивки avreal
Код: Выделить всё
.CSEG
.ORG 0
; =======================
;
; Таблица векторов прерываний
;
; =======================
jmp Reset ; Сброс, включение питания, сторожевой таймер
jmp _IRQ ; Внешнее прерывание INT0
jmp _IRQ ; Внешнее прерывание INT1
jmp _IRQ ; Внешнее прерывание INT2
jmp _IRQ ; Pin Change Interrupt Request 0
jmp _IRQ ; Pin Change Interrupt Request 1
jmp _IRQ ; Timer/Counter3 Capture Event
jmp _IRQ ; Timer/Counter3 Compare Match A
jmp _IRQ ; Timer/Counter3 Compare Match B
jmp _IRQ ; Timer/Counter3 Overflow
jmp _IRQ ; Timer/Counter2 Compare Match
jmp _IRQ ; Timer/Counter2 Overflow
jmp _IRQ ; Timer/Counter1 Capture Event
jmp _IRQ ; Timer/Counter1 Compare Match A
jmp _IRQ ; Timer/Counter1 Compare Match B
jmp _IRQ ; Timer/Counter1 Overflow
jmp _IRQ ; Timer/Counter0 Compare Match
jmp _IRQ ; Timer/Counter0 Overflow
jmp _IRQ ; Serial Transfer Complete
jmp _IRQ ; USART0, Rx Complete
jmp _IRQ ; USART1, Rx Complete
jmp _IRQ ; USART0 Data Register Empty
jmp _IRQ ; USART1 Data Register Empty
jmp _IRQ ; USART0, Tx Complete
jmp _IRQ ; USART1, Tx Complete
jmp _IRQ ; EEPROM Ready
jmp _IRQ ; Analog Comparator
jmp _IRQ ; Store Program Memory Ready
_IRQ: reti
; =======================
;
; Точка входа по сбросу/включению питания
;
; =======================
Reset:
; Инициализация указателя стека: вершина по адресу 4FF (конец ОЗУ)
ldi R16, 4
out SPH, R16
ldi R16, 0xFF
out SPL, R16
; Инициализация порта B (линия 0 работает на выход)
ldi R16, 0x01
out DDRB, R16
Loop:
; Выдача на PB0 единицы
ldi R16, 0x01
out PORTB, R16
; Задержка
ldi R31, 0xFF
ldi R30, 0xFF
L1: sbiw R31:R30, 1
brne L1
; Выдача на PB0 нуля
ldi R16, 0x00
out PORTB, R16
; Задержка
ldi R31, 0xFF
ldi R30, 0xFF
L2: sbiw R31:R30, 1
brne L2
rjmp Loop
SII писал(а):Что-нибудь в этом роде:
Код: Выделить всё
.CSEG .ORG 0 ; ======================= ; ; Таблица векторов прерываний ; ; ======================= jmp Reset ; Сброс, включение питания, сторожевой таймер jmp _IRQ ; Внешнее прерывание INT0 jmp _IRQ ; Внешнее прерывание INT1 jmp _IRQ ; Внешнее прерывание INT2 jmp _IRQ ; Pin Change Interrupt Request 0 jmp _IRQ ; Pin Change Interrupt Request 1 jmp _IRQ ; Timer/Counter3 Capture Event jmp _IRQ ; Timer/Counter3 Compare Match A jmp _IRQ ; Timer/Counter3 Compare Match B jmp _IRQ ; Timer/Counter3 Overflow jmp _IRQ ; Timer/Counter2 Compare Match jmp _IRQ ; Timer/Counter2 Overflow jmp _IRQ ; Timer/Counter1 Capture Event jmp _IRQ ; Timer/Counter1 Compare Match A jmp _IRQ ; Timer/Counter1 Compare Match B jmp _IRQ ; Timer/Counter1 Overflow jmp _IRQ ; Timer/Counter0 Compare Match jmp _IRQ ; Timer/Counter0 Overflow jmp _IRQ ; Serial Transfer Complete jmp _IRQ ; USART0, Rx Complete jmp _IRQ ; USART1, Rx Complete jmp _IRQ ; USART0 Data Register Empty jmp _IRQ ; USART1 Data Register Empty jmp _IRQ ; USART0, Tx Complete jmp _IRQ ; USART1, Tx Complete jmp _IRQ ; EEPROM Ready jmp _IRQ ; Analog Comparator jmp _IRQ ; Store Program Memory Ready _IRQ: reti
Один раз не получится полюбомуSII писал(а): один раз написать таблицу переходов с командами jmp (именно ими -- rjmp имеет меньший размер)
как можно указать неправильное имя вектора при копи-пастном методе, необходимые имена тупо копируются из def* файла.указал случайно, например, неверное имя вектора
вы что-то ересь какую-то пишите... скачали WinAVR - но называете это патчем... какой патч? AVR Studio не значет про С++ ничего (не поддерживает подсветку синтаксиса, не умеет показывать в отладчике и т.п.) - и патча, как я понимаю, нет для лечения этой проблемы. а вот Си прекрасно понимает, и WinAVR в том числе. можно писать в студии и на С++ и компилировать при помощи WinAVR (при соблюдении минимума условий) - однако отлаживать в симуляторе не выйдет.Archangel089 писал(а):А вот подскажите вот такой вот вопрос-решил попробывать пропатчить AVRStudio на C++. скачал патч.... и ничего что то не пропатчилось... патч-WinAVR-20100110-install.exe. установился как отдельна прога. и при меню опен открывает кучу экзешников. но ни один выбрать нельзя. качал отседа-http://cdnetworks-kr-2.dl.sourceforge.net/project/winavr/WinAVR/20100110/WinAVR-20100110-install.exe.
А можно поинтересоваться-что это собственно за минимумы???ARV писал(а):[вы что-то ересь какую-то пишите... скачали WinAVR - но называете это патчем... какой патч? AVR Studio не значет про С++ ничего (не поддерживает подсветку синтаксиса, не умеет показывать в отладчике и т.п.) - и патча, как я понимаю, нет для лечения этой проблемы. а вот Си прекрасно понимает, и WinAVR в том числе. можно писать в студии и на С++ и компилировать при помощи WinAVR (при соблюдении минимума условий) - однако отлаживать в симуляторе не выйдет.
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
int N=0;
ISR(TIMER0_COMP_vect)
{
N=TCNT1;
TCNT0=0;
N=0;
}
int main(void)
{
DDRA=0xFF;
PORTA=0xFF;
TCCR0=0x01;//Set timer0
OCR0=0x5F;
TIMSK=0x01;
sei();
while(1)
{
asm volatile ("nop");
volatile N=N+1;
asm volatile ("nop");
asm volatile ("nop");
}
}