![]() | |
НПО Системы Безопасности (499)340-94-73 График работы: ПН-ПТ: 10:00-19:00 СБ-ВС: выходной ![]() ![]() |
Главная » Периодика » Безопасность 0 ... 114115116117118119120 ... 159 КОПИРОВАНИЕ БИТОВ ИЗ ОДНОГО РЕГИСТРА В ДРУГОЙ Ниже представлен быстрый способ копирования битов одного регистра в другой. movf Source w xorwf Destination, w andlw Bxxxxxxxx , Замена одного x на 1, чтобы , скопировать соответствующий бит xorwf Destination f ПРЕОБРАЗОВАНИЕ ПОЛУБАЙТА В КОД ASCII Наиболее очевидный способ преобразования полубайта в код ASCII заключается в следуюхцем: NybbletoASCII addwf PCL, f 0123456789ABCDEF Есть и другой способ: NybbletoASCII addlw btfsc addlw addlw retu rn 0x036 STATUS, DC 0 - 6 Добавление содержимого полубайта к PCL Возврат кода ASCII через таблицу Преобразование полубайта регистра w в ASCII Добавление 6 к значению Если бит десятичного переноса установлен, это знаки от А до ..Р" Добавление разницы между 9 и Возврат ASCII-кода цифры в регистр W ПРЕОБРАЗОВАНИЕ БАЙТА КОДА ASCII В ШЕСТНАДЦАТЕРИЧНЫЙ ПОЛУБАЙТ Преобразование кода ASCII в шестнадцатеричный полубайт можно вы полнить следующим образом. Поскольку старший полубайт кода ASCII-символов от «А» до «Е» на 1 больше, чем старший полубайт кода символов от О до 9, след)-ет добавить разность кодов, чтобы получился результат 0x000 -OxOOF. ASCIItoNybble addlw ОхОСО Если символы от А до F , устанавливается флаг переноса btfss STATUS, С addlw 7 ; Добавление разности между 9 , и А- addlw 9 return , Возврат значения ASCII-кода , цифры в регистр W Использование знаков кода ASCII, отличных от 0-9 и A-F, приведет к неправильным результатам. ИСПОЛЬЗОВАНИЕ ВХОДА TOCKI В КАЧЕСТВЕ ИСТОЧНИКА ПРЕРЫВАНИЯ Следующая программа сбрасывает таймер TMRO при поступлении положительного фронта сигнала на вывод TOCKI: movlw В11000000 ; Сначала задается тактирование таймера option , частотой командных циклов movlw В1 1100000 , Вывод TOCKI определяется как источник ; сигнала clrf TMRO , Загрузка в таймер TMRO кода OxOFF decf TMRO, f option , Разрешение тактирования таймера , от внешнего сигнала btfsc TMfiO, 1 , Ожидание переднего фронта сигнала goto $ - 1 Этот код также может использоваться в Р1С-микроконтроллере младшего подсемейства для регистрации изменений на входе вместо постоянного опроса входного вывода. ДЕЛЕНИЕ НА ТРИ Ниже приведен алгоритм деления положительной величины на три, разработанный Энди Уорреном (Andy Warren). Он основан на том, что «деление на три» может быть представлено в виде такого ряда: х/3 = х/2 - х/4 + х/16 - х/32 - х/64... Этот алгоритм применяется в Р1С-микроконтроллере следующим образом: Div3: ; Деление содержимого регистра w иа три movlw Dividend clrf Quotient Div3 Loop ; Цикл, пока значение Dividend ие станет ; равным 0.
ИЗМЕРЕНИЕ ДЛИТЕЛЬНОСТИ ИМПУЛЬСА С 16-РАЗРЯДНОЙ ТОЧНОСТЬЮ Программа, измеряющая ширину импульса по высокому уровню, име-
РЕГИСТРАЦИЯ ИЗМЕНЕНИЙ Этот код может применяться для регистрации изменений, происходящих в портах ввода/вывода, таймерах и других регистрах, где изменения не зависят от выполнения конкретных программ: movf Reg, w andlw Mask xorwf old, w Маскирование неиспользуемых битов Сравнение с предыдущим значением 0 ... 114115116117118119120 ... 159 |