108 lines
2.5 KiB
NASM
108 lines
2.5 KiB
NASM
; ***************************************************************************
|
|
; copyright : (C) 2026 by Martin Preuss
|
|
; email : martin@libchipcard.de
|
|
;
|
|
; ***************************************************************************
|
|
; * This file is part of the project "AqHome". *
|
|
; * Please see toplevel file COPYING of that project for license details. *
|
|
; ***************************************************************************
|
|
|
|
|
|
|
|
; ***************************************************************************
|
|
; data
|
|
|
|
.dseg
|
|
|
|
beeperSimpleTimer: .byte 1
|
|
beeperSimpleOnTime: .byte 1
|
|
beeperSimpleOffTime: .byte 1
|
|
|
|
|
|
|
|
; ***************************************************************************
|
|
; code
|
|
|
|
.cseg
|
|
|
|
|
|
BEEPER_SIMPLE_BEGIN:
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; BeeperSimple_Init
|
|
;
|
|
; @return CFLAG set if okay, clear on error
|
|
; @clobbers r16
|
|
|
|
BeeperSimple_Init:
|
|
sbi BEEPER_SIMPLE_DDR, BEEPER_SIMPLE_PINNUM ; out
|
|
cbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; off
|
|
clr r16
|
|
sts beeperSimpleTimer, r16
|
|
sts beeperSimpleOnTime, r16
|
|
sts beeperSimpleOffTime, r16
|
|
sec
|
|
ret
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine BeeperSimple_Every100ms @global
|
|
;
|
|
; @clobbers r16
|
|
|
|
BeeperSimple_Every100ms:
|
|
lds r16, beeperSimpleTimer
|
|
tst r16
|
|
breq BeeperSimple_Every100ms_ret
|
|
dec r16
|
|
brne BeeperSimple_Every100ms_setTimer
|
|
|
|
sbis BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; skip next op if beeper is on
|
|
rjmp BeeperSimple_Tick_isOff
|
|
; is on
|
|
cbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; off
|
|
lds r16, beeperSimpleOffTime
|
|
rjmp BeeperSimple_Every100ms_setTimer
|
|
BeeperSimple_Tick_isOff:
|
|
sbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; on
|
|
lds r16, beeperSimpleOnTime
|
|
BeeperSimple_Every100ms_setTimer:
|
|
sts beeperSimpleTimer, r16
|
|
BeeperSimple_Every100ms_ret:
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine BeeperSimple_SetTiming @global
|
|
;
|
|
; Set blinking timing for LED. Switch LED on.
|
|
; @param r18 ontime (in 1/10s)
|
|
; @param r19 offtime (in 1/10s)
|
|
; @clobbers none
|
|
;
|
|
|
|
BeeperSimple_SetTiming:
|
|
cbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; off
|
|
sts beeperSimpleOnTime, r18
|
|
sts beeperSimpleTimer, r18
|
|
sts beeperSimpleOffTime, r19
|
|
tst r18
|
|
breq BeeperSimple_SetTiming_ret
|
|
sbi BEEPER_SIMPLE_PORT, BEEPER_SIMPLE_PINNUM ; on
|
|
BeeperSimple_SetTiming_ret:
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
BEEPER_SIMPLE_END:
|
|
.equ MODULE_SIZE_BEEPER_SIMPLE = BEEPER_SIMPLE_END-BEEPER_SIMPLE_BEGIN
|
|
|
|
|
|
|