Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Microchip assembler ограничения?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
A. Fig Lee
Нет лишних тысяч баксов, пишу на ассемблере. Пока даже на CCS компайлер за 150 баксов жабу не победил.

Ок, ближе к делу.
Хочется написать чегото типа message map в Виндоус - условно:

ON_CMD 'bg' GOTO Address1
ON_CMD 'ge' GOTO Address2.

'bg' и 'ge' читаются с RS232 порта.

Хочется иметь макро, чтоб потом опять его использовать в другой программе - добавил строчку и готово.

делаю примерно так:

GO_NOT_EQUAL_AA MACRO ADDRESS1, ADDRESS2, LABEL
MOVF ADDRESS1
SUBWF ADDRESS2, W
BTFSS STATUS, Z
GOTO LABEL
ENDM

ON_CMD MACRO CMD_BUFFER, CMD_DATA, CMD_LABEL
GO_NOT_EQUAL_AA CMD_BUFFER, CMD_DATA, NEXT
GO_EQUAL_AA CMD_BUFFER, CMD_DATA + 1, CMD_LABEL
NEXT:
ENDM


MESSAGE_LOOP MACRO CMD_BUFFER, CMD_DATA, CMD_LABEL
ON_CMD CMD_BUFFER, CMD_DATA, CMD_LABEL
ON_CMD CMD_BUFFER, CMD_DATA+2, CMD_LABEL+2

GOTO MAIN_LOOP
ENDM


проблемка в конце с ON_CMD CMD_BUFFER, CMD_DATA, CMD_LABEL
ON_CMD CMD_BUFFER, CMD_DATA+2, CMD_LABEL+2


Хорошо бы обьявить массив комманд и массив ссылок
где бы индех комманды соответсвовал индексу label.
Ну в ассемблере вроде такого нет.
Никто не изворачивался для PIC16?
oran-be
Цитата(A. Fig Lee @ Apr 6 2008, 01:14) *
Ну в ассемблере вроде такого нет.
Никто не изворачивался для PIC16?

Все есть - ассемблер у майкрочипсов - афигительный.

Вот как сгенерить вызов функции функции через аргумент макроса
Код
IfBitThenProc   MACRO  bit, ev
        NOLIST
        LOCAL   _bit, _byte
        LOCAL   __ev

IF (bit < 1)&(bit > 40)
        ERROR "Argument must be in interval from 1 to 40"
     ENDIF

_bit = (bit-1)%8
_byte = (bit-1)/8
__ev = ev

                btfsc   aBitArea+_byte, _bit
                call    procs#v(__ev)
        ENDM

В итоге из номера ev сгенерируется джамп на метку procsХ, которые, в свою очередь также мона сгенерить WHILE'ом, например.
Сергей Борщ
Цитата(A. Fig Lee @ Apr 6 2008, 01:14) *
Нет лишних тысяч баксов, пишу на ассемблере. Пока даже на CCS компайлер за 150 баксов жабу не победил.
Существует бесплатный компилятор sdcc.
A. Fig Lee
Цитата(oran-be @ Apr 9 2008, 05:28) *
Все есть - ассемблер у майкрочипсов - афигительный.

Вот как сгенерить вызов функции функции через аргумент макроса
Код
IfBitThenProc   MACRO  bit, ev
        NOLIST
        LOCAL   _bit, _byte
        LOCAL   __ev

IF (bit < 1)&(bit > 40)
        ERROR "Argument must be in interval from 1 to 40"
     ENDIF

_bit = (bit-1)%8
_byte = (bit-1)/8
__ev = ev

                btfsc   aBitArea+_byte, _bit
                call    procs#v(__ev)
        ENDM

В итоге из номера ev сгенерируется джамп на метку procsХ, которые, в свою очередь также мона сгенерить WHILE'ом, например.


спасибо, очень интересно. надо будет запомнить.
если б еще и размер массива както определял..

( sizeof )



Цитата(Сергей Борщ @ Apr 9 2008, 06:10) *
Существует бесплатный компилятор sdcc.


дык.. когда я его пробовал - он реально поддерживал 4 или 5 мелкочипов, один из них - дедушка F84.

не настоящий он для майкрочипа..
ну вопчем добрые люди уже поделились CCS.

santa2.gif
Сергей Борщ
Цитата(A. Fig Lee @ Apr 9 2008, 19:24) *
если б еще и размер массива както определял..

( sizeof )
Ставите метку перед массивом и после массива. Вычитаете из второй первую - получаете размер.
A. Fig Lee
Цитата(Сергей Борщ @ Apr 9 2008, 14:44) *
Ставите метку перед массивом и после массива. Вычитаете из второй первую - получаете размер.



ай, шайтан.. a14.gif
спасибо. beer.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.