Отговори на тема  [ 20 мнения ]  Отиди на страница Предишна  1, 2
PIC как да сравня по голямо число с асемблер 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 01, 2009 8:50 am
Мнения: 125
Местоположение: Varna
Мнение 
Всъщнос го разбрах, благодаря на онова генераторче на код мн ми помогна..

иначе кода е прост
Код:

movf A,W   ;       w -> 13
subwf B,W   ;   w - 6 = 7
btfsc STATUS,C    ;    STATUS,C = 0 ?
goto ET1          ;     da
         ;    ne


:roll:
Добре само остана да изведа и някакви числа..

Посъветвайте ме какво да ползвам за графично извеждане, лсд дисплей аз съм намислил нещо но все пак ще се падвам да чуя и вашите мнения..

_________________
http://truna.freehosting.bg/
форум за механици..
"Любителска електроника" не означава скапана а означава с много любов правена..

Ако можеше да се съберат техническият отдел на atmel и маркетинговият отдел на microchip, ще се получи нещо велико.


Чет Ное 11, 2010 10:40 am
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Чет Ное 20, 2008 1:49 pm
Мнения: 276
Местоположение: Бургас
Мнение 
Обичайно е добра идея да сложиш подпрограмка, която да бърбори с дисплея. За всеки тип дисплей си правиш отделна подпрограма, като на всичките имаш унифициран вход. По този начин, когато смениш дисплея, само сменяш подпрограмата и си готов.

_________________
Digitally yours: Optron


Чет Ное 11, 2010 1:33 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение 
не мога да разбера какъв е проблема за сравняването. няма инструкция, но пък може резултата от ваденето да остава в работния регистър, което е същото


Чет Ное 11, 2010 6:28 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 01, 2009 8:50 am
Мнения: 125
Местоположение: Varna
Мнение 
балшой проблем... :D

Не мога да обърна бинарната стойност която е в една клетка 8O в десетична, понеже десетичната стойност заема 2 или повече клетки.....

незнам дали ме разбрахте, може и аз да не го обеснявам добре...

Имам в клетка Н стойност 10110101 което е десетично число 181 тоест то е съставено от три числа

1 00000001

8 00001000

1 00000001

в буфера на графичното устройство трябва да запиша тези числа за да мога да ги изведа..

колеги хелп... :( :cry:

_________________
http://truna.freehosting.bg/
форум за механици..
"Любителска електроника" не означава скапана а означава с много любов правена..

Ако можеше да се съберат техническият отдел на atmel и маркетинговият отдел на microchip, ще се получи нещо велико.


Нед Ное 21, 2010 11:09 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение 
Трябва ти функция, с която да конвертираш стойностите преди да ги пратиш на дисплея. Ето ти готов пример:

Код:
;********************************
;binary_to_bcd - 8-bits
;
;Input
;  bin  - 8-bit binary number
;   A1*16+A0
;Outputs
; hundreds - the hundreds digit of the BCD conversion
; tens_and_ones - the tens and ones digits of the BCD conversion
binary_to_bcd:

        CLRF    hundreds
        SWAPF   bin, W      ; swap the nibbles
        ADDWF   bin, W      ; so we can add the upper to the lower
        ANDLW   B'00001111' ; lose the upper nibble (W is in BCD from now on)
        SKPNDC              ; if we carried a one (upper + lower > 16)
        ADDLW  0x16        ; add 16 (the place value) (1s + 16 * 10s)
        SKPNDC              ; did that cause a carry from the 1's place?
        ADDLW  0x06        ; if so, add the missing 6 (carry is only worth 10)
        ADDLW   0x06        ; fix max digit value by adding 6
        SKPDC               ; if was greater than 9, DC will be set
        ADDLW  -0x06       ; if if it wasn't, get rid of that extra 6
       
        BTFSC   bin,4       ; 16's place
        ADDLW  0x16 - 1 + 0x6  ; add 16 - 1 and check for digit carry
        SKPDC
        ADDLW  -0x06       ; if nothing carried, get rid of that 6
       
        BTFSC   bin, 5      ; 32nd's place
        ADDLW  0x30        ; add 32 - 2
       
        BTFSC   bin, 6      ; 64th's place
        ADDLW  0x60        ; add 64 - 4
       
        BTFSC   bin, 7      ; 128th's place
        ADDLW  0x20        ; add 128 - 8 % 100
       
        ADDLW   0x60        ; has the 10's place overflowed?
        RLF     hundreds, F ; pop carry in hundreds' LSB
        BTFSS   hundreds, 0 ; if it hasn't
        ADDLW  -0x60       ; get rid of that extra 60
       
        MOVWF   tens_and_ones   ; save result
        BTFSC   bin,7       ; remeber adding 28 - 8 for 128?
        INCF   hundreds, F ; add the missing 100 if bit 7 is set
       
        RETURN              ; all done!


Нед Ное 21, 2010 1:05 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 20 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


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

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни