С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 25.01.2013
Сообщений: 10

Сравнение двух регистров (PIC16F877A)

08.01.2015, 18:02. Показов 3401. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать сравнение двух регистров и выбрать наименьший. Tо есть если к примеру значение регистра AKB1 меньше AKB2 то в PORTB должно быть следующее b'00000001'.
Думаю что это надо как то через команду вычитания сделать, но вот как именно я не понимаю
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
P16f877A.inc
    __CONFIG    H'3F76' & _WDT_OFF
;***********************  Адреса памяти данных  *****************************************
 
DELAY_5mkc  equ         h'46'
Reg_1       EQU         h'47'   ;ТАЙМЕР
Reg_2       EQU         h'48'   ;ТАЙМЕР
Reg_3       EQU         h'49'   ;ТАЙМЕР
AKB1        equ         h'50'
AKB2        equ         h'51'
 
        org 0x000
        nop
        goto    START
        org 04h 
;**************************************************************************************
 
;************************   ОСНОВНАЯ ПРОГРАММА *****************************************
;****************************************************************************************
START:
    
        call    SET_BASIS       ;Вызов подпрограммы установки базисных значений
BEGIN:
 
        call    BLOK1           ; АКБ 1
        call    BLOK2           ; АКБ 2
 
 
goto    BEGIN   
 
;БАЗОВЫЕ ПАРАМЕТРЫ
        
SET_BASIS:
            bsf         STATUS,5    ; переход в Банк 1 
            movlw       b'00000001'
            movwf       TRISA
            clrf        TRISB
            bcf         STATUS,5    ; переход назад в Банк 0
            clrf        PORTB       ; очистка порта
 
BLOK1:
        ;реле нагрузки
        movlw       b'00100001' ; запись в аккумулятор
        movwf       PORTB       ; перенос из аккумулятора в порт
        call        Pause    
; ВЫЖИДАЕТСЯ ВРЕМЯ И ДЕЛАЕТСЯ ЗАМЕР ЧЕРЕЗ АЦП 
        call        ACP
        movwf       AKB1        ;Загружаем результат в регистр AKB1
        movlw       b'00000000' ; запись в аккумулятор
        movwf       PORTB       ; перенос из аккумулятора в порт
 
        return
BLOK2:
        ;реле нагрузки
        movlw       b'00100010' ; запись в аккумулятор
        movwf       PORTB       ; перенос из аккумулятора в порт
        call        Pause       ; переход на метку (с возвратом)
; ВЫЖИДАЕТСЯ ВРЕМЯ И ДЕЛАЕТСЯ ЗАМЕР ЧЕРЕЗ АЦП 
        call        ACP
        movwf       AKB2        ;Загружаем результат в регистр    AKB2
        movlw       b'00000000' ; запись в аккумулятор
        movwf       PORTB       ; перенос из аккумулятора в порт
        
        return
 
 
 
 
 
 
ACP:
        clrf    STATUS          ;Очищаем регистр STATUS
        bsf     STATUS,RP0      ;1-банк
        movlw   b'00000001'     ;все входа АЦП задействованы, "левое"выравнивание, Uоп=RA3
        movwf   ADCON1          ;Отправляем константу в регистр ADCON1 
        bcf     STATUS,RP0      ;0-банк
        movlw   b'11000001'     ;внутренний RC-генератор, AN0-канал, АЦП включен
        movwf   ADCON0          ;Отправляем константу в регистр ADCON0
        movlw   d'12'           ;Загружаем константу в w
        movwf   DELAY_5mkc      ;Отправляем константу в регистр DELAY_5mkc
        decfsz  DELAY_5mkc,1        ;DELAY_5mkc-1
        goto    $-1         ;Цикл на 1 строчку вверх
        bsf     ADCON0,GO_DONE  ;запуск АЦП
        btfsc   ADCON0,GO_DONE  ;ожидание конца преобразования
        goto    $-1             ;Цикл на 1 строку вверх
        movf    ADRESH,W        ;считывание результата в регистр
 
 return
 
 
 
 
Pause
       movlw       .85
            movwf       Reg_1
            movlw       .138
            movwf       Reg_2
            movlw       .3
            movwf       Reg_3
wr          decfsz      Reg_1, F
            goto        wr
            decfsz      Reg_2, F
            goto        wr
            decfsz      Reg_3, F
            goto        wr
            
            return
        end
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.01.2015, 18:02
Ответы с готовыми решениями:

ADuC842. Сравнение содержимого регистров
Ребят как сравнить содержимое регистров? Например R5 и R7? И если равны отправить в ОЗУ

В регистровой паре X хранится команда сложения двух регистров
В регистровой паре X хранится команда сложения двух регистров. Она имеет вид 000011rd ddddrrrr, где r и d — биты, содержащие номера...

Сложить содержание регистров R1 и R4 текущего банка регистров и отразить результат на статическом индикаторе
Сложить содержание регистров R1 и R4 текущего банка регистров и отразить результат на статическом индикаторе. ORG 0 mov...

5
programmer
 Аватар для Thread
2391 / 525 / 69
Регистрация: 01.06.2011
Сообщений: 3,639
08.01.2015, 19:37
Цитата Сообщение от wwwaaa Посмотреть сообщение
Думаю что это надо как то через команду вычитания сделать, но вот как именно я не понимаю
даташит открыть проблема и изучить систему комманд?

p.s.Этот раздел не рассматривает программирование МК.
а от PICов вобще воротит.
0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
09.01.2015, 09:39
Вычитание одно из другого, а потом проверка регистра статуса..

Добавлено через 10 минут
Assembler
1
2
3
4
5
6
7
8
9
  movf  AKB1,W
  bcf   STATUS,C
  subwf AKB2,W
  btfss STATUS,C
  goto  AKB2Bolshe
  movlw b'00000001'
  movwf PORTB
AKB2Bolshe:
  . . . . . . . .
0
10.01.2015, 16:36

Не по теме:

movf AKB1,W
bcf STATUS,C ;смысел?
subwf AKB2,W
btfss STATUS,C
goto AKB2Bolshe
movlw b'00000001'
movwf PORTB
AKB2Bolshe:

0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
10.01.2015, 23:13
Смысл есть, смотрите даташит.
Операция выполняемая ранние в программе могла установит признак переполнения/заема.
0
 Аватар для yoric
57 / 69 / 4
Регистрация: 02.12.2021
Сообщений: 471
02.06.2024, 20:44
Ну и что, что могла?
Цитата Сообщение от pyzhman Посмотреть сообщение
subwf AKB2,W
отрегулирует его в актуальное состояние, в независимости от того что ранее было, разве нет? Или это я с Z путаю, а через С производится сдвиг?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2024, 20:44
Помогаю со студенческими работами здесь

Вывод двух регистров
Если нужно записать число 125 в регистр r5, то записав туда младший бит а в r21 старший, как вывести это число 125 с этих регистров на...

Сравнение двух регистров со светодиодной индикацией
Доброго времени суток! Так как не хватает времени разобраться с ассемблером помогите пожалуйста с программкой. Что требуется: 1. ввод...

Сравнение двух регистров mm и условный переход
Доброго времени суток. Вопрос следующий - есть два регистра mm. Необходимо сравнить эти два регистра и произвести условный переход. Т.е. ...

Вывод на экран двоичного содержимого двух регистров (ввести значения этих регистров требуется с клавиатуры)
требуется разработать программу вывода на экран двоичного содержимого двух регистров так, чтобы первоначальное содержимое этих регистров...

Сравнение регистров
Здравствуйте. Как мне во встроенном ассемблере на Visual S сравнить два регистра или две переменной и после этого должно идти действие? cmp...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru