AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
23.11.2012, 08:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Программирование AVR, FUSE и все что с этим связано.
Сообщение от ascerdfg
|
А при выполнении программы? Не дожидаясь таймера...
|
Внешние прерывания работают всегда, даже когда генератор контроллера вообще остановлен. Только с ИНТами есть небольшие нюансы в повер-довн, см. даташит
|
|
|
|
23.11.2012, 09:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Программирование AVR, FUSE и все что с этим связано.
Сообщение от rubel
|
Не боитесь нолик переменной timer1 проскочить, если ваша функция(или их набор) :
{что-то делаем; --timer1;}
будет занимать по времени более двух прерываний таймера?
|
А вы не боитесь "что-то" сделать раз 200, если цикл таймера таки больше?
Сообщение от Saadov
|
PHP код:
|
while(1)
{
if(timer1 == 0) {что-то делаем};
if(timer2 == 0) {что-то делаем};
}
|
|
Я не боюсь потому, что во-первых контролирую время выполнения, а во-вторых обычно в прерывании ставлю флаг, а при выполнении условия его сбрасываю. О чём собственно и написал выше.
|
|
|
|
23.11.2012, 16:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.11.2008
Адрес: г.Смоленск
Сообщений: 2,018
Сказал спасибо: 348
Сказали Спасибо 1,024 раз(а) в 552 сообщении(ях)
|
Re: Программирование AVR, FUSE и все что с этим связано.
Сообщение от omercury
|
А вы не боитесь "что-то" сделать раз 200, если цикл таймера таки больше?
Я не боюсь потому, что во-первых контролирую время выполнения, а во-вторых обычно в прерывании ставлю флаг, а при выполнении условия его сбрасываю. О чём собственно и написал выше.
|
А вы про это, я сам использую флаги. А иначе действительно очень много получается одних и тех же действий.
PHP код:
|
int_timer
{
if(time1›0) { --time1; flag = 1; };
};
while(1)
{
If((time1==0)&&(flag)) {flag=0; делаем что-то;};
// и т.д.
};
|
|
|
|
|
24.11.2012, 21:56
|
|
Прохожий
Регистрация: 08.11.2007
Сообщений: 8
Сказал спасибо: 11
Сказали Спасибо 5 раз(а) в 3 сообщении(ях)
|
Re: Программирование AVR, FUSE и все что с этим связано.
C недавних пор интересуюсь темой AVR MCU.
Ранее в этой теме возникала проблемы с фузами. В аттаче - калькулятор Фуз.
А ещё есть курс AVR. Учебный курс.
Отличительная особенность курса - его понятность. На мой взгляд, курс будет полезен как начинающим, так и зубрам.
AVR. Учебный Курс. Конфигурация FUSE бит - конкретно про Fuse-bits в этом курсе.
Последний раз редактировалось ITShark; 24.11.2012 в 22:10.
Причина: Добавление важной Информации
|
|
|
|
25.01.2013, 10:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,832
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: Программирование AVR, FUSE и все что с этим связано.
Не совсем про фьюз, но про АВР.
Пишу в Кодевижн, в обработчике прерывания пытаюсь сделать ассемблерную вставку.
Требуется сделать инкремент/декремент , в зависимости от условия, глобальной переменной типа int описанной в заголовке программы.
Как обрабатывать эту переменную из ассемблера ?
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
25.01.2013, 12:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Программирование AVR, FUSE и все что с этим связано.
Прибавляйте единицу в своем си
Инкремент не даст никакого выигрыша по сравнению с прибавлением единицы, разве что флаги не трогает, но на сях это несущественно
|
|
|
|
25.01.2013, 12:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,832
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: Программирование AVR, FUSE и все что с этим связано.
После Си компилятор гору кода городит. Вот такую.
Исходный код
Код:
|
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(PIND.3==0) // n - буфер чисел с датчика
{ n--; }
if(PIND.3==1)
{ n++; }
} |
И после в асме
Код:
|
.CSEG
_ext_int0_isr:
ST -Y,R22
ST -Y,R23
ST -Y,R26
ST -Y,R30
ST -Y,R31
IN R30,SREG
ST -Y,R30
; 0000 002C
; 0000 002D if(PIND.3==0) // n - буфер чисел с датчика
SBIC 0x10,3
RJMP _0x4
; 0000 002E {
; 0000 002F n--;
LDI R26,LOW(_n)
RCALL __GETD1P_INC
SBIW R30,1
SBCI R22,0
SBCI R23,0
RCALL __PUTDP1_DEC
; 0000 0030 }
; 0000 0031 if(PIND.3==1)
_0x4:
SBIS 0x10,3
RJMP _0x5
; 0000 0032 {
; 0000 0033 n++;
LDI R26,LOW(_n)
RCALL __GETD1P_INC
__SUBD1N -1
RCALL __PUTDP1_DEC
SBIW R30,1
SBCI R22,0
SBCI R23,0
; 0000 0034 }
; 0000 0035
; 0000 0036
; 0000 0037
; 0000 0038 }
_0x5:
LD R30,Y+
OUT SREG,R30
LD R31,Y+
LD R30,Y+
LD R26,Y+
LD R23,Y+
LD R22,Y+
RETI |
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
25.01.2013, 13:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Программирование AVR, FUSE и все что с этим связано.
Мощно...
Поэтому я предпочитаю АСМ...
|
|
|
|
25.01.2013, 14:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: Программирование AVR, FUSE и все что с этим связано.
Если завести локальную переменную и присвоить ей n, то код укоротится немного.
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
|
25.01.2013, 16:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Программирование AVR, FUSE и все что с этим связано.
Да тип 32битный у переменной n, вот оно тужится с 4 байтами
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:35.
|
|