Страница 1 из 1
реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l
Добавлено: Чт мар 11, 2021 05:18:29
mrvarkaus
Всем привет. Попытался сделать умножение f4h_f4l * f5 = f6h_f6m_f6l , но так и не понял как работать с переполнением
делал по 2 способу.
Спойлер
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
btfsc STATUS,C
goto m2
goto m3
m2
movf f4l,0
addwf f6l,1
btfsc STATUS,C
goto m4
goto m5
m5
incf f6m
m4
movf f4h,0
addwf f6m,1
btfss STATUS,C
goto m3
goto m6
m6
incf f6h
m3
rlf f4l,1
rlf f4h,1
decf k,1
btfss STATUS,Z
goto m1
nop
end
В итоге у меня получается так

, что он находит f6m, f6l . f6h я как ток не пытался сделать, но не получается. Мб кто нибудь сможет помощь. pic16f877.
Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l
Добавлено: Чт мар 11, 2021 09:30:34
Zikon
зачем столько 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
NStorm
А что там делать? Изобретение велосипеда. Всё давно уже сделано, в т.ч. 16x8:
http://www.piclist.com/techref/microchi ... /index.htm
Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l
Добавлено: Чт мар 11, 2021 16:09:01
mrvarkaus
[uquote="NStorm",url="/forum/viewtopic.php?p=3995305#p3995305"]А что там делать? Изобретение велосипеда. Всё давно уже сделано, в т.ч. 16x8:
http://www.piclist.com/techref/microchi ... /index.htm[/uquote]
Просто мне дали ТЗ в университете , там было 4 способа и 5 способ просто сложение само на себя. Я сделал сначала обычное умножение f4*f5, а когда нужно было взять побольше, то все потерялся. Спасибо за ответ попробую проверить
Добавлено after 1 hour 54 minutes 40 seconds:
Заработало!
Поменял местами h , l
Спойлер
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
rrf f5
btfss STATUS,C
goto m3
movf f4l, W
addwf f6h
btfsc STATUS,C
incf f6m
movf f4h, W
addwf f6m
btfsc STATUS,C
incf f6l
m3
rrf f6h
rrf f6m
rrf f6l
decfsz k
goto m1
nop
end
Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l
Добавлено: Чт мар 11, 2021 18:00:12
Zikon
В последнем коде со сдвигом f6 накосячил
вот другой вариант
Спойлер
Код: Выделить всё
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 f6l
rlf f6m
rlf f6h
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
decfsz k
goto m1
nop
end
Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l
Добавлено: Чт мар 18, 2021 23:22:48
mrvarkaus
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
Zikon
восстановление - это надо вернуть f6ost
f6ost = f6ost + f5
Re: реализации выражения: f4h_f4l * f5 = f6h_f6m_f6l
Добавлено: Сб мар 20, 2021 17:31:08
mrvarkaus
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
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,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
mrvarkaus
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
Zhuk72
[uquote="mrvarkaus",url="/forum/viewtopic.php?p=4000976#p4000976"]... заработало , btfss на sc поставил! путаюсь всегда в них[/uquote]
Все очень просто:
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
mrvarkaus
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
Zikon
а так?
Код: Выделить всё
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