Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- rjmp INIT
- 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 ;dessa ska ASCI tecknet omvandlas till, ska ligga i microkomtrollensprogramminne hur skriver vi detta? (nuflach)
- MESSAGE:
- .db "MESSAGE", $00 ;ord vi vill skriva ut följt av nollor för att markera slutet av ordet /sista bokstaven
- .def r20 = char
- ;---------------------------------------------------------------------------------------------------------------------------------
- INIT:
- ldi r24, HIGH(RAMEND) ;sätter stacken och stackpekarna
- out SPH,r24
- ldi r24, LOW(RAMEND)
- out SPL,r24
- clr r18
- out DDRA,r18 ;sätter vilka utsignaler och in signale vi ska ha
- ldi r18, $8F
- out DDRB, r18
- START:
- call MORSE ;
- jmp START
- ;--------------------------------------------------------------------------------------------------------------------------------
- MORSE: ;Huvudprogrammet som sänder hela strängen.
- ldi ZH,HIGH(MESSAGE * 2) ;Sätter stack pekarna
- ldi ZL,LOW(MESSAGE * 2)
- rcall GET_CHAR ;hämtar bokstäver tills NUL. dvs finns inga fler
- MORSE_BACK:
- call LOOKUP
- call SEND
- call NOBEEP(2N) ;2N tystnad
- call GET_CHAR
- cpi char, 0 ;jämför char med noll, if 0 -> slut på bokstäver
- brne MORSE_BACK
- ret ; hoppar tillbaka till START som gör att porgrammet körs igen
- ;-------------------------------------------------------------------------------------------------------------
- GET_CHAR: ;Hamtar nästa ascii-tecken ur stangen.
- lpm char, Z+ ;load from program memory, laddar in i r20, Z+ medför att vi fortsätter att peka på nästa bokstav tills noll
- ret
- ;-------------------------------------------------------------------------------------------------------------
- CYCLE:
- brts JMPING ;om t flaggan är satt hoppa till 'JUMPING' falggan sätts i NOBEEP
- sbi PORTB,0 ;genererar ljud, tyst /eller inte
- JMPING:
- call DELAY
- cbi PORTB,0 ;medför inget ljud
- call DELAY
- ret
- ;-----------------------------------------------------------------------------------------------------------------------------------------------
- LOOKUP: ;översatter ascii-tecken till binärkod. hämta tabell ta det vi läser in från r 20 minu $41 för att få fram rätt index för rätt bokstav i tabellen "BTAB"
- ;ldi r21,$41 ; z pekaren anänvs för att peka ut rätt bokstav
- push ZH ;sprar undan värdena i ZH / ZL till stacken
- push ZL
- ldi ZH,HIGH(BTAB * 2) ;sätter nya stackpekare som pekar på tabellen BTAB
- ldi ZL,LOW(BTAB * 2)
- subi char,$41 ;char minus $41 motsvarande A i tabell fr att få rätt index
- add ZL,char ; adderar till Z Low
- lpm char,Z ; laddar in i r20= char
- pop ZL ;pop:ar stacken så vi får tillbka värdena på pekarna
- pop ZH
- ret
- ;------------------------------------------------------------------------------------------------------------------------------------------------
- SEND: ;Skickar iväg ett tecken ska vänsterskifta tills hela byten blir 0 och en etta i carry flaggan
- lsl char ; vänsterb shift
- brcs BEEP(3N) ; carry satt -> BEEP 3N
- brcc BEEP(N) ; carry INTE satt -> BEEP N
- brne SEND ; loopar så länge char =! 0
- ret
- ;------------------------------------------------------------------------------------------------------------------------------------------------
- BEEP(N): ;Piper i hogtalaren tiden N.
- ldi r22,$1
- call CYCLE
- dec r16
- brne BEEP(N)
- ret
- BEEP(3N): ;Piper i hogtalaren tiden N.
- ldi r22,$3
- call CYCLE
- dec r16
- brne BEEP(3N)
- ret
- NOBEEP(2N):;Piper inte i hogtalaren tiden N.
- ldi r24,$2
- set ;sätter T-flaggan "tempoary flag"
- call CYCLE
- clt ;clear t flaggan
- dec r24
- brne NOBEEP(2N)
- ret
- ;------------------------------------------------------------------------------------------------------------------------------------------------
- DELAY:
- sbi PORTB,7
- ldi r16, 6
- delayYttreLoop:
- ldi r17,$1F
- delayInreLoop:
- dec r17
- brne delayInreLoop
- dec r16
- brne delayYttreLoop
- cbi PORTB,7
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement