Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: terrarus, ivan_fd  
Регистры LAT в PIC18
MasterPic Дата: Ср, 20.01.2010, 18:46  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 186
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Добрый день всем! Кто-нибудь млжет просветить, для чего нужны эти регистры, как с ними работать и чем отличается вообще работа с портами в 18 пиках от работы с портами в 16 пиках. Пожалуйста, простым языком. пример можно в любом интерпретаторе basic.
Спасибо.
ЯНДЕКС Дата: 20.01.2010
holyuser Дата: Ср, 20.01.2010, 23:32  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 228
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

В режиме записи регистры LAT и PORT эквивалентны.
Значение, считываемое с регистра PORT, дает фактическое состояние уровня на выводе контроллера. Когда вывод является входом, то это есть реально присуствующий уровень на выводе, а когда выход - то это значение выходного регистра. Эта двоинственность (неопределенность) затрудняет использование портов (PIC16) в качестве операндов, при динамическом переключении назначения выводов порта - вход/выход.
Поэтому, в случае, когда порт является операндом какой-либо функции, в PIC18-серии, данные считываются с LAT-регистра.
MasterPic Дата: Чт, 21.01.2010, 05:50  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 186
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

То есть, нельзя напрямую прочитать port?
holyuser Дата: Чт, 21.01.2010, 13:16  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 228
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Можно, конечно, без проблем, но считанное значение может отличаться от ранее туда-же записанного, если между тем было преназначение выводов. Регистр LAT сохраняет то значение, которое было записано в режиме "выход". Это значение не зависит от назначения выводов (вход/выход) порта. Его можно спокойно использовать в операциях типа "чтение-модификация-запись" и результат будет всегда предсказуем, что нельзя сказать в случае с PORT-регистрами.
retas Дата: Чт, 21.01.2010, 16:55  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 445
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

А предсказуемо ли что должно установиться на порте (для PIC16-серии) после таких комбинаций
TRISA.0=0 -> PORTA.0=1 -> TRISA.0=1 -> TRISA.0=0 -> PORTA.0=? ?
MasterPic Дата: Чт, 21.01.2010, 19:24  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 186
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Уважаемый holyuser, можете привести пример? Я что-то догнать не могу, в чем прикол? Спасибо.
Сообщение отредактировал MasterPic - Чт, 21.01.2010, 19:24
holyuser Дата: Пт, 22.01.2010, 14:10  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 228
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Исходное состояние:
TRISB<7:0> = %00000000 ; все - выходы
PORTB<7:0> = %00000000
на выводах будут уровни RB<7:0> = 00000000

потом:
TRISB = %00001111 ; переназначаем часть выводов порта на входы
PORTB.7 = 1 ; устанавливаем старший бит регистра PORTB
TRISB = %00000000 ; опять возвращаем все выводы на выходы

результат после этого будет RB<7:0> = 1000хххх,
где х - неопределенное значение, зависящее от того, какие
уровни присуствовали на выводах RB<3:0> в момент модификации
старшего бита регистра (PORTB.7).

Если вместо PORTB.7 = 1
использовать LATB.7 = 1, то
результат будет RB<7:0> = 10000000, т.э., вполне определенный.

Сообщение отредактировал holyuser - Пт, 22.01.2010, 18:14
MasterPic Дата: Пт, 22.01.2010, 18:32  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 186
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Спасибо, большое, понял.
  • Страница 1 из 1
  • 1
Поиск: