| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Как считать байт с портов pic18? https://radiokot.ru/forum/viewtopic.php?f=58&t=187199 |
Страница 1 из 1 |
| Автор: | Hailmary [ Ср мар 01, 2023 13:54:47 ] |
| Заголовок сообщения: | Как считать байт с портов pic18? |
Уважаемые форумчане! Простите за тупой вопрос, но я не могу понять, как считать с порта. Написал программу преобразования из двоичного в десятичный код. Подставляю просто число (movlw .24 к примеру) работает всё замечательно. Чтобы считать с порта меняю строчку на movf porta, 0 и тишина. Pic18fxxxx. |
|
| Автор: | КРАМ [ Чт мар 02, 2023 12:00:00 ] |
| Заголовок сообщения: | Re: Как считать байт с портов pic18? |
movf porta и тишина. Pic18fxxxx. Может стоит вначале ознакомится с системой команд этой архитектуры? У инструкции movf ТРИ аргумента. То есть она в общем случае выглядит как movf reg, d, a Где reg - регистр в ОЗУ, d - назначение (f или w), a - тип доступа в ОЗУ (accessed/banked) Отсутствие d и a означает дефолтную запись регистра в самого себя с доступом через BSR (banked). Добавлено after 2 hours 46 minutes 7 seconds: movf porta, 0 Как определено имя porta? Какая используется среда и какой ассемблер? Доступ к SFR лучше всего производить через accessed. |
|
| Автор: | Hailmary [ Чт мар 02, 2023 12:07:45 ] |
| Заголовок сообщения: | Re: Как считать байт с портов pic18? |
Про movf reg, d я понял, а вот про a не совсем. Читал мануал, но всё равно не дошло. Чтобы понять, как считать с порта, я написал так: Main Movf porta, 0 ;считывает с порта а и сохраняем в w Movwf portb ; загружаем в порт b из регистра w Goto main End В pic16f84a всё работает, а в pic18f4520 нет. Добавлено after 7 minutes 30 seconds: Как определено имя porta? Какая используется среда и какой ассемблер? Porta equ 0xf80 Mplab x, mpasm |
|
| Автор: | КРАМ [ Чт мар 02, 2023 12:11:40 ] |
| Заголовок сообщения: | Re: Как считать байт с портов pic18? |
про a не совсем. Читал мануал, но всё равно не дошло. Абисняю. Разрядность инструкций в PIC18 - 16 бит. Это позволяет адресовать операнд в команде только 8 битами. Поэтому есть ДВА варианта доступа к пространству ОЗУ. Либо через регистр переключающий страницы ОЗУ - BSR (в нем располагаются старшие разряды адреса), либо через accessed - в этом случае НУЛЕВАЯ СТРАНИЦА оперативной памяти делится на две половины. В начале расположены адреса первой половины нулевой страницы ОЗУ, а в конце ремапированные адреса SFR (спецрегистров, к которым относится и PORTA). Это позволяет не переключать BSR при размещении наиболее часто используемых переменных в первой половине нулевой страницы ОЗУ. ЗЫ. Размещение SFR в последних 18-х моделях МК Микрочипа изменено. Поэтому при использовании МК типа PIC18F27Q43 и аналогичных на это следует обратить внимание. Добавлено after 1 minute 55 seconds: Porta equ 0xf80 Чудовищное безобразие. У каждой модели МК есть INC-файл. Присоединяете его проекту и пользуетесь определенными в нем именами.
|
|
| Автор: | Hailmary [ Чт мар 02, 2023 12:21:30 ] |
| Заголовок сообщения: | Re: Как считать байт с портов pic18? |
Чудовищное безобразие. У каждой модели МК есть INC-файл. Присоединяете его проекту и пользуетесь определенными в нем именами.Да я знаю про это, меня уже разок ткнули лицом. Но это потом, а сейчас хочу понять элементарную вещь, а то стыдно так, жуть просто. До этого в avr немного программировал, там с этим делом проще простого, а тут... |
|
| Автор: | КРАМ [ Чт мар 02, 2023 12:21:48 ] |
| Заголовок сообщения: | Re: Как считать байт с портов pic18? |
В догон. Вот так следует начинать листинг исходника на MPASM для PIC18: Код: ;----------
list p=pic18f25k20 #include <P18F25K20.INC> ;---------- ; CONFIGURATION WORD SETUP ;---------- #define swp ON ;Setup CONFIG11H CONFIG FOSC = HSPLL, FCMEN = OFF, IESO = OFF ;Setup CONFIG2L CONFIG PWRT = ON, BOREN = OFF, BORV = 30 ;Setup CONFIG2H CONFIG WDTEN = swp, WDTPS = 256 ;Setup CONFIG3H CONFIG MCLRE = ON, HFOFST = OFF, LPT1OSC = OFF, PBADEN = OFF, CCP2MX = PORTC ;Setup CONFIG4L CONFIG STVREN = OFF, LVP = OFF, XINST = OFF, DEBUG = OFF ;Setup CONFIG5L CONFIG CP0 = swp, CP1 = swp, CP2 = swp, CP3 = swp ;Setup CONFIG5H CONFIG CPB = swp, CPD = swp ;Setup CONFIG6L CONFIG EBTR0 = OFF ;Setup CONFIG6H CONFIG EBTR1 = OFF ;Setup CONFIG7L CONFIG EBTR2 = OFF ;Setup CONFIG7H CONFIG EBTR3 = OFF ;---------- udata_acs count0xCC res 1 count0x33 res 1 time_alarm res 1 time_flash res 1 result res 1 adjust res 1 sum_L res 1 sum_H res 1 temp res 1 temp0 res 1 temp1 res 1 cnt_sloop res 1 cnt_dly_connect res 1 cnt_flash res 1 flags res 1 ;---------- alarm_on equ 0 ; ADC_ready equ 1 ; jamming_on equ 2 ; req_on_off_RS485 equ 3 ; RS485_on equ 4 ; ;---------- buf1 udata_ovr 0x100 arrCurrent res 64 ;---------- buf2 udata_ovr 0x200 arrTime res 64 ;---------- |
|
| Автор: | Hailmary [ Чт мар 02, 2023 13:56:14 ] |
| Заголовок сообщения: | Re: Как считать байт с портов pic18? |
Благодарю за пример. А у Вас нет кода для pic18 с настроенными портами, чтобы на примере разобраться, для меня так проще. А то я искал в инете, везде в основном с 16 пиками. Мне самый простой, чтобы при наличии 1 на входе появлялась бы 1 на выходе. Добавлено after 18 minutes 42 seconds: Вроде бы разобрался. Я неправильно порт А инициализировал. Сейчас пробую правильно прописать, вроде что-то получается. |
|
| Автор: | КРАМ [ Чт мар 02, 2023 14:45:19 ] |
| Заголовок сообщения: | Re: Как считать байт с портов pic18? |
чтобы на примере разобраться Поскольку во всех PIC18 имеется железная отладка, проще всего ее включить (через PICkit, естественно) и наблюдать что и как переключается и настраивается. Что касается PORTA, то единственной блокировкой его работы может быть включенная по умолчанию аналоговая функция пинов. Так как в разных МК имеются различия в инициализации. то гораздо конструктивнее будет озвучить тип МК и проблему с точностью до пина. |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|



У каждой модели МК есть INC-файл. Присоединяете его проекту и пользуетесь определенными в нем именами.