Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Чт мар 11, 2021 05:18:29

Всем привет. Попытался сделать умножение f4h_f4l * f5 = f6h_f6m_f6l , но так и не понял как работать с переполнением
Изображение
делал по 2 способу.

В итоге у меня получается так Изображение, что он находит f6m, f6l . f6h я как ток не пытался сделать, но не получается. Мб кто нибудь сможет помощь. pic16f877.

Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Чт мар 11, 2021 09:30:34

зачем столько GOTO
вот первое что увидел

Код:
title "PIC16f877 sample"
list p=16f877
#include <p16f877.inc>

f4l equ 0x20
f4h equ 0x21
f5 equ 0x22
f6l equ 0x23
f6m equ 0x24
f6h equ 0x25
k equ 0x26
org 00h

goto Start
Start
clrf f6h
clrf f6l
clrf f6m
movlw 0x8
movwf k
bcf STATUS,C
m1
rrf f5,1
btfss STATUS,C     ;btfsc STATUS,C
goto m3            ;goto m2
                        ;goto m3
                        ;m2
movf f4l,0
addwf f6l,1
btfsc STATUS,C    ;btfsc STATUS,C
                          ;goto m4
                          ;goto m5
                          ;m5
incf f6m              ;incf f6m
                          ;m4
movf f4h,0
addwf f6m,1
btfsc STATUS,C    ;btfss STATUS,C
                       ;goto m3
                       ;goto m6
                       ;m6
incf f6h            ;incf f6h
m3
rlf f4l,1
rlf f4h,1
decfsz  k,1       ;decf k,1
                    ;btfss STATUS,Z
goto m1
nop
end


Добавлено after 10 minutes 25 seconds:
увидел ошибку
сдвигаешь f4l и f4h влево и теряем старшие разряды
надо добавить f4hh
или другой алгоритм со сдвигом f6

Добавлено after 6 minutes 5 seconds:
Код:
title "PIC16f877 sample"
list p=16f877
#include <p16f877.inc>

f4l equ 0x20
f4m equ 0x21
f4h equ 0x22
f5 equ 0x23
f6l equ 0x24
f6m equ 0x25
f6h equ 0x26
k equ 0x27
org 00h

goto Start
Start
clrf f6l
clrf f6m
clrf f6h
clrf f4h
movlw 0x8
movwf k
bcf STATUS,C

m1
rrf f5
btfss STATUS,C   
goto m3           
movf f4l, W
addwf f6l
btfsc STATUS,C 
incf f6m           
movf f4m, W
addwf f6m
btfsc STATUS,C
incf f6h   
movf f4h, W
addwf f6h

m3
rlf f4l
rlf f4m
rlf f4h
decfsz  k
goto m1

nop

end


Добавлено after 1 hour 38 minutes 52 seconds:
Когда двигаем f6 то f5 двигаем в другую сторону


Код:
title "PIC16f877 sample"
list p=16f877
#include <p16f877.inc>

f4l equ 0x20
f4h equ 0x21
f5 equ 0x22
f6l equ 0x23
f6m equ 0x24
f6h equ 0x25
k equ 0x26
org 00h

goto Start
Start
clrf f6l
clrf f6m
clrf f6h
movlw 0x8
movwf k
bcf STATUS,C

m1
rlf f5
btfss STATUS,C   
goto m3           
movf f4l, W
addwf f6l
btfsc STATUS,C
incf f6m           
movf f4h, W
addwf f6m
btfsc STATUS,C
incf f6h   

m3
rlf f6l
rlf f6m
rlf f6h
decfsz  k
goto m1

nop

end

Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Чт мар 11, 2021 09:49:10

А что там делать? Изобретение велосипеда. Всё давно уже сделано, в т.ч. 16x8: http://www.piclist.com/techref/microchi ... /index.htm

Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Чт мар 11, 2021 16:09:01

А что там делать? Изобретение велосипеда. Всё давно уже сделано, в т.ч. 16x8: http://www.piclist.com/techref/microchi ... /index.htm

Просто мне дали ТЗ в университете , там было 4 способа и 5 способ просто сложение само на себя. Я сделал сначала обычное умножение f4*f5, а когда нужно было взять побольше, то все потерялся. Спасибо за ответ попробую проверить



Добавлено after 1 hour 54 minutes 40 seconds:
Заработало!
Поменял местами h , l
Изображение

Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Чт мар 11, 2021 18:00:12

В последнем коде со сдвигом f6 накосячил
вот другой вариант

Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Чт мар 18, 2021 23:22:48

Zikon,
А с делением как произвести восстановление ?
я там ниже скрин кинул, и там подрисовал пункт, где идет восстановление., пытался реализовать, но что-то не идет.
Код:
title "PIC16f877 sample"
list p=16f877
#include <p16f877.inc>

f4       equ 0x20
f5       equ 0x21
f6       equ 0x22
f6ost    equ 0x23
k      equ   0x24
z      equ   0x25

   goto   Start
Start
   clrf   f6
   clrf   f6ost
   movlw   0x08
   movwf   k
   movf   f4,W
   movwf   f6
m2
   rlf      f6,1
   movf   f6,W
   movwf   f6ost
   movf   f5,W
   subwf   f6ost,1   
   btfsc   STATUS,C
   goto m4
   goto m3
m4   
   movwf   z ; делитель там
   movf   f6,W
   movlw   0x0
   movwf   f6
   movf   z,W
   movwf   f5
   comf   f6ost
   addwf   f6ost,1
   
   bsf      f6ost,1
   bcf      STATUS,C
   comf   f6ost      
m3
   rlf      f6,1
   decf   k,1
   btfss   STATUS,Z
   goto   m2
   nop
   end
   

Изображение

Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Пт мар 19, 2021 08:00:36

восстановление - это надо вернуть f6ost
f6ost = f6ost + f5

Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Сб мар 20, 2021 17:31:08

Zikon, Zikon, title "PIC16f877 sample"
list p=16f877
#include <p16f877.inc>

f4 equ 0x20
f5 equ 0x21
f6 equ 0x22
f6ost equ 0x23
k equ 0x24

goto Start
Start
clrf f6
clrf f6ost
movlw 0x08
movwf k
movf f4,W
movwf f6
m2
rlf f6,1
movf f6,W
movwf f6ost
movf f5,W
subwf f6ost,1
btfsc STATUS,C
goto m4
goto m3
m4
addwf f6ost,1
bsf STATUS,C
bcf STATUS,C
m3
rlf f6,1
decf k,1
btfss STATUS,Z
goto m2
nop
end




Пытался , не получается

Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Сб мар 20, 2021 18:19:26

вот что может быть

Код:
title "PIC16f877 sample"
list p=16f877
#include <p16f877.inc>

f4 equ 0x20
f5 equ 0x21
f6 equ 0x22
f6ost equ 0x23
k equ 0x24

goto Start

Start
clrf f6
clrf f6ost
movlw 0x08
movwf k
movf f4,W
movwf f6
m2
rlf f6,W
rlf f6ost

movf f5,W
subwf f6ost,1
btfss STATUS,C
goto m3

addwf f6ost,1
bcf STATUS,C

m3
rlf f6,1
decfsz  k
goto m2

nop

end


Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Сб мар 20, 2021 18:56:02

Zikon, не работает, в остатке выбивает 6 , в ответе 0

Добавлено after 6 minutes 19 seconds:
Zikon, заработало , btfss на sc поставил! путаюсь всегда в них)

Добавлено after 15 minutes 7 seconds:
Zikon, Спасибо большое!

Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Сб мар 20, 2021 20:07:48

... заработало , btfss на sc поставил! путаюсь всегда в них

Все очень просто:
btfss = Bit Test File Skip if Set (проверить бит регистра, пропустить следующую, если он выставлен, т.е. 1).
btfsc = Bit Test File Skip if Clear (проверить бит регистра, пропустить следующую, если он очищен, т.е. 0).

Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Сб мар 20, 2021 23:49:28

Zikon,
Попытался реализовать f4_f4l/f5=f6_f6l_f6ost . Не получается

Код:
title "PIC16f877 sample"
list p=16f877
#include <p16f877.inc>

f4      equ 0x20
f4l      equ   0x21
f5      equ 0x22
f6      equ 0x23
f6l      equ   0x24
f6ost   equ 0x25
k       equ 0x26

goto Start

Start
    clrf    f6
   clrf   f6l     
    clrf    f6ost   
    movlw   0x08     
    movwf   k     
    movf    f4,W   
    movwf   f6
   movf    f4l,W   
    movwf   f6l   
m2
    rlf     f6,W   
    rlf     f6ost   
    movf    f5,W   
    subwf   f6ost,1
   btfsc   STATUS,C
   goto    m3
   addwf   f6ost,1
   bcf     STATUS,C
m3
    rlf   f6,1
    decfsz k       
    goto m2 
m1
    rlf     f6l,W   
    rlf     f6ost   
    movf    f5,W   
    subwf   f6ost,1
   btfsc   STATUS,C
   goto    m4
   addwf   f6ost,1
   bcf     STATUS,C
m4
   rlf   f6l,1
    decfsz k       
    goto m1
nop               
end               


Добавлено after 13 minutes 24 seconds:
Zikon,
Нашел костыль один , заново задать цикл после выполнения 1 деления
но думаю есть вариант проче
Код:
title "PIC16f877 sample"
list p=16f877
#include <p16f877.inc>

f4      equ 0x20
f4l      equ   0x21
f5      equ 0x22
f6      equ 0x23
f6l      equ   0x24
f6ost   equ 0x25
k       equ 0x26

goto Start

Start
    clrf    f6
   clrf   f6l     
    clrf    f6ost   
    movlw   0x8     
    movwf   k     
    movf    f4,W   
    movwf   f6
   movf    f4l,W   
    movwf   f6l   
m2
    rlf     f6,W   
    rlf     f6ost   
    movf    f5,W   
    subwf   f6ost,1
   btfsc   STATUS,C
   goto    m3
   addwf   f6ost,1
   bcf     STATUS,C
m3
    rlf   f6,1
    decfsz k       
    goto m2
 
   movlw   0x8     
    movwf   k           ; новый ЦИКЛ
m1
    rlf     f6l,W   
    rlf     f6ost   
    movf    f5,W   
    subwf   f6ost,1
   btfsc   STATUS,C
   goto    m4
   addwf   f6ost,1
   bcf     STATUS,C
m4
   rlf    f6l,1
    decfsz k       
    goto m1
nop               
end   


После этого заработало

Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l

Вс мар 21, 2021 09:23:53

а так?

Код:
title "PIC16f877 sample"
list p=16f877
#include <p16f877.inc>

f4l equ 0x20
f4 equ 0x21
f5 equ 0x22
f6l equ 0x23
f6 equ 0x24
f6ost equ 0x25
k equ 0x26

goto Start

Start
clrf f6l
clrf f6
clrf f6ost
movlw 0x10
movwf k
movf f4l,W
movwf f6l
movf f4,W
movwf f6

m2
rlf f6l,W
rlf f6, 1
rlf f6ost, 1

movf f5,W
subwf f6ost,1
btfsc STATUS,C
goto m3

addwf f6ost,1
bcf STATUS,C

m3
rlf f6l,1
decfsz  k
goto m2

nop

end
Ответить