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

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
mrvarkaus
Родился
Сообщения: 9
Зарегистрирован: Чт мар 11, 2021 05:07:30

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

Сообщение 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.
Реклама
Аватара пользователя
Zikon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вт фев 28, 2017 08:13:31
Откуда: Свердловская обл.

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

Сообщение 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
Реклама
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

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

Сообщение NStorm »

А что там делать? Изобретение велосипеда. Всё давно уже сделано, в т.ч. 16x8: http://www.piclist.com/techref/microchi ... /index.htm
mrvarkaus
Родился
Сообщения: 9
Зарегистрирован: Чт мар 11, 2021 05:07:30

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

Сообщение 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
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Zikon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вт фев 28, 2017 08:13:31
Откуда: Свердловская обл.

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

Сообщение 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
Реклама
mrvarkaus
Родился
Сообщения: 9
Зарегистрирован: Чт мар 11, 2021 05:07:30

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

Сообщение 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
	
Изображение
Реклама
Аватара пользователя
Zikon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вт фев 28, 2017 08:13:31
Откуда: Свердловская обл.

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

Сообщение Zikon »

восстановление - это надо вернуть f6ost
f6ost = f6ost + f5
mrvarkaus
Родился
Сообщения: 9
Зарегистрирован: Чт мар 11, 2021 05:07:30

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

Сообщение 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




Пытался , не получается
Аватара пользователя
Zikon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вт фев 28, 2017 08:13:31
Откуда: Свердловская обл.

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

Сообщение 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


mrvarkaus
Родился
Сообщения: 9
Зарегистрирован: Чт мар 11, 2021 05:07:30

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

Сообщение mrvarkaus »

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

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

Добавлено after 15 minutes 7 seconds:
Zikon, Спасибо большое!
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

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

Сообщение 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).
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
mrvarkaus
Родился
Сообщения: 9
Зарегистрирован: Чт мар 11, 2021 05:07:30

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

Сообщение 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    
После этого заработало
Аватара пользователя
Zikon
Встал на лапы
Сообщения: 92
Зарегистрирован: Вт фев 28, 2017 08:13:31
Откуда: Свердловская обл.

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

Сообщение 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
Ответить

Вернуться в «PIC»