Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ldi r16,HIGH(RAMEND)
- out SPH,r16
- ldi r16, LOW(RAMEND)
- out SPL, r16
- ldi r16,$FF
- out DDRB,r16
- .def length=r25
- .def beep=r24
- .def char=r16
- .def c_index=r17
- .def not_ascii=r18
- .def timer=r20
- MORSE:
- ldi timer,$13
- clr c_index
- LOOP:
- rcall GET_CHAR
- cpi char,$00
- breq FINISH
- rcall LOOKUP
- cpi char,27
- brsh NOT_VALID
- rcall SEND
- ldi length,2
- rjmp VALID
- NOT_VALID:
- ldi LENGTH,7
- VALID:
- rcall SHORT_BEEP
- inc c_index
- rjmp LOOP
- SEND:
- lsl not_ascii
- breq END_SEND
- ldi beep,1
- ldi length,3
- brcs HAXXX
- ldi length,1
- HAXXX:
- rcall SHORT_BEEP
- clr beep
- ldi length,1
- rcall SHORT_BEEP
- rjmp SEND
- END_SEND:
- ret
- LOOKUP:
- ldi ZH,HIGH(BTAB*2)
- ldi ZL,LOW(BTAB*2)
- subi char,$41
- add zl, char
- lpm not_ascii,Z
- ret
- DELAY:
- ldi r25,$ff ; Decimal bas
- delayYttreLoop3:
- dec r25
- brne delayYttreLoop3
- ret
- SHORT_BEEP:
- mov r29,length
- lengthloop:
- mov r14,timer ; Decimal bas
- delayYttreLoop1:
- ser r22
- sbrc beep,0
- sbi PORTB,0
- rcall DELAY
- cbi PORTB,0
- rcall DELAY
- delayInreLoop1:
- dec r22
- brne delayInreLoop1
- dec r14
- brne delayYttreLoop1
- dec r29
- brne lengthloop
- ret
- GET_CHAR:
- ldi ZL,LOW(MESSAGE*2)
- ldi ZH,HIGH(MESSAGE*2)
- add ZL,c_index;
- lpm char,z
- ret
- FInISH:
- rjmp finish
- MESSAGE:
- .db "SOS SOS",$00
- BTAB:
- .db $60,$88,$A8,$90,$40,$28,$D0,$08,$20,$78,$B0,$48,$E0,$A0,$F0,$68,$D8,$50,$10,$C0,$30,$18,$70,$98,$B8,$C8
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement