Полная версия этой страницы:
Не могу зажечь лампочку
roland07
May 28 2011, 10:12
Вообщем, мозг почти лопнул..
Хочу зажечь лампочку. Просто включить.
Стартер кит AT90USBKey. На ней кристал AT90USB1287.
Компилятор Avr Studio 4.18
Вообщем код такой
SER R24
OUT 0x0A,R24
OUT 0x0B,R24
RJMP PC-0x0000
Пробовал писать на С:
#include <avr/io.h>
void main()
{
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
PORTD = 0xFF;
}
Когда отлаживаю, все работает... Дизассемблер встроенный тож все нормально показывает... Загорается лампочка, которая висит на порту D и программа зацикливается...
Когда гружу в железку эта лампочка моргает...причем глазом заметно, т.е. частота моргания не очень высокая... Точно такие же строчки кода в компиляторе CVAvr работает как надо и лампочка на железке просто горит..
Мне очень нужен первый компилятор...Помогите, я уже не знаю что делать...наверняка мелочь какую-то не заметил...
Заранее спасибо..
ArtemKAD
May 28 2011, 10:20
Раз моргает... Могу предположить - в фьюзах установлет всегда включенный WDT, а значит WDR не хватает...
konstan
May 28 2011, 13:18
В конце программы необходимо поставить команду while(1){;} - зацикливание
roland07
May 28 2011, 14:47
я пробовал ставить for(;;) {} в конце. Результат тот же..
И почему на симултяторе все нормально, дизассемблер тоже показывает что все нормально... Программма на железке в конце сбрасывается в 0 адрес что ли?
Вы не указали к какой именно ноге порта D подключена лампочка... Обратите внимание на альтернативные функции ножек этого порта. Скорее всего мешает разрешенный JTAG.
M_Andrey
May 28 2011, 18:16
Цитата(roland07 @ May 28 2011, 18:47)

я пробовал ставить for(;;) {} в конце. Результат тот же..
И почему на симултяторе все нормально, дизассемблер тоже показывает что все нормально... Программма на железке в конце сбрасывается в 0 адрес что ли?
Вам же уже говорили - проверьте Watchdog Timer!
OlegPowerC
May 31 2011, 08:43
Цитата(M_Andrey @ May 28 2011, 22:16)

Вам же уже говорили - проверьте Watchdog Timer!
В конце программы бесконечный цикл и сброс таймера
M_Andrey
May 31 2011, 08:59
Цитата(OlegPowerC @ May 31 2011, 12:43)

В конце программы бесконечный цикл и сброс таймера
Так?
while(1) { _WDR(); /* Watchdog Reset */ }
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.