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

Поклонники продукции Microchip Technology Inc тусуются тут.
yor
Говорящий с текстолитом
Сообщения: 1678
Зарегистрирован: Сб янв 19, 2008 23:57:27

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

Сообщение yor »

Спасибо
Реклама
yor
Говорящий с текстолитом
Сообщения: 1678
Зарегистрирован: Сб янв 19, 2008 23:57:27

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

Сообщение yor »

Кое-как описано:
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 не расшифрована в даташите.
Реклама
Аватара пользователя
Steppe
Друг Кота
Сообщения: 4812
Зарегистрирован: Вс сен 17, 2017 17:44:21
Откуда: 51.7727, 55.0988. Высота над морем 107 м. До границы 161 км.

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

Сообщение Steppe »

[uquote="yor",url="/forum/viewtopic.php?p=4551756#p4551756"]Кое-как описано:


Как я понимаю, это по смене уровня, а не по фронтам, как ножки INTX? В ноль - прерывание, в единицу - опять, и т.д.? И аббревиатура KBIX не расшифрована в даташите.[/uquote]
Нормально описано, почти на русском, только понимать надо тему. Это называется прерывание по изменению состояния.
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

Доброго времени суток. Возможно ли передать в макрос имя параметра с запятой (например GPIO,2) ? При попытке передать, видит зяпятую, и ругается, распознавая это как 2 отдельных параметра. Скобки () - не помогают.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

А если этот GPIO,2 обьявить чем-то другим...
К примеру
#define my_port (GPIO,2)
:roll:
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25218
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="BOB51",url="/forum/viewtopic.php?p=4555617#p4555617"]А если этот GPIO,2 обьявить чем-то другим...[/uquote]
Так работает не всегда.
Например в 16-битных пиках не работает и я дефайню только номер бита.

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

.equ enRS485_D,  15
Затем обращаюсь к нему как

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

  bset   LATD, enRS485_D
Это же АСМ, а не Си.
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

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

Сообщение OKF »

[uquote="Пока_без_кота",url="/forum/viewtopic.php?p=4555539#p4555539"]Возможно ли передать в макрос имя параметра с запятой (например GPIO,2)[/uquote]
Транслятор какой? Смотря какие макросредства.
<label> macro [<arg>,...,<arg>] - синтаксис
Read macro device, buffer, count - пример
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

[uquote="BOB51",url="/forum/viewtopic.php?p=4555617#p4555617"]... #define my_port (GPIO,2)...[/uquote]
Так и было сделано, только без скобок. Пробовал со скобками - ошибка не уходит, + появляется ругань на скобки при банальных "bsf my_port".
Пока сделал как сказал КРАМ (дефайню только номер бита, а уже внутри макроса подставляю его к GPIO), работает.
Но конечно будет не так удобно переносить этот код на МК с портами А,В,С и т.д.
Транслятор - стандартный MPASM, из состава MPLAB 8.92.
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

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

Сообщение OKF »

Что то ты не то делаешь...
#define D7_1 PORTC,4
0438 1607 01354 bsf D7_1
Errors : 0
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25218
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="OKF",url="/forum/viewtopic.php?p=4555722#p4555722"]Что то ты не то...[/uquote]
Ясен пень. Чтобы включить возможность сишных дефайнов, нужно расширение АСМ-файла писать ЗАГЛАВНЫМИ БУКВАМИ - .ASM
:tea:
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Только вот...
От того, какой порт задействован номер его бита не изменится. У ПИКов нет прямоадресуемых бит (как у 51й). Меняется только адрес регистра спецфункций но номер линии остается одним и тем же... Возможно макрос как-то иначе надо организовать...
:roll:
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

[uquote="OKF",url="/forum/viewtopic.php?p=4555722#p4555722"]...#define D7_1 PORTC,4...[/uquote]БЕЗ СКОБОК (которые предлагал BOB51), и у меня не ругается на bsf. О чем я и написал.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Попробуй дать номерам линий портов символьные имена.
#define это текстовая подстановка, а у вышеприведенного второй элемент - цифра...
:roll:
Допустим...
#define four 4 ; или через four equ 4
#define my_pin PORTB,four
.... :roll:
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

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

Сообщение OKF »

[uquote="Пока_без_кота",url="/forum/viewtopic.php?p=4555784#p4555784"]и у меня не ругается на bsf. О чем я и написал.[/uquote]
А ты можешь ЧЛЕНОРАЗДЕЛЬНО написать что ты хочешь и что у тебя не получается?
А лучше приложить фрагмент исходника.
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

[uquote="OKF",url="/forum/viewtopic.php?p=4555805#p4555805"]... ЧЛЕНОРАЗДЕЛЬНО ... фрагмент исходника.[/uquote]
Сейчас:
Спойлер

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

#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 все равно еще с самого начала внутри макроса используется, но это я уже потом буду пытаться обойти.
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

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

Сообщение OKF »

Обычно в макро оформляют самый низ, т.е. железо. Меняется железо - меняется только дефайны.

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

#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). Без изменений! Только дефайны.
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

[uquote="OKF",url="/forum/viewtopic.php?p=4555904#p4555904"]

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

#define LED1    PORTC,2,1
[/uquote]
Спасибо, подсказали идею: обявить в макросе на 1 параметр больше и передавать дефайн порта как 2 параметра (имя порта+номер пина), через запятую.
Небольшая логическая несостыковка, но можно принять как данность. Задача решена.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25218
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="OKF",url="/forum/viewtopic.php?p=4555904#p4555904"]Без изменений! Только дефайны.[/uquote]
Это если весь софт - только ногодрыг. Да и то инициализация не совпадет.
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

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

Сообщение OKF »

Ногодрыг в большинстве простых устройств. Ну и 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);
    }
  }
}
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25218
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="OKF",url="/forum/viewtopic.php?p=4556030#p4556030"]Ногодрыг в большинстве простых устройств.[/uquote]
Это дурной тон дрыгать ногами, игнорируя аппаратные фичи.
Сейчас весь смысл применения дешевых восьмибитников состоит в том, что фактически такие чипы являются набором разнообразной периферии на все случаи жизни, а задача ядра всего лишь сконфигурировать этот зоопарк и и запустить его, изредка поддерживая небольшими расчетами и управлением через автоматические каналы связи.
Ответить

Вернуться в «PIC»