Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; +-V-+
- ; vcc 1| |14 gnd
- ; xtal 2| |13 led
- ; xtal 3| |12
- ; rst 4| |11 prgm
- ;outTime 5| |10
- ; 6| | 9 sck
- ; mosi 7| | 8 miso
- ; +---+
- .include "../include/tn24Adef.inc"
- .org 0x0000
- rjmp start
- .org 0x0001
- rjmp INT0but
- .org 0x0009
- rjmp TIM0_COMPA
- INT0but:
- out GIMSK,r8 ;disable outtime interrupt
- sei
- rcall outTime
- reti
- TIM0_COMPA:
- inc r19
- cpi r19,10
- brne sec1
- inc r20
- ldi r19,0
- sec1:
- cpi r20,6
- brne sec2
- inc r21
- ldi r20,0
- sec2:
- cpi r21,10
- brne min1
- inc r22
- ldi r21,0
- min1:
- cpi r22,6
- brne min2
- inc r23
- ldi r22,0
- min2:
- cpi r23,10
- brne hrs1
- inc r24
- ldi r23,0
- hrs1:
- cpi r24,2
- brne hrs2
- cpi r23,4
- brne hrs2
- ldi r24,0
- ldi r23,0
- hrs2:
- reti
- start:
- ldi r16, low(RAMEND)
- out SPL,r16 ;set low stack end value
- ldi r16,0b11111011
- out ddrb,r16 ;set ddrb to outputs
- out ddra,r16 ;set ddra to outputs, buttons inputs
- ldi r16,0b10000000
- out ACSR,r16
- ldi r16,0b11111011
- out PRR,r16 ;disables all ecxept timer 0
- ldi r16,0b00000010
- out TIMSK0,r16 ;enable overflow interrupt
- ldi r16,0b00000101
- out TCCR0B,r16 ;set prescaler
- ldi r16,0b00000010
- out TCCR0A,r16
- ldi r16,0b00011111
- out OCR0A,r16
- ldi r16,0
- out TCNT0,r16 ;init timer at 0
- ldi r16,0b00100011
- out MCUCR,r16
- ldi r16,0b01000000 ;use to set GIMSK pin0 to 1
- cp r9,r16
- clr r8 ;use as 0 for setting GIMSK
- clr r10
- clr r11
- clr r12
- clr r13
- clr r18
- clr r19
- clr r20
- clr r21
- clr r22
- clr r23
- clr r24 ;initializing all used registers to 0
- sei
- main:
- out GIMSK,r9 ;enable outtime interrupt
- sleep
- sbis pina,2
- rjmp main ;goto prgm if pressed
- out GIMSK,r8 ;disable outtime interrupt
- sbi porta,0
- cbi porta,0 ;blink quickly to show programming mode
- prgm:
- sbis pina,2
- rjmp main ;goto main if button is released
- sbic pinb,2
- rjmp settime ;goto settime if pressed, starting input process
- rjmp prgm
- settime:
- clr r18
- clr r10
- clr r11
- clr r12
- clr r13
- rjmp bit
- topbit:
- clr r17
- sbis pina,2 ;leave if button is released
- rjmp reset
- cpi r18,20
- brge save
- sbis pinb,2
- rjmp topbit
- bit:
- sbis pina,2 ;leave if button is released
- rjmp reset
- sbis pinb,2 ;go to setDit if released before r17 > 255 cycles
- rjmp setDit
- ldi r16,240
- inc r16
- brne pc-1 ;adds some delay
- inc r17
- cpi r17,255 ;n
- brge bit ;compare r17 to 255 cycles, stay in loop if LT (could be dit), leave if GT (dah)
- setDah:
- sbic pinb,2
- rjmp pc-1
- sbi porta,0 ;temp
- ldi r16,200
- inc r16
- brne pc-1
- cbi porta,0 ;temp
- set ;set carry
- rjmp assnToReg
- setDit:
- sbi porta,0 ;temp
- cbi porta,0 ;temp
- clt ;clear carry
- assnToReg:
- inc r18 ;set to 1 when first ran
- cpi r18,6
- brsh pc+4 ;1, 2, 3, 4, 5
- lsl r10
- bld r10,0
- rjmp topbit
- cpi r18,11
- brsh pc+4 ;6, 7, 8, 9, 10
- lsl r11
- bld r11,0
- rjmp topbit
- cpi r18,16
- brsh pc+4 ;11,12,13,14,15
- lsl r12
- bld r12,0
- rjmp topbit
- cpi r18,21 ;16,17,18,19,20
- brsh pc+4
- lsl r13
- bld r13,0
- rjmp topbit
- save:
- cbi porta,0
- sbi porta,0
- sbic pina,2
- rjmp pc-1
- cbi porta,0
- rjmp MorseToDec ;will run if it overflow
- reset:
- clr r10
- clr r11
- clr r12
- clr r13
- clr r18
- rjmp main
- MorseToDec:
- mov r16,r10
- rcall set
- mov r24,r16
- mov r16,r11
- rcall set
- mov r23,r16
- mov r16,r12
- rcall set
- mov r22,r16
- mov r16,r13
- rcall set
- mov r21,r16
- ldi r20,0
- ldi r19,0
- rjmp main
- set: ;use reg 10 11 12 13
- cpi r16,0b00011111
- brne pc+3
- ldi r16,0b00000000
- ret
- cpi r16,0b00001111
- brne pc+3
- ldi r16,0b00000001
- ret
- cpi r16,0b00000111
- brne pc+3
- ldi r16,0b00000010
- ret
- cpi r16,0b00000011
- brne pc+3
- ldi r16,0b00000011
- ret
- cpi r16,0b00000001
- brne pc+3
- ldi r16,0b00000100
- ret
- cpi r16,0b00000000
- brne pc+3
- ldi r16,0b00000101
- ret
- cpi r16,0b00010000
- brne pc+3
- ldi r16,0b00000110
- ret
- cpi r16,0b00011000
- brne pc+3
- ldi r16,0b00000111
- ret
- cpi r16,0b00011100
- brne pc+3
- ldi r16,0b00001000
- ret
- cpi r16,0b00011110
- brne pc+3
- ldi r16,0b00001001
- ret
- ldi r16,0b00000000
- ret
- outTime:
- mov r25,r24
- rcall outNum
- mov r25,r23
- rcall outNum
- mov r25,r22
- rcall outNum
- mov r25,r21
- rcall outNum
- rjmp main
- outNum:
- cpi r25,0
- brne pc+2
- rcall zero
- cpi r25,1
- brne pc+2
- rcall one
- cpi r25,2
- brne pc+2
- rcall two
- cpi r25,3
- brne pc+2
- rcall three
- cpi r25,4
- brne pc+2
- rcall four
- cpi r25,5
- brne pc+2
- rcall five
- cpi r25,6
- brne pc+2
- rcall six
- cpi r25,7
- brne pc+2
- rcall seven
- cpi r25,8
- brne pc+2
- rcall eight
- cpi r25,9
- brne pc+2
- rcall nine
- ret
- zero:
- rcall dah
- rcall dah
- rcall dah
- rcall dah
- rcall dah
- rcall space
- ret
- one:
- rcall dit
- rcall dah
- rcall dah
- rcall dah
- rcall dah
- rcall space
- ret
- two:
- rcall dit
- rcall dit
- rcall dah
- rcall dah
- rcall dah
- rcall space
- ret
- three:
- rcall dit
- rcall dit
- rcall dit
- rcall dah
- rcall dah
- rcall space
- ret
- four:
- rcall dit
- rcall dit
- rcall dit
- rcall dit
- rcall dah
- rcall space
- ret
- five:
- rcall dit
- rcall dit
- rcall dit
- rcall dit
- rcall dit
- rcall space
- ret
- six:
- rcall dah
- rcall dit
- rcall dit
- rcall dit
- rcall dit
- rcall space
- ret
- seven:
- rcall dah
- rcall dah
- rcall dit
- rcall dit
- rcall dit
- rcall space
- ret
- eight:
- rcall dah
- rcall dah
- rcall dah
- rcall dit
- rcall dit
- rcall space
- ret
- nine:
- rcall dah
- rcall dah
- rcall dah
- rcall dah
- rcall dit
- rcall space
- ret
- dit:
- sbi porta,0
- rcall delay
- cbi porta,0
- rcall delay
- ret
- dah:
- sbi porta,0
- rcall delay
- rcall delay
- rcall delay
- cbi porta,0
- rcall delay
- ret
- space:
- rcall delay
- rcall delay
- rcall delay
- rcall delay
- ret
- delay:
- ldi r16,1
- inc r16
- brne pc-1
- ldi r16,1
- inc r16
- brne pc-1
- ldi r16,1
- inc r16
- brne pc-1
- ldi r16,1
- inc r16
- brne pc-1
- ret
Add Comment
Please, Sign In to add comment