Страница 1 из 1
PIC и ASM
Добавлено: Ср окт 26, 2011 09:13:36
shame
Добродень.
Есть вопрос, как 10 байт ОЗУ ПИКа скопировать в епром на асме?
Решил так:
Код: Выделить всё
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 так и должно быть или где-то у меня косяк?
Re: PIC и ASM
Добавлено: Ср окт 26, 2011 09:27:02
uldemir
Особо не вникал. Во-первых надо быть внимательнее с банками и операндами. Банки сами смотрите, кристалл не указан, а у разных он в разных. А что бросилось в глаза:
Код: Выделить всё
MOVF INDF ;Содержимое регистра f пересылается в регистр W
не пересылается. по умолчанию назначение F
Мне казалось, что для данных регистр EEDATA, а cmcon - управление компараторами - проверьте для своего кристалла.
Короче потренируйтесь еще, большинство таких вещей надо пройти самостоятельно. Заодно научитесь пользоваться симуляторами.
Re: PIC и ASM
Добавлено: Ср окт 26, 2011 10:09:47
shame
12f683
Исправил:
Код: Выделить всё
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
movfw 0x00
MOVWF EEDAT ; Load EEDATA with value
MOVF FSR,0
MOVWF EEADR ; Load EEPROM adress to write
Работает, спасибо большое!
Re: PIC и ASM
Добавлено: Ср окт 26, 2011 10:31:52
uldemir
в мелких вопросах моя проблемка прошла незамеченной... повторю тут.
Поможет ли кто в таком вопросе. Как в микрочиповском макроассемблере директиве
Error передать параметр.
Хотелось бы, чтобы сообщение было не "table error", а имя конкретной таблицы переданной в параметре макросу.
т.е. вызвав в программе
получить Error [101] chartable error.
хочу эту конструкцию использовать для контроля пересечения таблицей 256-словной границы. Чтобы не только компиляция прерывалась, но и указывало в каком месте код уполз.
Re: PIC и ASM
Добавлено: Вс дек 11, 2011 11:41:35
AngelLeo
Люди добрые помогите. Собирал простенькую схемку на МК PIC 12F675 её нужно прошить. Прошивка написана на асме но проблема в том, что в асме я не разбираюсь
код:
#include <pic.h>
__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT \
& UNPROTECT & BORDIS);
int i, j, k;
int fourBitLFSR, sixBitLFSR;
main()
{
fourBitLFSR = 1; // Start at 1
sixBitLFSR = 1; // Start at 1
GPIO = 0;
ANSEL = 0; // Turn off ADC
TRISIO = 0;
while(1 == 1) // Loop Forever
{
for (k = 0; k < fourBitLFSR; k++) // Delay 0.1s x 4 Bit LFSR
for (i = 0; i < 255; i++)
for (j = 0; j < 2; j++);
GPIO = sixBitLFSR | fourBitLFSR; // Maximize Number of LEDs on
fourBitLFSR = ((fourBitLFSR << 1) & 0x0F) + ((fourBitLFSR >> 3) ^ ((fourBitLFSR >> 2) & 1));
sixBitLFSR = ((sixBitLFSR << 1) & 0x3F) + ((sixBitLFSR >> 5) ^ ((sixBitLFSR >> 4) & 1));
}
}
По идее микраха просто поджигает диоды в разнобой как я понял
Беда что ассемблер выдает ошибки а мне для прошивки нужен hex файл с этим кодом (точнее с рабочим)
Помогите, не оставьте юного ученика...
Re: PIC и ASM
Добавлено: Вс дек 11, 2011 11:43:59
uldemir
Це не асм, це Це т.е. C
Re: PIC и ASM
Добавлено: Вс дек 11, 2011 11:58:57
AngelLeo
uldemir писал(а):Це не асм, це Це т.е. C
(((
еще не легче
Я только в Delphi
Re: PIC и ASM
Добавлено: Пн дек 12, 2011 09:16:56
urry
это хайтек.
Re: PIC и ASM
Добавлено: Ср дек 14, 2011 08:00:41
banyok.
Всем принвет! У меня такой вопрос: я пишу макро определения в коде которого есть метки ну и соответствующие этим меткам команды goto, дак из-за этих меток я могу только одинажды использовать макро определение в тексте программы. Как обойти эту бяку? Для ясности вопроса могу код предоставить.
Re: PIC и ASM
Добавлено: Ср дек 14, 2011 08:36:54
Аlex
Потому что макрос - это замена текста. Грубо говоря одной строкой Вы заменяете кусок кода. Ну и естественно, два одинаковых кода с двумя одинаковыми метками вызовет ошибку, т.к. метки должны быть с уникальным именем.
Можно передавать в макрос ещё один параметр - имя метки. Иначе никак.

Re: PIC и ASM
Добавлено: Ср дек 14, 2011 08:51:43
banyok.
Яхно. Вот наверно почему не любят goto в С. Мой макрос своего рода функция у которой есть присущие ей аргументы и в тексте вызывается много раз. Без такого сокращения никак иначе не хватает памяти программ. Как же быть?
Re: PIC и ASM
Добавлено: Ср дек 14, 2011 08:53:11
banyok.
Имя метки передовал в макрос невыщло(.
Re: PIC и ASM
Добавлено: Ср дек 14, 2011 09:16:43
uldemir
В макросе может быть метка объявлена локальной. Только она будет внутри метки и снаружи макроса недоступна. Если память не изменяет, директива 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
p.s. вот пример из моих программ:
Код: Выделить всё
KEYPRES MACRO key, tolabel
local exlab
movlw 0x11<<key
andwf keyreg, w
bz exlab
andlw 0x10<<key
bnz exlab
bsf keyreg, key+4
goto tolabel
exlab:
ENDM
;
Re: PIC и ASM
Добавлено: Пт дек 16, 2011 07:49:41
banyok.
uldemir тебе большое мяурси директива local работает, но совокупностью macro и local память программ не сэкономишь ведь после компиляции все макросы разворачиваются во всю свою шир при каждом вызове и увеличивается очень сильно общее количество команд программы, придётся наверно переходить на Си и функциями решать проблемку.
Re: PIC и ASM
Добавлено: Пт дек 16, 2011 08:32:38
uldemir
Ну, разумеется, не сэкономишь. макрос, это всего-лишь способ сделать текст программы более наглядным, заменив повторяющиеся куски одной строчкой. Если надо экономить память программ, то, возможно, вам надо подумать о подпрограммах. Только не забывайте, что стек у PIC-ов ограничен: у некоторых контроллеров 8-ми, а у некоторых всего двумя уровнями. И компилятор не сможет вас предупредить, если вы перешагнете эту границу.