Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .def cnt = r20
- .def lct = r21
- ldi r16,HIGH(RAMEND)
- out SPH,r16
- ldi r16,LOW(RAMEND)
- out SPL,r16
- out DDRA,r16
- ldi r16,$0F
- out DDRB,r16
- ldi r26, 0f
- MORSE:
- inc cnt
- ldi ZH, high(MESSAGE*2)
- ldi ZL, low(MESSAGE*2)
- call GET_CHAR
- cpi r17, $00
- brne MAIN_LOOP
- ret
- MAIN_LOOP:
- call LOOKUP
- call SEND
- jmp MORSE
- GET_CHAR:
- lpm r17, Z+
- inc lct
- cp cnt, lct
- brne GET_CHAR
- clr lct
- ret
- MESSAGE:
- .db "DA", $00
- GET_BIT:
- lsl r17
- ret
- SEND:
- cpi r17, $80
- brne SEND_LOOP
- call LONGNOBEEP
- ret
- SEND_LOOP:
- call GET_BIT
- brcc SHORTBEEP
- brcs LONGBEEP ;nobeep
- call SHORTNOBEEP
- jmp SEND
- LONGBEEP:
- ldi r25, 3
- sbi PORTA, 0
- BEEP1:
- ; Loopa delay r25 ggr
- call DELAY
- dec r25
- cpse r26, r25
- jmp BEEP1
- cbi PORTA, 0
- jmp SEND
- SHORTBEEP:
- sbi PORTA, 0
- call DELAY
- cbi PORTA, 0
- jmp SEND
- LONGNOBEEP:
- ldi r25, 2
- NOBEEP1:
- ; Loopa delay r25 ggr
- call DELAY
- dec r25
- cpse r26, r25
- jmp NOBEEP1
- ret
- SHORNOTBEEP:
- call DELAY
- ret
- DELAY:
- dec r25
- sbi PORTB,7
- ldi r16,21
- delayYttreLoop:
- ldi r19,$FF
- delayInreLoop:
- dec r19
- brne delayInreLoop
- dec r16
- brne delayYttreLoop
- cbi PORTB,7
- ret
- LOOKUP:
- ldi ZH,HIGH(BTAB*2)
- ldi ZL,LOW(BTAB*2)
- call LOOP_LOOKUP
- ret
- LOOP_LOOKUP:
- lpm r18, Z+
- cp r17, r18
- brne LOOP1
- lpm r17, Z+
- ret
- LOOP1:
- adiw Z,1
- jmp LOOP_LOOKUP
- BTAB:
- .db $41,$60,$42,$88,$43,$A8,$44,$90,$45,$40,$46,$28,$47,$D0,$48,$08,$49,$20,$4A,$78,$4B,$B0,$4C,$48,$4D,$E0,$4E,$A0,$4F,$F0,$50,$68,$51,$D8,$52,$50,$53,$10,$54,$C0,$55,$30,$56,$18,$57,$70,$58,$98,$59,$B8,$5A,$C8,$20,$01
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement