С каждым из параллельных портов, изображенных на Рис. 16.1, теперь связано три регистра вместо двух, описанных в главе 11. Регистр PORTT все также управляет состоянием контакта ввода/вывода, направление передачи данных через который все также определяется регистром TRISX Кроме того, у каждого порта появился регистр защелки LATX Несмотря на то что каждый из этих регистров защелки имеет уникальный адрес, например регистр LATB размещен по адресу h’F8A’, они физически не реализованы. Взаимосвязь между этими РСН можно понять из Рис. 16.6, который следует сравнить с аналогичным Рис. 11.3 на стр. 333. Единственное принципиальное отличие между рисунками — появление дополнительного тристабильного буфера LAT, выделенного серым цветом. При чтении регистра LAT, например с помощью команды movf LATB, w, возвращается состояние самого триггера данных. Соответствующая команда movf PORTB, w считывает реальное состояние выводов порта В. Обычно обе эти операции дают одинаковый результат. Однако, как мы обсуждали на стр. 337, если величина втекающего или вытекающего тока превышает паспортные значения или если нагрузка имеет большую емкость, а период переключения достаточно мал, то результат выполнения команды типа «чтение-модификация-запись», примененной к регистру PORTX, будет непредсказуем. Манипулирование содержимым регистра защелки вместо содержимого соответствующего регистра порта даст нам определенную независимость от условий работы схемы. Например, команда btfsc LATB,7 пропустит следующую команду, если 7-й бит порта В сброшен, даже если вывод RB7 окажется подтянутым к ВЫСОКОМУ уровню из-за слишком большого вытекающего тока. Очевидно, что в этом случае надежность программы будет гораздо выше, нежели при использовании эквивалентной команды btfsc PORTB,7.
При записи в регистр LAT
Рис. 16.6.
Таймер 0
Таймер 0, который практически в неизменном виде перешел из семейства младшего уровня в семейство среднего уровня, теперь стал 16-битным и обзавелся собственным предделителем, не связанным с постделителем сторожевого таймера. При необходимости этот таймер можно переключить в 8-битный режим с помощью нового регистра управления T0CON.
Таймер 3
В микроконтроллерах старшего семейства реализован дополнительный 16-битный таймер, который похож по своей структуре на Таймер 1. Таймер 3 может тактироваться от внешнего низкочастотного генератора Таймера 1, который также может использоваться в качестве системного при необходимости уменьшения потребляемого тока. Каждый из модулей ССР может работать как с Таймером 1, так и с Таймером 3, что дает нам возможность использования двух независимых временных шкал.
Некоторые представители старшего семейства имеют более крупные корпуса и больший ассортимент периферийных модулей, чем рассматриваемые модели. Так, 80-выводной микроконтроллер PIC18F8720 имеет память программ объемом 128 Кбайт, память данных объемом 3840 байт, EEPROM объемом 1024 байта и предоставляет пользователю до 68 линий ввода/вывода. На входе модуля 10-битного АЦП в этой модели имеется 16-канальный мультиплексор. Кроме того, в данном микроконтроллере реализовано два модуля USART и пять модулей CCP/PWM, а также дополнительный 8-битный таймер.
Как и в моделях среднего семейства, каждое периферийное устройство может генерировать запрос на прерывание. Вдобавок к внешнему прерыванию INT, которое теперь называется INTO, появилось два новых внешних прерывания — INT1 (вывод RB1) и INT2 (вывод RB2). Для поддержки этих внешних прерываний были введены три соответствующих регистра INTCON.
Наиболее заметным отличием в системе прерываний стало появление двух уровней