; Задача 1 ------------
DISPLAY movf BINARY,w; Берем двоичное значение
call BIN_2_BCD; Преобразуем его в 3 BCD-разряда
; Задача 2, a ---------
LOOP movf HUNDREDS,w; Берем число сотен
call SVN_SEG; Преобразуем в 7-сегментный код
movwf PORTB; Высылаем в порт В
bcf PORTA,2; Включаем индикатор сотен
call DELAY_10MS; на 10 мс
bsf PORTA,2; и выключаем его
; Задача 2, б --------
movf TENS,w; Берем число десятков
call SVN_SEG; Преобразуем в 7-сегментный код
movwf PORTB; Высылаем в порт В
bcf PORTA,1; Включаем индикатор десятков
call DELAY_10MS; на 10 мс
bsf PORTA,1; и выключаем его
; Задача 2, в --------
movf UNITS,w; Берем число единиц
call SVN_SEG; Преобразуем в 7-сегментный код
movwf PORTB; Высылаем в порт В
bcf PORTA,0; Включаем индикатор единиц
call DELAY_10MS; на 10 мс
bsf PORTA,0; и выключаем его
goto LOOP;Образуем бесконечный цикл
Другим моментом, который следует учитывать при использовании динамической индикации, являются электромагнитные помехи, вызываемые периодическими импульсами относительно большого тока. При наличии в устройстве аналоговых цепей эти помехи могут представлять серьезную проблему, которая в какой-то степени может быть решена за счет хорошей развязки источника питания.
11.1. Одним из недостатков схемы охранной сигнализации, приведенной на Рис. 11.12, является необходимость использования многожильного кабеля для соединения зон (8 линий плюс по одной на зону). В качестве альтернативы можно было бы заменить тристабильный буфер каждой зоны микроконтроллером PIC. При этом связь базового микроконтроллера с микроконтроллерами зон осуществлялась бы по 4-проводной общей шине. Одну из линий шины можно было бы использовать для передачи сигнала квитирования, извещающего базовый контроллер об обнаружении проникновения в зоне, номер которой присутствует на остальных трех линиях шины.
Покажите, как можно было бы сконфигурировать микроконтроллер PIC16F84 для использования в качестве локального контроллера зоны, обращая особое внимание на то, что линия квитирования должна совместно использоваться контроллерами всех зон.
Можно ли уменьшить число линий до трех? Как можно добавить в схему локальные дисплеи, отображающие сработавший датчик?
11.2. К порту С микроконтроллера PIC, работающего на частоте 20 МГц, подключена группа СИД. При этом каждый вывод порта подключен к линии питания через резистор сопротивлением 1 кОм и к общему проводу через конденсатор емкостью 300 пФ. Все светодиоды выключены, и программист пытается включить 7-й и 0-й светодиоды следующим образом:
bcf PORTC,7; Включить 7-й СИД
bcf PORTC,0; Включить 0-й СИД
Однако в действительности включается только 0-й СИД. Почему так происходит?
11.3. Выводы RC[1:0] должны быть сконфигурированы как выходы, на которых после сброса по питанию присутствует лог. 0. Приведенный ниже фрагмент предполагалось использовать для сброса обоих триггеров перед переключением линий порта на выход. При проверке оказалось, что результат для RC0 обратен ожидаемому. Почему так происходит, и можете ли вы исправить код, чтобы он выполнялся правильно?
bcf PORTC,0; Сбрасываем триггер бита 0 (см. Рис. 11.3, г)
bcf PORTC,1; Сбрасываем триггер бита 1
bcf STATUS,RP0; Переключаемся на 1-й банк
movlw b’11111100’; Делаем RC[1:0] выходами
movwf TRISC
bcf STATUS,RP0; Переключаемся обратно в 0-й банк
11.4. В системе необходимо управлять восемью СИД и считывать состояние восьми кнопок с нормально разомкнутыми контактами. В принципе для обеих целей можно использовать один порт В, который в первом случае конфигурируется как выход, а во втором — как вход. Можете ли вы нарисовать соответствующую схему?
11.5. Доработайте цифровой компаратор из Примера 11.2 так, чтобы он сравнивал два однобайтных числа, поступающих извне в 28-выводной микроконтроллер PIC, причем число