01.03.2021, 14:38
|
|
Прохожий
Регистрация: 14.02.2011
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Прерывание RB для pic16f690
Рег.IOCB расположен во 2-м банке памяти, но ни компилятор PICC, ни протеус и даже MPLAB, и ASM похоже не знают об этом и обращаются в банк 1, а там IOCA. Получается, что прерывание RB недоступно. Может кто решал эту задачку,поделитесь!!
|
|
|
|
01.03.2021, 14:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 22.02.2008
Адрес: Ukraine, рядом с Полтавой
Сообщений: 9,849
Сказал спасибо: 5,591
Сказали Спасибо 25,473 раз(а) в 5,730 сообщении(ях)
|
Re: Прерывание RB для pic16f690
Никогда проблем не было - всё нормально и там и там компилируется.
__________________
«Совершенство — это не тогда, когда уже нечего больше добавить, а тогда, когда уже нечего отнять.»
/Эйнштейн/
моя домашняя страничка: http://www.eddy.com.ua/
|
|
|
|
01.03.2021, 15:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: Прерывание RB для pic16f690
116 ( 8 ) = 4E (16)
Правильно надо записывать.
Цитата:
|
Для записи числа в десятичной системе счисления в одних трансляторах требуется представление только в виде цифр (255, 65535), тогда как в других для этого требуется начать число с точки (.255, .65535).
Для записи числа в шестнадцатеричной системе требуется начать число с префикса «0x» (0xFF, 0x2000), в других — добавить в конце числа «h» (0FFh, 2000h), в третьих — записывать только цифры (0FF, 2000), при этом в последних двух случаях у чисел, начинающиеся с A…F, для отличия их от символьных имён спереди добавляют ноль.
Признаком восьмеричной системы в некоторых трансляторах является ведущий ноль (0377, 0177777), в других требуется добавить префикс в виде буквы «O», а число заключить в апострофы (O’377’, O’177777’).
Для записи констант в двоичной системе распространённым является формат вида b'10010111'.
|
Последний раз редактировалось alvadep; 01.03.2021 в 15:38.
|
|
|
|
01.03.2021, 15:43
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 735
Сказал спасибо: 363
Сказали Спасибо 808 раз(а) в 380 сообщении(ях)
|
Re: Прерывание RB для pic16f690
Вот это :
Код:
|
#include ‹xc.h›
// PIC16F690
void main(void){
IOCA = 0x0F;
IOCB = 0x0F;
IOCAbits.IOCA4 = 1;
IOCBbits.IOCB4 = 1;
while (1);
} |
компилируется вот в это :
Код:
|
;psect for function _main
_main:
;main.c: 5: IOCA = 0x0F;
;incstack = 0
; Regs used in _main: [wreg]
movlw 15
bsf 3,5 ;RP0=1, select bank1
bcf 3,6 ;RP1=0, select bank1
movwf 22 ;volatile
;main.c: 6: IOCB = 0x0F;
movlw 15
bcf 3,5 ;RP0=0, select bank2
bsf 3,6 ;RP1=1, select bank2
movwf 22 ;volatile
;main.c: 8: IOCAbits.IOCA4 = 1;
bsf 3,5 ;RP0=1, select bank1
bcf 3,6 ;RP1=0, select bank1
bsf 22,4 ;volatile
;main.c: 9: IOCBbits.IOCB4 = 1;
bcf 3,5 ;RP0=0, select bank2
bsf 3,6 ;RP1=1, select bank2
bsf 22,4 ;volatile
l11:
;main.c: 12: while (1);
goto l11
__end_of_main: |
С банками все в норме.
Компилятор XC8 v1.41, MPLABX 3.51
|
|
|
|
01.03.2021, 15:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.10.2004
Адрес: Нижний Новгород
Сообщений: 1,746
Сказал спасибо: 416
Сказали Спасибо 1,240 раз(а) в 551 сообщении(ях)
|
Re: Прерывание RB для pic16f690
MOVWF 0116 может вместо MOVWF 0116 надо MOVWF 0x74
__________________
Решил посоветовать, да забыл что...
|
|
|
|
01.03.2021, 17:31
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: Прерывание RB для pic16f690
Сообщение от ustalov
|
и ASM похоже не знают об этом и обращаются в банк 1,
|
На ассемблере вы сами всё пишите, вплоть до буковки, до циферки, и вы сами ответственны за переключение банков.
С другой стороны, вот это, что у вас в пдф-ке написано:
BCF 0x3, 0x5
BSF 0x3, 0x6
насколько я по памяти помню, и есть переключение банка сбросом и установкой в регистре STATUS (адрес 0x3) битов, отвечающих за банки, RPx, кажись.
Пишу чисто по памяти, но по-моему, это так и есть. Проверьте сами по даташиту МК.
Upd:
Уже сам проверил. Вот, на картинке всё показано. Какие еще вопросы? Читайте маны вдумчиво! И не кипишите без нужнды.
Последний раз редактировалось NewWriter; 01.03.2021 в 17:48.
|
|
|
|
01.03.2021, 19:30
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 735
Сказал спасибо: 363
Сказали Спасибо 808 раз(а) в 380 сообщении(ях)
|
Re: Прерывание RB для pic16f690
В частности, в MPASM есть директива banksel ( это скорее "встроенный " макрос с параметром ), активирующий нужный банк для указанного параметра, будь то регистр памяти или периферии.
Используется ручками , например, так:
Код:
|
...
#include ‹p16f690.inc›
...
movlw 0x0F ; что будем писать
banksel IOCA ; переключаем банк
movwf IOCA ; куда будем писать
banksel IOCB ; переключаем банк
movwf IOCB ; куда будем писать |
В выхлопе компилятора по месту banksel появляются коды инструкций выбора нужного банка.
По поводу ASM-вставок в языке C для компилятора XC8.
В MPLAB XC8 C Compiler директива banksel поддерживается в inline-ассемблере; в документации описано, как это делается. Для выбора страницы программной памяти при использовании команд, влияющих на Program Counter (PC), существует аналогичная штука pagesel.
Как это работает и работает ли в других компиляторах - нужно курить ихнюю документацию ( или по крайней мере глубоко затянуться )
Последний раз редактировалось j-Roger; 01.03.2021 в 19:56.
|
|
|
|
01.03.2021, 19:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: Прерывание RB для pic16f690
Сообщение от anatol378
|
MOVWF 0116 может вместо MOVWF 0116 надо MOVWF 0x74
|
тогда уж: MOVWF 0x16
Сообщение от NewWriter
|
Читайте маны вдумчиво! И не кипишите без нужнды.
|
ТС банки выбрал правильно, а вот сам регистр нет.
Ему не мешало бы разобраться как записываются числа в разных системах исчисления, чтобы не было комментов типа
Цитата:
|
загрузил непонятно куда
|
Это во-первых. А во-вторых с разрядность операнда команды MOVWF и почему для адресации еще нужны банки.
|
|
|
|
01.03.2021, 20:06
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 735
Сказал спасибо: 363
Сказали Спасибо 808 раз(а) в 380 сообщении(ях)
|
Re: Прерывание RB для pic16f690
При косвенной адресации тоже может быть засада с банками, для этого существует аналог директивы banksel - директива bankisel. Бан + кисель, короче
|
|
|
Сказали "Спасибо" j-Roger
|
|
|
01.03.2021, 20:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: Прерывание RB для pic16f690
Сообщение от j-Roger
|
При косвенной адресации тоже может быть засада с банками, для этого существует аналог директивы banksel - директива bankisel. Бан + кисель, короче
|
Все правильно, эт я на скору руку писал, удаляю вариант.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:50.
|
|