Как считать байт с портов pic18?
Как считать байт с портов pic18?
Уважаемые форумчане! Простите за тупой вопрос, но я не могу понять, как считать с порта. Написал программу преобразования из двоичного в десятичный код. Подставляю просто число (movlw .24 к примеру) работает всё замечательно. Чтобы считать с порта меняю строчку на movf porta, 0 и тишина. Pic18fxxxx.
Последний раз редактировалось Hailmary Чт мар 02, 2023 11:41:09, всего редактировалось 1 раз.
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Как считать байт с портов pic18?
[uquote="Hailmary",url="/forum/viewtopic.php?p=4379356#p4379356"]movf porta и тишина. Pic18fxxxx.[/uquote]
Может стоит вначале ознакомится с системой команд этой архитектуры?
У инструкции movf ТРИ аргумента. То есть она в общем случае выглядит как movf reg, d, a
Где reg - регистр в ОЗУ, d - назначение (f или w), a - тип доступа в ОЗУ (accessed/banked)
Отсутствие d и a означает дефолтную запись регистра в самого себя с доступом через BSR (banked).
Добавлено after 2 hours 46 minutes 7 seconds:
[uquote="Hailmary",url="/forum/viewtopic.php?p=4379356#p4379356"]movf porta, 0[/uquote]
Как определено имя porta?
Какая используется среда и какой ассемблер?
Доступ к SFR лучше всего производить через accessed.
Может стоит вначале ознакомится с системой команд этой архитектуры?
У инструкции movf ТРИ аргумента. То есть она в общем случае выглядит как movf reg, d, a
Где reg - регистр в ОЗУ, d - назначение (f или w), a - тип доступа в ОЗУ (accessed/banked)
Отсутствие d и a означает дефолтную запись регистра в самого себя с доступом через BSR (banked).
Добавлено after 2 hours 46 minutes 7 seconds:
[uquote="Hailmary",url="/forum/viewtopic.php?p=4379356#p4379356"]movf porta, 0[/uquote]
Как определено имя porta?
Какая используется среда и какой ассемблер?
Доступ к SFR лучше всего производить через accessed.
Последний раз редактировалось КРАМ Чт мар 02, 2023 12:01:14, всего редактировалось 1 раз.
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:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4379804#p4379804"]Как определено имя porta?
Какая используется среда и какой ассемблер?[/uquote]
Porta equ 0xf80
Mplab x, mpasm
Чтобы понять, как считать с порта, я написал так:
Main
Movf porta, 0 ;считывает с порта а и сохраняем в w
Movwf portb ; загружаем в порт b из регистра w
Goto main
End
В pic16f84a всё работает, а в pic18f4520 нет.
Добавлено after 7 minutes 30 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4379804#p4379804"]Как определено имя porta?
Какая используется среда и какой ассемблер?[/uquote]
Porta equ 0xf80
Mplab x, mpasm
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Как считать байт с портов pic18?
[uquote="Hailmary",url="/forum/viewtopic.php?p=4379889#p4379889"]про a не совсем. Читал мануал, но всё равно не дошло.[/uquote]
Абисняю.
Разрядность инструкций в PIC18 - 16 бит.
Это позволяет адресовать операнд в команде только 8 битами. Поэтому есть ДВА варианта доступа к пространству ОЗУ. Либо через регистр переключающий страницы ОЗУ - BSR (в нем располагаются старшие разряды адреса), либо через accessed - в этом случае НУЛЕВАЯ СТРАНИЦА оперативной памяти делится на две половины. В начале расположены адреса первой половины нулевой страницы ОЗУ, а в конце ремапированные адреса SFR (спецрегистров, к которым относится и PORTA). Это позволяет не переключать BSR при размещении наиболее часто используемых переменных в первой половине нулевой страницы ОЗУ.
ЗЫ. Размещение SFR в последних 18-х моделях МК Микрочипа изменено. Поэтому при использовании МК типа PIC18F27Q43 и аналогичных на это следует обратить внимание.
Добавлено after 1 minute 55 seconds:
[uquote="Hailmary",url="/forum/viewtopic.php?p=4379889#p4379889"]Porta equ 0xf80[/uquote]
Чудовищное безобразие.
У каждой модели МК есть INC-файл. Присоединяете его проекту и пользуетесь определенными в нем именами.
Абисняю.
Разрядность инструкций в PIC18 - 16 бит.
Это позволяет адресовать операнд в команде только 8 битами. Поэтому есть ДВА варианта доступа к пространству ОЗУ. Либо через регистр переключающий страницы ОЗУ - BSR (в нем располагаются старшие разряды адреса), либо через accessed - в этом случае НУЛЕВАЯ СТРАНИЦА оперативной памяти делится на две половины. В начале расположены адреса первой половины нулевой страницы ОЗУ, а в конце ремапированные адреса SFR (спецрегистров, к которым относится и PORTA). Это позволяет не переключать BSR при размещении наиболее часто используемых переменных в первой половине нулевой страницы ОЗУ.
ЗЫ. Размещение SFR в последних 18-х моделях МК Микрочипа изменено. Поэтому при использовании МК типа PIC18F27Q43 и аналогичных на это следует обратить внимание.
Добавлено after 1 minute 55 seconds:
[uquote="Hailmary",url="/forum/viewtopic.php?p=4379889#p4379889"]Porta equ 0xf80[/uquote]
Чудовищное безобразие.
Re: Как считать байт с портов pic18?
[uquote="КРАМ",url="/forum/viewtopic.php?p=4379900#p4379900"]Чудовищное безобразие.
У каждой модели МК есть INC-файл. Присоединяете его проекту и пользуетесь определенными в нем именами.[/uquote]
Да я знаю про это, меня уже разок ткнули лицом.
Но это потом, а сейчас хочу понять элементарную вещь, а то стыдно так, жуть просто. До этого в avr немного программировал, там с этим делом проще простого, а тут...
Да я знаю про это, меня уже разок ткнули лицом.
Но это потом, а сейчас хочу понять элементарную вещь, а то стыдно так, жуть просто. До этого в avr немного программировал, там с этим делом проще простого, а тут...
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Как считать байт с портов pic18?
В догон.
Вот так следует начинать листинг исходника на MPASM для 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
;------------------------------------------------
Re: Как считать байт с портов pic18?
Благодарю за пример. А у Вас нет кода для pic18 с настроенными портами, чтобы на примере разобраться, для меня так проще. А то я искал в инете, везде в основном с 16 пиками. Мне самый простой, чтобы при наличии 1 на входе появлялась бы 1 на выходе.
Добавлено after 18 minutes 42 seconds:
Вроде бы разобрался. Я неправильно порт А инициализировал. Сейчас пробую правильно прописать, вроде что-то получается.
Добавлено after 18 minutes 42 seconds:
Вроде бы разобрался. Я неправильно порт А инициализировал. Сейчас пробую правильно прописать, вроде что-то получается.
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Как считать байт с портов pic18?
[uquote="Hailmary",url="/forum/viewtopic.php?p=4379987#p4379987"]чтобы на примере разобраться[/uquote]
Поскольку во всех PIC18 имеется железная отладка, проще всего ее включить (через PICkit, естественно) и наблюдать что и как переключается и настраивается.
Что касается PORTA, то единственной блокировкой его работы может быть включенная по умолчанию аналоговая функция пинов. Так как в разных МК имеются различия в инициализации. то гораздо конструктивнее будет озвучить тип МК и проблему с точностью до пина.
Поскольку во всех PIC18 имеется железная отладка, проще всего ее включить (через PICkit, естественно) и наблюдать что и как переключается и настраивается.
Что касается PORTA, то единственной блокировкой его работы может быть включенная по умолчанию аналоговая функция пинов. Так как в разных МК имеются различия в инициализации. то гораздо конструктивнее будет озвучить тип МК и проблему с точностью до пина.


