Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
2 / 2 / 0
Регистрация: 17.02.2019
Сообщений: 116
1

(PIC16F84A) Вычислить логические функции

06.06.2020, 17:24. Просмотров 220. Ответов 5
Метки нет (Все метки)

Здравствуйте, снова я по своей же проблеме (нельзя использовать команду iorwf). Необходимо посчитать логическое функции D1-D4. Даны переменные Q в ячейке now
Кликните здесь для просмотра всего текста
(PIC16F84A) Вычислить логические функции

Необходимо путем преобразований получить набор логических функций D в ячейке now
Кликните здесь для просмотра всего текста
(PIC16F84A) Вычислить логические функции

Для это я раскидал переменные по ячейкам var1, var2, var3 и var4 и основная картинка выглядит вот так:
Кликните здесь для просмотра всего текста
(PIC16F84A) Вычислить логические функции

Выполняю этот код
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
; --- Вычисляем D1=Q3*Q4*^Q1 ---
    comf    var1, w     ; инвертируем Q1 с сохранением в аккумуляторе w
    movwf   tmp         ; сохраняем в временной ячейке tmp
    movf    var4, w     ; копируем Q4 в аккумулятор w
    andwf   tmp, f      ; ^Q1*Q4 с сохранением в tmp
    movf    var3, w     ; копируем Q3 в аккумулятор w
    andwf   tmp, f      ; ^Q1*Q4*Q3 с сохранением в tmp
    rlf     tmp, f      ; сдвигаем влево с сохранением в var5
    rlf     tmp, f      ; сдвигаем влево с сохранением в var5
    rlf     tmp, w      ; сдвигаем влево с сохранением в w - выравниваем с 3-м разрядом
    andlw    0x08       ; накладываем маску 000001000 - чистим результат
    movwf    now, f     ; устанавливаем D1 в 3-й разряд now
и получаю D1, которую сразу же кидаю в now и картинка становится вот такой примерно (состояние переменных var, вроде, сохраняется).
Кликните здесь для просмотра всего текста
(PIC16F84A) Вычислить логические функции

Теперь необходимо посчитать D2 и поставить в разряд рядом с D1 в now. D2 вычисляю по коду ниже:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
--- Вычисляем D2=Q4*Q1+^Q4*Q1 = |преобразуем по правилу Де Моргана| = ^[not(Q4*Q1)*not(^Q4*Q1)], где ^ = not ---
    comf    var4, w     ; инвертируем Q4 с сохранением в аккумуляторе w
    andwf   var1, w     ; ^Q4*Q1 с сохранением в w
    comf    var1, w     ; инвертируем ^Q4*Q1 с сохранением в w
    movwf   tmp         ; переносим полученный результать из w в tmp
    movf    var4, w     ; переносим Q4 в аккумулятор w
    andwf   var1, w     ; Q4*Q1 с сохранением в w
    comf    var1, w     ; инвертируем Q4*Q1 с сохранением в w
    andwf   tmp, f      ; логическое умножение результатов w и tmp с получением D2 в 0-м разряде tmp
    comf    tmp, f      ; инвертируем not(Q4*Q1)*not(^Q4*Q1) с сохранением в tmp
    rlf      tmp, f    ; сдвигаем влево с сохранением в f
    rlf      tmp, w    ; сдвигаем влево с сохранением в аккумуляторе w
    andlw    0x04       ; накладываем маску 000000100 - чистим результат
К концу кода по идее получается вот такая картинка
Кликните здесь для просмотра всего текста
(PIC16F84A) Вычислить логические функции
. И вот как по идее нужно переместить D2 в now к D1, не используя команду логического сложения? Просто основной код, я в принципе преобразовал по правилу Де Моргана, а вот это не понимаю...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2020, 17:24
Ответы с готовыми решениями:

(PIC16F84A) Вычислить логические функции (дополнительно - запрещено применять функцию OR)
Здравствуйте, писал код для микроконтроллера, чтобы тот вычислял определенные логические функции....

excel. создать таблицу значение кусочно-непрерывной функции y на интервале [xmin; xmax] с шагом h, для расчета функции y используя логические функции

Какое значение возвращают функции (в частности, логические функции) по умолчанию в Лазарус?
Я наткнулся на одну неприятность. До сих пор я считал, что result в функциях по умолчанию равен...

Вычислить логические выражения
Задание. Вычислить логические выражения. Среди предложенных результатов (Y1 ¸ Y4) указать...

5
2 / 2 / 0
Регистрация: 17.02.2019
Сообщений: 116
06.06.2020, 18:10  [ТС] 2
По сути все можно свести к вопросу о том, как D2 из tmp переместить в now к D1 без использования команды логического сложения?

Добавлено через 10 минут
Подойдет ли команда addwf? Я просто не имею особого представления, как она работает...
0
2573 / 1165 / 152
Регистрация: 28.10.2011
Сообщений: 4,144
Записей в блоге: 6
06.06.2020, 19:40 3
Цитата Сообщение от ZamyatinDanya Посмотреть сообщение
Подойдет ли команда addwf? Я просто не имею особого представления, как она работает
Первая ссылка из поисковика по запросу addwf http://www.microchip.ru/?mid=3&cid=1
0
2 / 2 / 0
Регистрация: 17.02.2019
Сообщений: 116
06.06.2020, 19:43  [ТС] 4
locm, я прекрасно умею читать и находить. Мне интересно, каким образом, это происходит? Это же не логическое сложение
0
Модератор
6692 / 3268 / 1309
Регистрация: 01.02.2015
Сообщений: 10,364
Записей в блоге: 1
06.06.2020, 23:00 5
Если в переменной now один бит равен D1, а остальные точно равны 0, и похожая картина в переменной tmp, то для объединения подойдёт и add и xor.
Можно извратится и тут применить правило де Моргана, но и без него всё хорошо получается.
1
5751 / 2600 / 350
Регистрация: 17.02.2013
Сообщений: 3,782
07.06.2020, 05:26 6
andlw 0x04 ; накладываем маску 000000100 - чистим результат
xorwf now, f ; используем то, что второй бит now нулевой
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2020, 05:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Логические функции
Задание: есть массив из 9 чисел. Нужно проверить являются ли все ети числа положительными. Я...

Логические функции
Здравствуйте! Мне нужна ваша помощь! Как написать такие логические функции, которые...

Логические функции
Всем привет, прошу помощи в решении задачи. Рассчитать таблицу значений составной функции ,...

Логические функции
Не получается построить таблицу истинности с7-10, 12 , 16 формулу.(Задание 3.8) помогите...

Логические функции
Даны две логические функции, зависящие от четырех аргументов A, B, C и D. F1(A,B,C,D) = ((A...

Логические функции
Граждане программисты, помогите пожалуйста, ибо у меня уже спинной мозг плавится. Объясните...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.