У меня вообще иногда складывается ощущение, что ARV приплачивают за то, чтобы он целыми днями читал стандарты и осваивал что-то новое.
Ассемблер (ASM) для AVR в вопросах и ответах
- Реклама
Если на асме и без пошаговой отладки - то Geany лучше всех! 
Вовсе не обязательно. Просто иногда как забуришся в какие-нибудь дебри, почитаешь стандарты, "вкуришь" как следует, разберёшься. А потом можно и статью написать. По мотивам своих изысканий и разбирательств, так сказать. И чем человек опытнее тем больше у него изысканий о которых он может рассказать.ИС-пытатель писал(а):У меня вообще иногда складывается ощущение, что ARV приплачивают за то, чтобы он целыми днями читал стандарты и осваивал что-то новое.
ИС-пытатель, ты, видать, ещё просто не дорос до такого состояния просветления
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
ИС-пытатель писал(а):У меня вообще иногда складывается ощущение, что ARV приплачивают за то, чтобы он целыми днями читал стандарты и осваивал что-то новое.

если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Так скока мне лет, и скока ARV! )) У него фора пол моей жизни! ))Kavka писал(а):ИС-пытатель, ты, видать, ещё просто не дорос до такого состояния просветления![]()
![]()
- Реклама
почему именно он ? чем он так хорош ?ANALOG писал(а):Если на асме и без пошаговой отладки - то Geany лучше всех!
Tell Me The Truth
Ну по сравнению с большинством IDE преимущество в том, что не нужно создавать проекты/что-либо еще кроме исходника.FreshMan писал(а):почему именно он ? чем он так хорош ?
По сравнению с обычными текстовыми редакторами - в том, что можно так настроить, чтоб прошивка компилировалась/прошивалась в один клик мышки.
Не стану утверждать, что это самый лучший вариант (отсутствие отладки все-таки серьезный минус), возможно есть что-то и покруче, но меня вполне устраивает
Эта среда рассчитана на однофайловые исходники? Если да, то это только для "поиграться".
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Добрый день, Коты. Не так давно я задавался вопросом, почему у меня не работают прерывания 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.
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
Надо лезть в 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Спойлер
Код: Выделить всё
;*****************************************************************************
; 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
Это связано с тем, что РВВ идут после РОН, и если абсолютный адрес у младшего РВВ по-настоящему $20 (для команды STS/LDS), то относительный (с которым работают команды IN/OUT) — $00.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Не могу сказать что понял всё (в силу своего не знания), но в целом понятно в чём дело, спасибо 
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Потому что хочу научиться.
В двух словах: для разных команд должен быть разный адрес регистра.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Драсте радиохвостатые! У меня трабла - сварганил я самодельную плату, на фото (ну отладочной ее никак не назвеш, из-за ее аскетичности), прошиваю ATmega8A програматором USBASP 2.0 , дык все прошивки, написанные на Си, работают на ура, все мигает тыры-пыры, а когда асемблерные прошивки запихаю, то ничерта не работает. Прошивка осуществляется через ProgISP, там в Low-программировании вообще не распознается МК, а на High-программировании распознается и проги норм работают тока сишные. В чем проблема? Может дело в том, што у меня светодиод, што висит на SCK, без резистора прям на землю, и давит сигнал?

Betelgeuse
светодиоды - да, нужно через резисторы подключать. А вот то, что прошивка не работает - так это не правильно написанная прошивка.
Скачай себе eXtreme Burner AVR и не мучайся.КотЭ Мужчина писал(а): прошиваю ATmega8A програматором USBASP 2.0
http://extreme-burner-avr.software.info ... d/?ca73472
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Асмовая прошивка правильно составлена, в Протеусе работает, работала и в МК, зашитая Програматором Громова +Uniprof. Но так как у меня китаянский USBASP, то с нима работает тока ProgISP. Пишу в AVR Studio 4, 5, Atmel Studio 6 - результат один и тот же. Сишные прошивки работают, а асмовые - нет.
Betelgeuse
Забыл еще сказать - асмовые прошивки, у которых нет задержек типо
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
мля, ну, как может программатор залить вам кривую прошивку? что вы тут сказки рассказываете? либо он вообще ее не зальет, либо зальет полностью. Есть вариант залить с ошибкой, если скорость очень большая, но для этого есть галочка "верификация" записи и кнопка "сравнить".
В шпротеусе говоришь работает? А кто биты конфигурации будет задавать правильно? Задержки дял какой частоты рассчитываются, а на какой частоте работает контроллер?(реально работает, а не то что вы думаете что он работает).
"загорелся и все..." а может, он вместо секунды горит 30 секунд, вы просто не дожидаетесь когда задержка отработает. Проверьте все что влияет на выполнение программы, каждый бит и каждую особенность.
"загорелся и все..." а может, он вместо секунды горит 30 секунд, вы просто не дожидаетесь когда задержка отработает. Проверьте все что влияет на выполнение программы, каждый бит и каждую особенность.
А может наоборот, из-за маленькой задержки мигает с такой большой частотой, то Вам кажется, что он горит постоянно


