Ассемблер (ASM) для AVR в вопросах и ответах
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Эта среда рассчитана на однофайловые исходники? Если да, то это только для "поиграться".
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Мikа
- Потрогал лапой паяльник
- Сообщения: 343
- Зарегистрирован: Пн апр 01, 2013 15:13:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добрый день, Коты. Не так давно я задавался вопросом, почему у меня не работают прерывания INT0 и INT1 на Atmega48. Погуглив нашёл вот такое рассуждение: http://www.cyberforum.ru/microcontrolle ... 98879.html
Проверил сам, результат получился следующий:
Вопрос решён, всё хорошо, но я хочу для себя понять, чем таким отличается STS от out? В справке по ассемблеру out - это загрузка в порт, STS - прямая запись. Я думал, что они отличаются "радиусом действия".
Проверил сам, результат получился следующий:
Код: Выделить всё
;Настройка прерывания INT1
ldi Temp, 0b00001100 ; Прерывание по возрастающему фронту INT1
STS EICRA, Temp
ldi Temp, 0b00000010 ; Разрешение прерывания на INT1
STS EIMSK, Temp
;Этот вариант не работал. Это происходило из-за того, что при прерывании программа уходила не по тому адресу, то есть по той строке, где перечислены все прерывания:
.org 0
rjmp reset
.org INT0addr ; External Interrupt Request 0
rjmp INT0_IRQ
.org INT1addr ; External Interrupt Request 1
rjmp INT1_IRQ
.org PCI0addr ; Pin Change Interrupt Request 0
rjmp PCI0_IRQ
.org PCI1addr ; Pin Change Interrupt Request 0
; И т.д.
; Это я выяснил, когда все векторы прерывания отправил выполнять обработчик INT1.
;Но после того, как настройка прерывания приобретает следующий вид, всё начинает работать нормально:
ldi Temp, 0b00001100 ; Прерывание по возрастающему фронту INT1
STS EICRA, Temp
ldi Temp, 0b00000010 ; Разрешение прерывания на INT1
out EIMSK, Temp
;Просто загружаем значение Temp в EIMSK не через STS, а через out.
Вопрос решён, всё хорошо, но я хочу для себя понять, чем таким отличается STS от out? В справке по ассемблеру out - это загрузка в порт, STS - прямая запись. Я думал, что они отличаются "радиусом действия".
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Надо лезть в m48def.inc смотреть какой там адрес присвоен регистру EIMSK.
Потому что для 8-й Меги у меня явно написано:
Но у 8-ки все регистры достреливаются через IN/OUT. А вот как они объявлены у 128-й:
Вроде в железе они идут подряд, но в описаниях есть скачок $3F — $60.
Это связано с тем, что РВВ идут после РОН, и если абсолютный адрес у младшего РВВ по-настоящему $20 (для команды STS/LDS), то относительный (с которым работают команды IN/OUT) — $00.
Потому что для 8-й Меги у меня явно написано:
Код: Выделить всё
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructionsНо у 8-ки все регистры достреливаются через IN/OUT. А вот как они объявлены у 128-й:
Спойлер
Код: Выделить всё
;*****************************************************************************
; I/O Register Definitions
;*****************************************************************************
;**** Memory Mapped I/O Register Definitions ($FF-$60) ****
.equ UCSR1C = $9D
.equ UDR1 = $9C
.equ UCSR1A = $9B
.equ UCSR1B = $9A
.equ UBRR1L = $99
.equ UBRR1H = $98
.equ UCSR0C = $95
.equ UBRR0H = $90
.equ TCCR3C = $8C
.equ TCCR3A = $8B
.equ TCCR3B = $8A
.equ TCNT3H = $89
.equ TCNT3L = $88
.equ OCR3AH = $87
.equ OCR3AL = $86
.equ OCR3BH = $85
.equ OCR3BL = $84
.equ OCR3CH = $83
.equ OCR3CL = $82
.equ ICR3H = $81
.equ ICR3L = $80
.equ ETIMSK = $7D
.equ ETIFR = $7C
.equ TCCR1C = $7A
.equ OCR1CH = $79
.equ OCR1CL = $78
.equ TWCR = $74
.equ TWDR = $73
.equ TWAR = $72
.equ TWSR = $71
.equ TWBR = $70
.equ OSCCAL = $6F
.equ XMCRA = $6D
.equ XMCRB = $6C
.equ EICRA = $6A
.equ SPMCSR = $68
.equ SPMCR = $68 ; old name for SPMCSR
.equ PORTG = $65
.equ DDRG = $64
.equ PING = $63
.equ PORTF = $62
.equ DDRF = $61
;**** I/O Register Definitions ($3F-$00) ****
.equ SREG = $3F
.equ SPH = $3E
.equ SPL = $3D
.equ XDIV = $3C
.equ RAMPZ = $3B
.equ EICRB = $3A
.equ EIMSK = $39
.equ GIMSK = $39 ; old name for EIMSK
.equ GICR = $39 ; old name for EIMSK
.equ EIFR = $38
.equ GIFR = $38 ; old name for EIFR
.equ TIMSK = $37
.equ TIFR = $36
.equ MCUCR = $35
.equ MCUCSR = $34
.equ TCCR0 = $33
.equ TCNT0 = $32
.equ OCR0 = $31
.equ ASSR = $30
.equ TCCR1A = $2F
.equ TCCR1B = $2E
.equ TCNT1H = $2D
.equ TCNT1L = $2C
.equ OCR1AH = $2B
.equ OCR1AL = $2A
.equ OCR1BH = $29
.equ OCR1BL = $28
.equ ICR1H = $27
.equ ICR1L = $26
.equ TCCR2 = $25
.equ TCNT2 = $24
.equ OCR2 = $23
.equ OCDR = $22 ; New
.equ WDTCR = $21
.equ SFIOR = $20 ; New
.equ EEARH = $1F
.equ EEARL = $1E
.equ EEDR = $1D
.equ EECR = $1C
.equ PORTA = $1B
.equ DDRA = $1A
.equ PINA = $19
.equ PORTB = $18
.equ DDRB = $17
.equ PINB = $16
.equ PORTC = $15
.equ DDRC = $14 ; New
.equ PINC = $13 ; New
.equ PORTD = $12
.equ DDRD = $11
.equ PIND = $10
.equ SPDR = $0F
.equ SPSR = $0E
.equ SPCR = $0D
.equ UDR0 = $0C
.equ UCSR0A = $0B
.equ UCSR0B = $0A
.equ UBRR0L = $09
.equ ACSR = $08
.equ ADMUX = $07
.equ ADCSR = $06
.equ ADCH = $05
.equ ADCL = $04
.equ PORTE = $03
.equ DDRE = $02
.equ PINE = $01
.equ PINF = $00
Вроде в железе они идут подряд, но в описаниях есть скачок $3F — $60.
Это связано с тем, что РВВ идут после РОН, и если абсолютный адрес у младшего РВВ по-настоящему $20 (для команды STS/LDS), то относительный (с которым работают команды IN/OUT) — $00.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Мikа
- Потрогал лапой паяльник
- Сообщения: 343
- Зарегистрирован: Пн апр 01, 2013 15:13:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Не могу сказать что понял всё (в силу своего не знания), но в целом понятно в чём дело, спасибо 
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
В двух словах: для разных команд должен быть разный адрес регистра.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- КотЭ Мужчина
- Открыл глаза
- Сообщения: 64
- Зарегистрирован: Ср июн 20, 2012 10:49:46
- Откуда: Україна, Черкаська область
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Драсте радиохвостатые! У меня трабла - сварганил я самодельную плату, на фото (ну отладочной ее никак не назвеш, из-за ее аскетичности), прошиваю ATmega8A програматором USBASP 2.0 , дык все прошивки, написанные на Си, работают на ура, все мигает тыры-пыры, а когда асемблерные прошивки запихаю, то ничерта не работает. Прошивка осуществляется через ProgISP, там в Low-программировании вообще не распознается МК, а на High-программировании распознается и проги норм работают тока сишные. В чем проблема? Может дело в том, што у меня светодиод, што висит на SCK, без резистора прям на землю, и давит сигнал?

Betelgeuse
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
светодиоды - да, нужно через резисторы подключать. А вот то, что прошивка не работает - так это не правильно написанная прошивка.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Скачай себе eXtreme Burner AVR и не мучайся.КотЭ Мужчина писал(а): прошиваю ATmega8A програматором USBASP 2.0
http://extreme-burner-avr.software.info ... d/?ca73472
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
- КотЭ Мужчина
- Открыл глаза
- Сообщения: 64
- Зарегистрирован: Ср июн 20, 2012 10:49:46
- Откуда: Україна, Черкаська область
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Асмовая прошивка правильно составлена, в Протеусе работает, работала и в МК, зашитая Програматором Громова +Uniprof. Но так как у меня китаянский USBASP, то с нима работает тока ProgISP. Пишу в AVR Studio 4, 5, Atmel Studio 6 - результат один и тот же. Сишные прошивки работают, а асмовые - нет.
Betelgeuse
- КотЭ Мужчина
- Открыл глаза
- Сообщения: 64
- Зарегистрирован: Ср июн 20, 2012 10:49:46
- Откуда: Україна, Черкаська область
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Забыл еще сказать - асмовые прошивки, у которых нет задержек типо
Delay:
out PortC,r16;
ldi r17,0;
ldi r18, 1;
ldi r19,3;
Loop:;.... и тд и тп
Из задержками не хотят работать мигалки - первый светоидиот загорается и все, ступор.
Delay:
out PortC,r16;
ldi r17,0;
ldi r18, 1;
ldi r19,3;
Loop:;.... и тд и тп
Из задержками не хотят работать мигалки - первый светоидиот загорается и все, ступор.
Betelgeuse
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
мля, ну, как может программатор залить вам кривую прошивку? что вы тут сказки рассказываете? либо он вообще ее не зальет, либо зальет полностью. Есть вариант залить с ошибкой, если скорость очень большая, но для этого есть галочка "верификация" записи и кнопка "сравнить".
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
В шпротеусе говоришь работает? А кто биты конфигурации будет задавать правильно? Задержки дял какой частоты рассчитываются, а на какой частоте работает контроллер?(реально работает, а не то что вы думаете что он работает).
"загорелся и все..." а может, он вместо секунды горит 30 секунд, вы просто не дожидаетесь когда задержка отработает. Проверьте все что влияет на выполнение программы, каждый бит и каждую особенность.
"загорелся и все..." а может, он вместо секунды горит 30 секунд, вы просто не дожидаетесь когда задержка отработает. Проверьте все что влияет на выполнение программы, каждый бит и каждую особенность.
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А может наоборот, из-за маленькой задержки мигает с такой большой частотой, то Вам кажется, что он горит постоянно
- Леонид Иванович
- Друг Кота
- Сообщения: 4779
- Зарегистрирован: Сб апр 02, 2011 12:40:46
- Откуда: Минск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Мikа писал(а):я хочу для себя понять, чем таким отличается STS от out?
Чтобы не путаться, можно сделать макросы, которые будут сами подставлять in/lds или out/sts там, где нужно:
Код: Выделить всё
.macro input
.if @1 < 0x40
in @0, @1
.else
lds @0, @1
.endif
.endm
.macro output
.if @0 < 0x40
out @0, @1
.else
sts @0, @1
.endif
.endm
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
КотЭ Мужчина писал(а):у меня китаянский USBASP, то с нима работает тока ProgISP
У меня с нима работает AVRDUDEPROG.
Docendo discimus
- КотЭ Мужчина
- Открыл глаза
- Сообщения: 64
- Зарегистрирован: Ср июн 20, 2012 10:49:46
- Откуда: Україна, Черкаська область
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ТАк как у меня мк пашет без внешнего кварца, то частота стандартная - 1 МГц. Ждал пол часа, думал может мигнет - нифига. Посмотрите, я ж выложил исходник задержки, именно эту хрень я и заливал в мк. Пробовал совместить из AVRDUDEPROG - нет, китаец за 6$ понимает тока ProgISP. Но надеюсь программатор тут ни при чем. Например в Си я постоянно задаю #define F_CPU 1000000UL, то работает. А блин асмовые чмошники...Кстати, не работают те проги, у которых нету задержек - если прото на биты регистра кинуть единички, штоб светы загорелись - все работает. Дальше мигалок я еще не лазил 
Betelgeuse
- КотЭ Мужчина
- Открыл глаза
- Сообщения: 64
- Зарегистрирован: Ср июн 20, 2012 10:49:46
- Откуда: Україна, Черкаська область
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
исходник моей последней прошивки
.include "m8adef.inc"
.cseg
.org 0x00;
;===
Init:
ldi r16,0xFF;
out DDRB,r16;
out DDRC,r16;
;----------
Start:
sbi PortB,1;
sbi PortB,5;
rcall Delay;
cbi PortB,1;
cbi PortB,5;
rcall Delay;
rjmp Start;
;===
Delay:
ldi r17,0;
ldi r18,2;
ldi r19,2;
Loop:
dec r17
brne Loop
dec r18
brne Loop;
dec r19
brne Loop;
ret;
.include "m8adef.inc"
.cseg
.org 0x00;
;===
Init:
ldi r16,0xFF;
out DDRB,r16;
out DDRC,r16;
;----------
Start:
sbi PortB,1;
sbi PortB,5;
rcall Delay;
cbi PortB,1;
cbi PortB,5;
rcall Delay;
rjmp Start;
;===
Delay:
ldi r17,0;
ldi r18,2;
ldi r19,2;
Loop:
dec r17
brne Loop
dec r18
brne Loop;
dec r19
brne Loop;
ret;
Betelgeuse
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
хм. А что ты хотел получить? твоя задержка даёт 4 милисекунды... как ты собирался увидеть мигание?
- КотЭ Мужчина
- Открыл глаза
- Сообщения: 64
- Зарегистрирован: Ср июн 20, 2012 10:49:46
- Откуда: Україна, Черкаська область
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ibiza11 писал(а):У него стек не инициализирован.
ВО, уважаю, братишка!
Помогло, Спасиба!
Betelgeuse