Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Re: Вопросы начинающих PIC ASM

Пн мар 04, 2024 14:27:00

Спасибо

Re: Вопросы начинающих PIC ASM

Вт мар 05, 2024 21:01:21

Кое-как описано:
9.8 PORTB Interrupt-on-Change
An input change on PORTB<7:4> sets flag bit, RBIF (INTCON<0>). The interrupt can be enabled/disabled by setting/clearing enable bit, RBIE (INTCON<3>). Interrupt priority for PORTB interrupt-on-change is determined by the value contained in the interrupt priority bit, RBIP (INTCON2<0>).

Как я понимаю, это по смене уровня, а не по фронтам, как ножки INTX? В ноль - прерывание, в единицу - опять, и т.д.? И аббревиатура KBIX не расшифрована в даташите.

Re: Вопросы начинающих PIC ASM

Чт мар 07, 2024 14:11:21

Кое-как описано:


Как я понимаю, это по смене уровня, а не по фронтам, как ножки INTX? В ноль - прерывание, в единицу - опять, и т.д.? И аббревиатура KBIX не расшифрована в даташите.

Нормально описано, почти на русском, только понимать надо тему. Это называется прерывание по изменению состояния.

Re: Вопросы начинающих PIC ASM

Чт мар 14, 2024 23:57:59

Доброго времени суток. Возможно ли передать в макрос имя параметра с запятой (например GPIO,2) ? При попытке передать, видит зяпятую, и ругается, распознавая это как 2 отдельных параметра. Скобки () - не помогают.

Re: Вопросы начинающих PIC ASM

Пт мар 15, 2024 09:17:09

А если этот GPIO,2 обьявить чем-то другим...
К примеру
#define my_port (GPIO,2)
:roll:

Re: Вопросы начинающих PIC ASM

Пт мар 15, 2024 09:26:20

А если этот GPIO,2 обьявить чем-то другим...

Так работает не всегда.
Например в 16-битных пиках не работает и я дефайню только номер бита.
Код:
.equ enRS485_D,  15

Затем обращаюсь к нему как
Код:
  bset   LATD, enRS485_D

Это же АСМ, а не Си.

Re: Вопросы начинающих PIC ASM

Пт мар 15, 2024 10:37:39

Возможно ли передать в макрос имя параметра с запятой (например GPIO,2)

Транслятор какой? Смотря какие макросредства.
<label> macro [<arg>,...,<arg>] - синтаксис
Read macro device, buffer, count - пример

Re: Вопросы начинающих PIC ASM

Пт мар 15, 2024 13:27:17

... #define my_port (GPIO,2)...

Так и было сделано, только без скобок. Пробовал со скобками - ошибка не уходит, + появляется ругань на скобки при банальных "bsf my_port".
Пока сделал как сказал КРАМ (дефайню только номер бита, а уже внутри макроса подставляю его к GPIO), работает.
Но конечно будет не так удобно переносить этот код на МК с портами А,В,С и т.д.
Транслятор - стандартный MPASM, из состава MPLAB 8.92.

Re: Вопросы начинающих PIC ASM

Пт мар 15, 2024 15:03:31

Что то ты не то делаешь...
#define D7_1 PORTC,4
0438 1607 01354 bsf D7_1
Errors : 0

Re: Вопросы начинающих PIC ASM

Пт мар 15, 2024 16:46:33

Что то ты не то...

Ясен пень. Чтобы включить возможность сишных дефайнов, нужно расширение АСМ-файла писать ЗАГЛАВНЫМИ БУКВАМИ - .ASM
:tea:

Re: Вопросы начинающих PIC ASM

Пт мар 15, 2024 17:39:51

Только вот...
От того, какой порт задействован номер его бита не изменится. У ПИКов нет прямоадресуемых бит (как у 51й). Меняется только адрес регистра спецфункций но номер линии остается одним и тем же... Возможно макрос как-то иначе надо организовать...
:roll:

Re: Вопросы начинающих PIC ASM

Пт мар 15, 2024 17:49:29

...#define D7_1 PORTC,4...
БЕЗ СКОБОК (которые предлагал BOB51), и у меня не ругается на bsf. О чем я и написал.

Re: Вопросы начинающих PIC ASM

Пт мар 15, 2024 18:06:56

Попробуй дать номерам линий портов символьные имена.
#define это текстовая подстановка, а у вышеприведенного второй элемент - цифра...
:roll:
Допустим...
#define four 4 ; или через four equ 4
#define my_pin PORTB,four
.... :roll:

Re: Вопросы начинающих PIC ASM

Пт мар 15, 2024 18:48:30

и у меня не ругается на bsf. О чем я и написал.

А ты можешь ЧЛЕНОРАЗДЕЛЬНО написать что ты хочешь и что у тебя не получается?
А лучше приложить фрагмент исходника.

Re: Вопросы начинающих PIC ASM

Пт мар 15, 2024 18:58:17

... ЧЛЕНОРАЗДЕЛЬНО ... фрагмент исходника.

Сейчас:
Спойлер
Код:
#define UART_RX_PIN_NUMB 3
#define UART_RX_PIN           GPIO,UART_RX_PIN_NUMB

_waitLevel      macro   gpio,level
            movfw   GPIO      ; read GPIO state before sleep
            sleep
            nop               ; 1 nop after WakeUp
            #if level == 0
               btfsc   GPIO,gpio   
            #else
               #if level == 1
                  btfss   GPIO,gpio
               #else
                  ERROR "Waiting level is not valid"
               #endif
            #endif
            goto   $-4
            endm

_waitLevel UART_RX_PIN_NUMB,0   ; waiting \_ on UART_RX_PIN


А я хочу не привязыватся к мнемонике GPIO при проверке бита внутри макроса, чтобы иметь возможность свободно портировать его на PIC16:
Спойлер
Код:
#define UART_RX_PIN           GPIO,3

_waitLevel      macro   gpio,level
            movfw   GPIO      ; read GPIO state before sleep
            sleep
            nop               ; 1 nop after WakeUp
            #if level == 0
               btfsc   gpio   
            #else
               #if level == 1
                  btfss   gpio
               #else
                  ERROR "Waiting level is not valid"
               #endif
            #endif
            goto   $-4
            endm

_waitLevel UART_RX_PIN,0   ; waiting \_ on UART_RX_PIN


П.С. GPIO все равно еще с самого начала внутри макроса используется, но это я уже потом буду пытаться обойти.

Re: Вопросы начинающих PIC ASM

Пт мар 15, 2024 22:11:10

Обычно в макро оформляют самый низ, т.е. железо. Меняется железо - меняется только дефайны.
Код:
#define LED1    PORTC,2,1
#define LED2    PORTC,3,0

on      macro   port,pin,level
        if      level
        bsf     port,pin
        else
        bcf     port,pin
        endif
        endm

off     macro   port,pin,level
        if      !level
        bsf     port,pin
        else
        bcf     port,pin
        endif
        endm
       
        org     0
       
        on      LED1
        on      LED2
        off     LED1
        off     LED2
       
        end

На си проще. Я один и тот же софт, зачастую, изпользую вообще на разных семействах (PIC/AVR). Без изменений! Только дефайны.

Re: Вопросы начинающих PIC ASM

Сб мар 16, 2024 02:09:02

Код:
#define LED1    PORTC,2,1

Спасибо, подсказали идею: обявить в макросе на 1 параметр больше и передавать дефайн порта как 2 параметра (имя порта+номер пина), через запятую.
Небольшая логическая несостыковка, но можно принять как данность. Задача решена.

Re: Вопросы начинающих PIC ASM

Сб мар 16, 2024 03:28:48

Без изменений! Только дефайны.

Это если весь софт - только ногодрыг. Да и то инициализация не совпадет.

Re: Вопросы начинающих PIC ASM

Сб мар 16, 2024 08:42:58

Ногодрыг в большинстве простых устройств. Ну и UART, и SPI, и I2C, и EEPROM... Примерно так:
Код:
// в хедере - правим только здесь:
#define LED B,5,L
#define KEY B,0,L
#define BUZ C,1,H

#define con_init() (...)
#define UART_DATA UDR

// в С - без изменений:
int main() {
  out(LED);
  off(LED);
  off(BUZ);
  out(BUZ);
  pullup(KEY);
  con_init();
  con_printP("Hello " __DATE__ " " __TIME__);
  while (true) {
    if (pin(KEY)) {
      toggle(LED);
      on(BUZ);
      delay(SHORT_BEEP);
      off(BUZ);
    }
  }
}

Re: Вопросы начинающих PIC ASM

Сб мар 16, 2024 15:32:11

Ногодрыг в большинстве простых устройств.

Это дурной тон дрыгать ногами, игнорируя аппаратные фичи.
Сейчас весь смысл применения дешевых восьмибитников состоит в том, что фактически такие чипы являются набором разнообразной периферии на все случаи жизни, а задача ядра всего лишь сконфигурировать этот зоопарк и и запустить его, изредка поддерживая небольшими расчетами и управлением через автоматические каналы связи.
Ответить