diff options
author | justanothercatgirl <sotov2070@gmail.com> | 2025-05-27 17:29:41 +0300 |
---|---|---|
committer | justanothercatgirl <sotov2070@gmail.com> | 2025-05-27 17:29:41 +0300 |
commit | 626193487e2795c69b2c7a3de57228656a414b5b (patch) | |
tree | bd74d2d26fed2b115d7fce2391033b4140290ada | |
parent | ef2367f0625525707440092e56d76352c754cd7b (diff) |
-rw-r--r-- | sleep.s | 95 | ||||
-rw-r--r-- | timer.s | 1 |
2 files changed, 63 insertions, 33 deletions
@@ -1,4 +1,4 @@ -.equ SREG, 0x3F +.include "def.s" .macro LDCPUF ldi r19, hhi8(CPUF) @@ -8,9 +8,13 @@ .endm .equ CPUF, 16000000 +.equ BEEPF, 311 +.equ DUTY, 5 .org 0x0000 cli + sbi DDRD, 2 + cbi PORTB, 2 main: rjmp hztest slc_test: ldi r19, 0x00 @@ -52,10 +56,18 @@ ls32_test: ror r16 nop hztest: - ldi r21, hi8(2) - ldi r20, lo8(2) - call genhz -1: rjmp 1b + ldi r31, hi8(BEEPF) + ldi r30, lo8(BEEPF) + ldi r29, 0 + ldi r28, 1 +1: + add r30, r28 + adc r31, r29 + mov r20, r30 + mov r21, r31 + rcall genhz + rjmp 1b +2: rjmp 2b ; * r16 (divident) / r17(divisor) -> ; -> r16 (quotient), r15 (remainder) @@ -146,29 +158,27 @@ u32div: sl16c32: ldi r20, 1 ldi r21, 0 -1: nop - nop - nop - nop - sub r16, r20 - sbc r17, r21 - sbc r18, r21 - sbc r19, r21 - cpi r16, 0 - brne 2f - cpi r17, 0 - brne 3f - cpi r18, 0 - brne 4f - cpi r19, 0 - brne 1b - ret -2: nop - nop -3: nop - nop -4: nop - rjmp 1b +1: nop ; 1 + nop ; 1 + nop ; 1 + sub r16, r20 ; 1 + sbc r17, r21 ; 1 + sbc r18, r21 ; 1 + sbc r19, r21 ; 1 + cpi r16, 0 ; 1 + brne 2f ; 2 : 1 + cpi r17, 0 ; 1 + brne 3f ; 2 : 1 + cpi r18, 0 ; 1 + brne 4f ; 2 : 1 + cpi r19, 0 ; 1 + brne 1b ; 2 : 1 + ret ; 4 +2: nop ; 1 + nop ; 1 +3: nop ; 1 + nop ; 1 +4: rjmp 1b ; 2 ; * r20: shift length ; * {r19:r16}: shift value @@ -195,22 +205,43 @@ lsl32: cpi r20, 0 genhz: clr r22 clr r23 - eor r10, r10 LDCPUF rcall u32div - ldi r20, 4+1 ; 4 for sl16, 1 for frequency + ldi r20, 4-1+DUTY ; +4 for slp, -1 for logic, +DUTY for duty cycle rcall lsr32 + + ; {r9:r6} - on duty cycle mov r6, r16 mov r7, r17 mov r8, r18 mov r9, r19 + ; {r13:r10} - off duty cycle + ldi r20, DUTY + rcall lsl32 + mov r10, r16 + mov r11, r17 + mov r12, r18 + mov r13, r19 + sub r10, r6 + sbc r11, r7 + sbc r12, r8 + sbc r13, r9 + nop -1: mov r16, r6 +L1: +1: sbi PIND, 2 + mov r16, r6 mov r17, r7 mov r18, r8 mov r19, r9 rcall sl16c32 - inc r10 + sbi PIND, 2 + mov r16, r10 + mov r17, r11 + mov r18, r12 + mov r19, r13 + rcall sl16c32 rjmp 1b + ret ; vim:ft=avra @@ -90,4 +90,3 @@ main: rjmp main -" |