LADR_0x0005
BSF STATUS,RP0 ; !!Bank Register-Bank(0/1)-Select
BCF STATUS,RP1 ; !!Bank Register-Bank(2/3)-Select
MOVLW 0x20 ;ЗАгрузили смещение
MOVWF FSR ;Содержимое регистра W пересылается в регистр f
LADR_0x0026
MOVF INDF ;Содержимое регистра f пересылается в регистр W
MOVWF CMCON1 ; Load EEDATA with value
MOVF FSR,0
MOVWF EEADR ; Load EEPROM adress to write
BSF EECON1,2 ; write enable
MOVLW 0x55 ; b'01010101' d'085' "U"
MOVWF EECON2 ; !!Bank!! Unimplemented - EECON2
MOVLW 0xAA ; b'10101010' d'170'
MOVWF EECON2 ; !!Bank!! Unimplemented - EECON2
BSF EECON1,1 ; WRITE
LADR_0x023B
BTFSC EECON1,1 ; Is it written yet?
GOTO LADR_0x023B
INCF FSR,F
movlw 0x2A
subwf FSR, w
bnz LADR_0x0026
RETURN
Не читается ОЗУ, вместо него в EEDATA подставляется текущее значение FSR.
Прогонял в picsimulator, в нем еще почемуто не сбрасывается флаг EECON1.1 так и должно быть или где-то у меня косяк?
Особо не вникал. Во-первых надо быть внимательнее с банками и операндами. Банки сами смотрите, кристалл не указан, а у разных он в разных. А что бросилось в глаза:
Мне казалось, что для данных регистр EEDATA, а cmcon - управление компараторами - проверьте для своего кристалла.
Короче потренируйтесь еще, большинство таких вещей надо пройти самостоятельно. Заодно научитесь пользоваться симуляторами.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
получить Error [101] chartable error.
хочу эту конструкцию использовать для контроля пересечения таблицей 256-словной границы. Чтобы не только компиляция прерывалась, но и указывало в каком месте код уполз.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Люди добрые помогите. Собирал простенькую схемку на МК PIC 12F675 её нужно прошить. Прошивка написана на асме но проблема в том, что в асме я не разбираюсь
код:
Всем принвет! У меня такой вопрос: я пишу макро определения в коде которого есть метки ну и соответствующие этим меткам команды goto, дак из-за этих меток я могу только одинажды использовать макро определение в тексте программы. Как обойти эту бяку? Для ясности вопроса могу код предоставить.
Потому что макрос - это замена текста. Грубо говоря одной строкой Вы заменяете кусок кода. Ну и естественно, два одинаковых кода с двумя одинаковыми метками вызовет ошибку, т.к. метки должны быть с уникальным именем.
Можно передавать в макрос ещё один параметр - имя метки. Иначе никак.
Яхно. Вот наверно почему не любят goto в С. Мой макрос своего рода функция у которой есть присущие ей аргументы и в тексте вызывается много раз. Без такого сокращения никак иначе не хватает памяти программ. Как же быть?
В макросе может быть метка объявлена локальной. Только она будет внутри метки и снаружи макроса недоступна. Если память не изменяет, директива LOCAL <label1>, <label2>...
вот нашел:
LOCAL
LOCAL <symbol>[[=<expression>], [<symbol>[=<expression>]]*]
Declares <symbol> as local to the macro that’s currently being defined. This means that further occurrences
of <symbol> in the macro definition refer to a local variable, with scope and lifetime limited to
the execution of the macro.
See also: MACRO, ENDM
uldemir тебе большое мяурси директива local работает, но совокупностью macro и local память программ не сэкономишь ведь после компиляции все макросы разворачиваются во всю свою шир при каждом вызове и увеличивается очень сильно общее количество команд программы, придётся наверно переходить на Си и функциями решать проблемку.
Ну, разумеется, не сэкономишь. макрос, это всего-лишь способ сделать текст программы более наглядным, заменив повторяющиеся куски одной строчкой. Если надо экономить память программ, то, возможно, вам надо подумать о подпрограммах. Только не забывайте, что стек у PIC-ов ограничен: у некоторых контроллеров 8-ми, а у некоторых всего двумя уровнями. И компилятор не сможет вас предупредить, если вы перешагнете эту границу.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."