а чем собсно TST не устраивает, работает со всеми регистрами.shads писал(а): например для сравнения с 0 регистров нижней половины.
.....
ну и, простите, грузить регистры "00" или "FF", это уже совсем не по асмовски, есть же команды CLR и SER
а чем собсно TST не устраивает, работает со всеми регистрами.shads писал(а): например для сравнения с 0 регистров нижней половины.
.....
Нафига такие частоты?.. 1 МГц хватает сполна.ploop писал(а):например для 8МГц
Заметано!ILYAUL писал(а):subi Zl,-2
Не совсем понял..... Хотя вижу что 2 блока EEPgWr и EEPgRd практически одинаковы..... Но не понял как их объединить.....ILYAUL писал(а):Из 2 подпрограмм на запись и чтение EEPROM - сделайте только 2 для обоих случаев - b можно назначать не в теле подпрограммы а перед входом в нее т.е 1 - запишите байт , b=40 - 40 байтов
Хе, смотря для чего. Иногда нужна производительность. Грамотно разруливая прерывания + основной код (например на флаговом автомате с приоритетами) можно в, казалось бы, слабый контроллер такого упихать! Плюс ассемблер даёт неплохую такую экономию флеша. Но и времени убивает немеряно...Нафига такие частоты?.. 1 МГц хватает сполна.
Это я к примеру привел (да и честно говоря, упомянутыми вами командами, сильно не заморачивался, надо будет пошшупать (а еще честнее сказать я вообще на них не обратил внимания)).GP1 писал(а):а чем собсно TST не устраивает, работает со всеми регистрами. Ну и, простите, грузить регистры "00" или "FF", это уже совсем не по асмовски, есть же команды CLR и SER
Зато в итоге ПРОИЗВЕДЕНИЕ получается..... (в отличие от С (хотя это субъективное мнение, т.к. на контроллерах я его еще не шшупал))ploop писал(а):можно в, казалось бы, слабый контроллер такого упихать! Плюс ассемблер даёт неплохую такую экономию флеша. Но и времени убивает немеряно...
я бы рекомендовал про инициализацию и SRAM и R0-R31 почитать у ДиХалта, там сделано очень красиво порядка 15-20 байт флеша, и все память чиста как девственницаshads писал(а): А так в большинстве случаев эти константы еще используются для иниц регистров в SRAM.
Код: Выделить всё
;очистка РОН и SRAM
ldi a,0
ldi zh,0
ldi zl,0 ;начало RON
ClrRam: st z+,a
cpi zl,30 ;достигли ли конца поля RON
brne ClrRam1
ldi zl,cSramStrt ;продолжать с начала SRAM
ClrRam1: cpi zl,cSramStrt+128 ;достигли ли конца поля SRAM
brne ClrRam
Код: Выделить всё
;очистка РОН и SRAM
ldi zh,0
ldi zl,0 ;начало RON
ClrRam: st z+,zh
cpi zl,30 ;достигли ли конца поля RON
brne ClrRam1
ldi zl,cSramStrt ;продолжать с начала SRAM
ClrRam1: cpi zl,cSramStrt+128 ;достигли ли конца поля SRAM
brne ClrRam
Прыгает на то место кода, адрес которого содержится в регистровой паре Z.igor-x писал(а):что происходит в случае прерывания Timer 1 capture ? некий Indirect Jump to (Z)
shads писал(а): Но не понял как их объединить.....
Код: Выделить всё
MAIN:
ldi zl,cSRAMStrt+sWireDevN
mov EEAdr,Const00
ldi b,XXX
rcall EEBWr
.............
EEBWr: sbic eecr,eewe
rjmp EEBWr
cli
out eear,EEAdr
out eedr,a
sbi eecr,eemwe
sbi eecr,eewe
dec b
breq EEBEnd
inc EEAdr
ld a,z+
rjmp EEBWr
EEBEnd:
sei
retчто-то вААбще не вкурил о чем этоigor-x писал(а):подскажите пож. как выполняется выделенная строка (даташит почитал - не совсем понял)
.ORG $00
RESET:
RJMP START ;
RETI ; On Interrupt 0
RJMP GO_ISR1 ; On Interrupt 1 прерывание при нажатии кнопки "РЕЖИМ"
IJMP ; Timer 1 capture
RETI ; Timer 1A compare
NOP ; Timer 1B compare
ADIW XL, 1 ; Timer 1 overflow
что происходит в случае прерывания Timer 1 capture ? некий Indirect Jump to (Z)
Я тоже не знаю, но на всякий случай очищаю..... Я чуть раньше спрашивал, но чето никто не ответил, после выполнения reset, все регистры обнулены, или там мусор может быть? Если второе, то однозначно лучше в начале все почистить, чем потом отдельно писать нули туда где они должны быть (а таких регистров которые при старте должны быть в 0, уйма)Gudd-Head писал(а):Эммм... Всегда было интересно, зачем очищать ОЗУ?![]()
Так делает Кейловский компилятор.
Это так...Gudd-Head писал(а):Эммм... Всегда было интересно, зачем очищать ОЗУ?![]()
Так делает Кейловский компилятор.
Что значит "после выполнения reset"? Если после подачи питания то да, в ОЗУ лежит мусор.shads писал(а):после выполнения reset, все регистры обнулены, или там мусор может быть?
Если где-то должны быть нули, то естессно их надо туда писать, а не полагаться на то, что они там будут.shads писал(а):лучше в начале все почистить, чем потом отдельно писать нули туда где они должны быть
В симуляторе-то как раз везде одни нули.GP1 писал(а):в симуляторе удобней наблюдать, ИМХО
Что-то, до боли, знакомое...igor-x писал(а):подскажите пож. как выполняется выделенная строка
Каким образом? Помоему что LDI A,0 что CLR A суть одно.....GP1 писал(а):shads замени ldi на clr сократишь еще на пару-тройку байтов
Это не очевидно для компилятора, вот и ругается, ставьте вместо zh const00, и все.shads писал(а):Дак, компилятор ругается: "результат может быть непредсказуемым", и не дает ходу, хотя все там предсказуемо, zh остается все время нулем.....
решил адаптировать Ваш измеритель для работы без индикатора..akl писал(а): Что-то, до боли, знакомое...![]()