В Программе 11.1,
Встроенная функция delay_cycles () формирует дополнительную задержку заданной длительности (в машинных циклах) и при необходимости может быть заменена любой подходящей функцией задержки.
Может показаться, что эти программы бесполезны, поскольку содержимое регистра h’20’ нигде не задается и не изменяется. Однако в реальной жизни данное значение могло бы изменяться в каком-либо прерывании, скажем, по сигналу от внешнего или внутреннего таймера. Также в этот регистр по прерыванию от модуля АЦП мог бы заноситься результат преобразования. Все эти модули мы будем рассматривать в последующих главах книги.
Наша программа рассчитана на микроконтроллер PIC16F84A. Разумеется, она может выполняться и на других моделях семейства, следует только быть более внимательными при использовании моделей, имеющих
movlw b’00000110’; Все выводы — цифровые
movwf ADCON1
следует добавить команды, осуществляющие переключение банков памяти. В компиляторе CCS для этих целей предусмотрена специальная функция setup_adc_ports (), вызов которой с параметром setup_adc_ports (NO_ANLOGS) выполняет те же самые операции.
Чтобы хорошо понимать характеристики портов ввода/вывода, необходимо знать, как они устроены. Несколько упрощенная схема одного канала порта ввода/вывода показана на Рис. 11.3. Основными элементами этой схемы являются D-триггер данных и
Рис. 11.3.
• Запись в порт вызывает переключение D-триггера данных, в результате чего в него будет записано значение, находящееся на линии шины данных. Эти данные будут храниться до тех пор, пока на микроконтроллер подается напряжение питания (см. Рис. 2.16, в и г на стр. 46). К примеру, в результате выполнения команд
movlw b’11111111’; Все биты рабочего регистра установлены в 1
movwf h’06’; Копируем его в порт В (регистр h’06’)
во все восемь D-триггеров, составляющих регистр порта В (PORTB), будет записана лог. 1.
Установка битов порта будет происходить независимо от того, как сконфигурированы его выводы (на вход или на выход). Однако для выдачи состояния триггера на вывод микроконтроллера должен быть включен буфер TRIS (тристабильный). В этом случае, как показано на Рис. 11.4,