Вопросы начинающих PIC ASM
Re: Вопросы начинающих PIC ASM
Спасибо
- Реклама
Re: Вопросы начинающих PIC ASM
Кое-как описано:
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 не расшифрована в даташите.
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
[uquote="yor",url="/forum/viewtopic.php?p=4551756#p4551756"]Кое-как описано:
Как я понимаю, это по смене уровня, а не по фронтам, как ножки INTX? В ноль - прерывание, в единицу - опять, и т.д.? И аббревиатура KBIX не расшифрована в даташите.[/uquote]
Нормально описано, почти на русском, только понимать надо тему. Это называется прерывание по изменению состояния.
Как я понимаю, это по смене уровня, а не по фронтам, как ножки INTX? В ноль - прерывание, в единицу - опять, и т.д.? И аббревиатура KBIX не расшифрована в даташите.[/uquote]
Нормально описано, почти на русском, только понимать надо тему. Это называется прерывание по изменению состояния.
-
Пока_без_кота
- Потрогал лапой паяльник
- Сообщения: 359
- Зарегистрирован: Чт авг 08, 2013 01:06:54
Re: Вопросы начинающих PIC ASM
Доброго времени суток. Возможно ли передать в макрос имя параметра с запятой (например GPIO,2) ? При попытке передать, видит зяпятую, и ругается, распознавая это как 2 отдельных параметра. Скобки () - не помогают.
Re: Вопросы начинающих PIC ASM
А если этот GPIO,2 обьявить чем-то другим...
К примеру
#define my_port (GPIO,2)

К примеру
#define my_port (GPIO,2)
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 25219
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Вопросы начинающих PIC ASM
[uquote="BOB51",url="/forum/viewtopic.php?p=4555617#p4555617"]А если этот GPIO,2 обьявить чем-то другим...[/uquote]
Так работает не всегда.
Например в 16-битных пиках не работает и я дефайню только номер бита.
Затем обращаюсь к нему как
Это же АСМ, а не Си.
Так работает не всегда.
Например в 16-битных пиках не работает и я дефайню только номер бита.
Код: Выделить всё
.equ enRS485_D, 15
Код: Выделить всё
bset LATD, enRS485_D
Re: Вопросы начинающих PIC ASM
[uquote="Пока_без_кота",url="/forum/viewtopic.php?p=4555539#p4555539"]Возможно ли передать в макрос имя параметра с запятой (например GPIO,2)[/uquote]
Транслятор какой? Смотря какие макросредства.
<label> macro [<arg>,...,<arg>] - синтаксис
Read macro device, buffer, count - пример
Транслятор какой? Смотря какие макросредства.
<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.
Так и было сделано, только без скобок. Пробовал со скобками - ошибка не уходит, + появляется ругань на скобки при банальных "bsf my_port".
Пока сделал как сказал КРАМ (дефайню только номер бита, а уже внутри макроса подставляю его к GPIO), работает.
Но конечно будет не так удобно переносить этот код на МК с портами А,В,С и т.д.
Транслятор - стандартный MPASM, из состава MPLAB 8.92.
Re: Вопросы начинающих PIC ASM
Что то ты не то делаешь...
#define D7_1 PORTC,4
0438 1607 01354 bsf D7_1
Errors : 0
#define D7_1 PORTC,4
0438 1607 01354 bsf D7_1
Errors : 0
- КРАМ
- Друг Кота
- Сообщения: 25219
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Вопросы начинающих PIC ASM
[uquote="OKF",url="/forum/viewtopic.php?p=4555722#p4555722"]Что то ты не то...[/uquote]
Ясен пень. Чтобы включить возможность сишных дефайнов, нужно расширение АСМ-файла писать ЗАГЛАВНЫМИ БУКВАМИ - .ASM

Ясен пень. Чтобы включить возможность сишных дефайнов, нужно расширение АСМ-файла писать ЗАГЛАВНЫМИ БУКВАМИ - .ASM
Re: Вопросы начинающих PIC ASM
Только вот...
От того, какой порт задействован номер его бита не изменится. У ПИКов нет прямоадресуемых бит (как у 51й). Меняется только адрес регистра спецфункций но номер линии остается одним и тем же... Возможно макрос как-то иначе надо организовать...

От того, какой порт задействован номер его бита не изменится. У ПИКов нет прямоадресуемых бит (как у 51й). Меняется только адрес регистра спецфункций но номер линии остается одним и тем же... Возможно макрос как-то иначе надо организовать...
-
Пока_без_кота
- Потрогал лапой паяльник
- Сообщения: 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. О чем я и написал.
Re: Вопросы начинающих PIC ASM
Попробуй дать номерам линий портов символьные имена.
#define это текстовая подстановка, а у вышеприведенного второй элемент - цифра...

Допустим...
#define four 4 ; или через four equ 4
#define my_pin PORTB,four
....
#define это текстовая подстановка, а у вышеприведенного второй элемент - цифра...
Допустим...
#define four 4 ; или через four equ 4
#define my_pin PORTB,four
....
Re: Вопросы начинающих PIC ASM
[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]
Сейчас:
А я хочу не привязыватся к мнемонике GPIO при проверке бита внутри макроса, чтобы иметь возможность свободно портировать его на PIC16:
П.С. GPIO все равно еще с самого начала внутри макроса используется, но это я уже потом буду пытаться обойти.
Сейчас:
Спойлер
Код: Выделить всё
#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
Спойлер
Код: Выделить всё
#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
Re: Вопросы начинающих PIC ASM
Обычно в макро оформляют самый низ, т.е. железо. Меняется железо - меняется только дефайны.
На си проще. Я один и тот же софт, зачастую, изпользую вообще на разных семействах (PIC/AVR). Без изменений! Только дефайны.
Код: Выделить всё
#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
-
Пока_без_кота
- Потрогал лапой паяльник
- Сообщения: 359
- Зарегистрирован: Чт авг 08, 2013 01:06:54
Re: Вопросы начинающих PIC ASM
[uquote="OKF",url="/forum/viewtopic.php?p=4555904#p4555904"][/uquote]
Спасибо, подсказали идею: обявить в макросе на 1 параметр больше и передавать дефайн порта как 2 параметра (имя порта+номер пина), через запятую.
Небольшая логическая несостыковка, но можно принять как данность. Задача решена.
Код: Выделить всё
#define LED1 PORTC,2,1Спасибо, подсказали идею: обявить в макросе на 1 параметр больше и передавать дефайн порта как 2 параметра (имя порта+номер пина), через запятую.
Небольшая логическая несостыковка, но можно принять как данность. Задача решена.
- КРАМ
- Друг Кота
- Сообщения: 25219
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Вопросы начинающих PIC ASM
[uquote="OKF",url="/forum/viewtopic.php?p=4555904#p4555904"]Без изменений! Только дефайны.[/uquote]
Это если весь софт - только ногодрыг. Да и то инициализация не совпадет.
Это если весь софт - только ногодрыг. Да и то инициализация не совпадет.
Re: Вопросы начинающих PIC ASM
Ногодрыг в большинстве простых устройств. Ну и 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);
}
}
}
- КРАМ
- Друг Кота
- Сообщения: 25219
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Вопросы начинающих PIC ASM
[uquote="OKF",url="/forum/viewtopic.php?p=4556030#p4556030"]Ногодрыг в большинстве простых устройств.[/uquote]
Это дурной тон дрыгать ногами, игнорируя аппаратные фичи.
Сейчас весь смысл применения дешевых восьмибитников состоит в том, что фактически такие чипы являются набором разнообразной периферии на все случаи жизни, а задача ядра всего лишь сконфигурировать этот зоопарк и и запустить его, изредка поддерживая небольшими расчетами и управлением через автоматические каналы связи.
Это дурной тон дрыгать ногами, игнорируя аппаратные фичи.
Сейчас весь смысл применения дешевых восьмибитников состоит в том, что фактически такие чипы являются набором разнообразной периферии на все случаи жизни, а задача ядра всего лишь сконфигурировать этот зоопарк и и запустить его, изредка поддерживая небольшими расчетами и управлением через автоматические каналы связи.


