Страница 2 из 2

Re: Измерить ширину и период импульса на asm

Добавлено: Сб дек 14, 2013 18:14:52
spartanec
подскажите как число записанное в регистре разложить на десятичные разряды.
к примеру
R16 = 0b10001000 ; 136
надо разложить на
r17 = 0b00000001 ; 1
r18 = 0b00000011 ; 3
r19 = 0b00001100 ; 6

Re: Измерить ширину и период импульса на asm

Добавлено: Сб дек 14, 2013 22:42:16
zero648
Такая вот простая комбинация:
Вход: R16; Выход:R17,R18,R19

Код: Выделить всё

sign_100:   ldi     r21,100
            clr     r20               ;Count result
div_100:    mov     r0,r16            ;Division 100's
            sub     r0,r21
            brcs    ok_100
            inc     r20
            mov     r16,r0
            rjmp    div_100           ; Go again
ok_100:     mov     r17,r20           ; Store result

sign_10:    ldi     r21,10
            clr     r20               ;Count result
div_10:     mov     r0,r16            ;Division 10's
            sub     r0,r21
            brcs    ok_10
            inc     r20
            mov     r16,r0
            rjmp    div_10            ; Go again
ok_10:      mov     r18,r20           ; Store result

ok_1:       mov     r19,r16           ; Store result

Re: Измерить ширину и период импульса на asm

Добавлено: Вт дек 24, 2013 20:45:05
spartanec
Спасибо, а если у меня 4 разяда то как вычитать 1000?

Re: Измерить ширину и период импульса на asm

Добавлено: Вт дек 24, 2013 22:46:36
Jack_A
И как умудрился 4 десятичных разряда втиснуть в один байт ?

Re: Измерить ширину и период импульса на asm

Добавлено: Вт дек 24, 2013 23:25:39
spartanec
из 16 разрядного таймера, я хочу вывести на семисегментник миллисекунды

Re: Измерить ширину и период импульса на asm

Добавлено: Ср дек 25, 2013 00:21:13
zero648
Вот, 16 бит в десятичное:
Вход: r17:r16, выход: r25,r24,r23,r22,r21

Код: Выделить всё

sign_10000: ldi     r18,$10
            ldi     r19,$27
            clr     r20               ;Count result
div_10000:  movw    r0,r16            ;Division 10000's
            sub     r0,r18
            sbc     r1,r19
            brcs    ok_10000
            inc     r20
            movw    r16,r0
            rjmp    div_10000         ; Go again
ok_10000:   mov     r25,r20           ; Store result

sign_1000:  ldi     r18,$e8
            ldi     r19,$03
            clr     r20               ;Count result
div_1000:   movw    r0,r16            ;Division 1000's
            sub     r0,r18
            sbc     r1,r19
            brcs    ok_1000
            inc     r20
            movw    r16,r0
            rjmp    div_1000          ; Go again
ok_1000:    mov     r24,r20           ; Store result

sign_100:   ldi     r18,$64
            ldi     r19,$00
            clr     r20               ;Count result
div_100:    movw    r0,r16            ;Division 100's
            sub     r0,r18
            sbc     r1,r19
            brcs    ok_100
            inc     r20
            movw    r16,r0
            rjmp    div_100           ; Go again
ok_100:     mov     r23,r20           ; Store result

sign_10:    ldi     r18,$0a
            clr     r20               ;Count result
div_10:     mov     r0,r16            ;Division 10's
            sub     r0,r18
            brcs    ok_10
            inc     r20
            mov     r16,r0
            rjmp    div_10            ; Go again
ok_10:      mov     r22,r20           ; Store result

ok_1:       mov     r21,r16           ; Store result



Re: Измерить ширину и период импульса на asm

Добавлено: Чт дек 26, 2013 01:57:03
spartanec
Понял ошибку, считывал не в правильной последовательности старший и младший регистр таймера.