Проблема во включаемом файле tn2313def.inc. Посмотрите файл в директории АВРстудии ...atmel\avr tools\avrassembler2\appnotes\tn2313def.inc
. У меня студия версии 4 с чем-то, там включаемый файл берется из директории ассемблер 2 (!!!). А программа будет работать как указал товарищ rig.
Для того, чтобы светодиод замигал медленнее надо добавить стандартную задержку:
добавим еще один используемый регистр
- Код: Выделить всё
.def temp2 =r17
и вот напишем основной цикл так:
- Код: Выделить всё
Start:
sbi PortB,0 ; Включаем сид 1
;***************************************************************************
;*************** код задержки после включения светодиода******
;***************************************************************************
ldi temp2, 100 ; загружаем в регистр (назовем его старшим) число 100
loop_mark_1: ; вводим первую вспомогательную метку
ldi temp, 100 ; загружаем во второй (младший) регистр число 100
loop_mark_2: ; вводим вторую вспомогательную метку
subi temp, 1 ; декрементируем младший регистр
brne loop_mark_2 ; если он не обнулен- вычитаем еще раз и так до тех пор пока не обнулится
subi temp2, 1 ; гогда младший регистр обнулился, декрементируем старший
brne loop_mark_1 ; если старший регистр не равен нулю - снова загружаем в младший регистр число 100 и повторяем вычитания
; если старший регистр равен нулю- переходим в выключению светодиода
cbi portB,0 ; Выключаем сид 1
;***************************************************************************
;*************** код задержки после выключения светодиода******
;***************************************************************************
ldi temp2, 100 ; загружаем в регистр (назовем его старшим) число 100
loop_mark_1_: ; вводим первую вспомогательную метку
ldi temp, 100 ; загружаем во второй (младший) регистр число 100
loop_mark_2_: ; вводим вторую вспомогательную метку
subi temp, 1 ; декрементируем младший регистр
brne loop_mark_2_ ; если он не обнулен- вычитаем еще раз и так до тех пор пока не обнулится
subi temp2, 1 ; гогда младший регистр обнулился, декрементируем старший
brne loop_mark_1_ ; если старший регистр не равен нулю - снова загружаем в младший регистр число 100 и повторяем вычитания
; если старший регистр равен нулю- переходим в выключению светодиода
rjmp Start ; Возврат к метке Start
Задержку можно расчитать точно по тактам кварца и времени выполнения команд. Вычитание занимает 1 такт, проверка условия с переходом занимает 1 такт если условие не выполнено, и 2 такта, если выполнено. Итого, задержка будет примерно 100*100*3 ( 3 это вычитание и переход к метке loop_mark_2) + 100*3 ( это переход к метке loop_mark_1 и загрузка в младший регистр сотни).
Надеюсь, изложил понятно.
P.S. Господа, "учите си" в этой теме звучит как у известного юмориста
-Йогурт свежий?
-Грушовый.