Страница 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

Код: Выделить всё

MOVWF CMCON1         ; Load EEDATA with value
Мне казалось, что для данных регистр 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 передать параметр.

Код: Выделить всё

test  macro  table
       Error "table error"
       endm
Хотелось бы, чтобы сообщение было не "table error", а имя конкретной таблицы переданной в параметре макросу.

т.е. вызвав в программе

Код: Выделить всё

    test    chartable
получить 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
Потому что макрос - это замена текста. Грубо говоря одной строкой Вы заменяете кусок кода. Ну и естественно, два одинаковых кода с двумя одинаковыми метками вызовет ошибку, т.к. метки должны быть с уникальным именем.
Можно передавать в макрос ещё один параметр - имя метки. Иначе никак. :roll:

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-ми, а у некоторых всего двумя уровнями. И компилятор не сможет вас предупредить, если вы перешагнете эту границу.