кстати уважаемые коты
нужна была математика для AVR, так многие мои вопросы будут сняты, скан хороший кому нужна лежит сдесь http://www.gsm-forum.name/forum/viewtop ... ccaf2152daМикроконтроллеры AVR - Хартов В.Я.,
нужна была математика для AVR, так многие мои вопросы будут сняты, скан хороший кому нужна лежит сдесь http://www.gsm-forum.name/forum/viewtop ... ccaf2152daМикроконтроллеры AVR - Хартов В.Я.,
в AVR для этого можно использовать SBIS и SBICipkin писал(а):хочу посчитать импульсы приходящие на вход tinny2313
допустим portb1 кроме того некоторые разряды этого порта работают на вывод подскажите какими командами (ассемблер) воспользоваться для реализации данной задачи
в мк51 я пользовался JNB и JB
Во-первых, что значит не работает? симптомы опишите.poff писал(а):Доброго времени суток...
Если оставить одну строку rcall delay (выделено красным), то програмуля работает, а если две подряд, то нехочет. Где грабли зарыты? Заранее благодарен.
По первому впечатлению ситуация малореальна. Попробовал в эмуляторе (Vmlab) - все работает, светодиоды мигают, никакой разницы между одним вызовом и двумя не обнаружил. Хотя нужно сказать - довольно рискованно надеятся, что флаг С через который происходит сдвиг регистра никто не попортит. Я бы его в стек запихнул.poff писал(а):Доброго времени суток... Пытаюсь освоить Mega8535. Для начала решил помигать светодиодами. Обнаружил следующее: при обращении к одной и той же подпрограмме два и более раза подряд програмуля не работает.
Вот еще мыслишка появилась с учетом результатов симуляции dremov. Не занаю есть ли в меге8535 WDT, но если есть и если его можно жестко включить фьюзами, то возможно задержка осуществляемая двумя подпрограммами больше периода WDT и он просто напросто срабатывает и сбрасывает контроллер.poff писал(а):Доброго времени суток.... Где грабли зарыты? Заранее благодарен.
Проверьте фьюзы я уточнил сторожевой таймер в меге8535 есть, и если он включен (запрограммирован фьюз WDTON), то может быть описанное вами поведение. Проверить перезагружается ли контроллер просто - сделайте на один из портов подтяжку из резистора (пусть будет 5 кОм) и в вашей программе сразу после инициализации стека настраивайте эту ногу на выход и устанавливайте в 0. В результате если происходит ресет то на ноге будут периодические переходы из 1 в 0. Если не чем посмотреть (я имею ввиду осциллограф) то можно сделать так как в файле вложения (естестевенно ногу, подключенную к светодиоду, как и в первом случае нужно настроить на выход и установить в 0, сразу после инициализации стека) если светодиод будет "гореть в полнакала" или мигать, то значит происходит сброс (по какой-либо из причин) и переинициализируется регистр temp в результате он может никогда не достигнуть 0. Если светодиод будет гореть ровно значит грабли в другом местеpoff писал(а):Благодарен dremov и smak за сочуствие в моем небольшом горе... В симуляторах свою програмулю я тоже проверял, все работает. На макете диоды мигают только если на подпрограмму ссылаться один раз. Рассавлял програмные метки типа sbi/cbi по ходу программы - должны были зажигаться/гаснуть дополнительные светодиоды при проходе определенных мест в программе. Так вот,приналичии двух обращений к подпрограмме, программа останавливается перед перед первым переходом rcall
Еще два предположения:poff писал(а):to Smac Все проверил WDT выключен. Очевидно, грабли в другом месте. Попытался проделать тоже на MEGA32 - эфект тот-же.
Код: Выделить всё
.cseg
.org 0
rjmp Reset
;****************************
.org 0x100 ; размещаем дальнейшую программу с адреса 100 hex
Reset: ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp
и далее ваша программа.Что значит "останавливается" ????? Она может зациклиться на каком-либо блоке, или одной команде с переходом. Не в спящий же режим переходит!poff писал(а):Так вот,приналичии двух обращений к подпрограмме, программа останавливается перед перед первым переходом rcall
Код: Выделить всё
rcall delay ldi temp,9Код: Выделить всё
rol temp3Код: Выделить всё
bst temp3,7
lsl temp3
bld temp3,0Вот это очень странно. Такое может быть если код не влезает в кристалл.poff писал(а):... Пробовал переносить (по Вашему совету) программу на 100 шагов вперед - даже рабочий код вообще не работает !!!...
Код: Выделить всё
.cseg
.org 0
rjmp Reset
;****************************
Reset: ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp
ser Temp ; настраиваем
out DDRB,Temp ; порт B на вывод
; основная программа
clr temp
ldi temp3, (1<<PORTB4); маска для "мигания" выводом PORTB4
start:
in temp, PORTB ; читаем порт
eor temp, temp3 ; применяем маску тем самым инвертируем нужный бит
out PORTB, temp ; выводим в порт
rcall Delay
rcall Delay
rjmp start
;подпрограмма задержки
Delay: ldi temp1,0
ldi temp2,0
Loop: dec temp1
brne Loop
dec temp2
brne Loop
ret Скорей всего именно это!обычно проблема заключается в человеческой невнимательности