MrSnowy

Watch code

Nov 28th, 2017
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.                     ;       +-V-+
  2.                     ; vcc    1|   |14 gnd
  3.                     ; xtal   2|   |13 led
  4.                     ; xtal   3|   |12
  5.                     ; rst    4|   |11 prgm
  6.                     ;outTime 5|   |10
  7.                     ;        6|   | 9  sck
  8.                     ; mosi   7|   | 8 miso
  9.                     ;         +---+
  10.  
  11.     .include "../include/tn24Adef.inc"
  12.     .org 0x0000
  13.     rjmp start
  14.     .org 0x0001
  15.     rjmp INT0but
  16.     .org 0x0009
  17.     rjmp TIM0_COMPA
  18.  
  19. INT0but:
  20.     out GIMSK,r8        ;disable outtime interrupt
  21.     sei
  22.     rcall outTime
  23.     reti
  24.  
  25. TIM0_COMPA:
  26.     inc r19
  27.     cpi r19,10
  28.     brne sec1
  29.     inc r20
  30.     ldi r19,0
  31. sec1:
  32.     cpi r20,6
  33.     brne sec2
  34.     inc r21
  35.     ldi r20,0
  36. sec2:
  37.     cpi r21,10
  38.     brne min1
  39.     inc r22
  40.     ldi r21,0
  41. min1:
  42.     cpi r22,6
  43.     brne min2
  44.     inc r23
  45.     ldi r22,0
  46. min2:
  47.     cpi r23,10
  48.     brne hrs1
  49.     inc r24
  50.     ldi r23,0
  51. hrs1:
  52.     cpi r24,2
  53.     brne hrs2
  54.     cpi r23,4
  55.     brne hrs2
  56.     ldi r24,0
  57.     ldi r23,0
  58. hrs2:
  59.     reti
  60.  
  61.  
  62. start:
  63.     ldi r16, low(RAMEND)
  64.     out SPL,r16     ;set low stack end value
  65.     ldi r16,0b11111011
  66.     out ddrb,r16        ;set ddrb to outputs
  67.     out ddra,r16        ;set ddra to outputs, buttons inputs
  68.     ldi r16,0b10000000
  69.     out ACSR,r16
  70.     ldi r16,0b11111011
  71.     out PRR,r16     ;disables all ecxept timer 0
  72.     ldi r16,0b00000010
  73.     out TIMSK0,r16      ;enable overflow interrupt
  74.     ldi r16,0b00000101
  75.     out TCCR0B,r16      ;set prescaler
  76.     ldi r16,0b00000010
  77.     out TCCR0A,r16
  78.     ldi r16,0b00011111
  79.     out OCR0A,r16
  80.     ldi r16,0
  81.     out TCNT0,r16       ;init timer at 0
  82.     ldi r16,0b00100011
  83.     out MCUCR,r16
  84.     ldi r16,0b01000000  ;use to set GIMSK pin0 to 1
  85.     cp r9,r16
  86.     clr r8          ;use as 0 for setting GIMSK
  87.     clr r10
  88.     clr r11
  89.     clr r12
  90.     clr r13
  91.     clr r18
  92.     clr r19
  93.     clr r20
  94.     clr r21
  95.     clr r22
  96.     clr r23
  97.     clr r24         ;initializing all used registers to 0
  98.     sei
  99.  
  100. main:
  101.     out GIMSK,r9        ;enable outtime interrupt
  102.     sleep
  103.     sbis pina,2
  104.     rjmp main           ;goto prgm if pressed
  105.     out GIMSK,r8        ;disable outtime interrupt
  106.     sbi porta,0
  107.     cbi porta,0     ;blink quickly to show programming mode
  108. prgm:
  109.     sbis pina,2
  110.     rjmp main           ;goto main if button is released
  111.     sbic pinb,2
  112.     rjmp settime        ;goto settime if pressed, starting input process
  113.     rjmp prgm
  114.  
  115.  
  116. settime:
  117.     clr r18
  118.     clr r10
  119.     clr r11
  120.     clr r12
  121.     clr r13
  122.     rjmp bit
  123. topbit:
  124.     clr r17
  125.     sbis pina,2     ;leave if button is released
  126.     rjmp reset
  127.     cpi r18,20
  128.     brge save
  129.     sbis pinb,2
  130.     rjmp topbit
  131. bit:
  132.     sbis pina,2     ;leave if button is released
  133.     rjmp reset
  134.     sbis pinb,2     ;go to setDit if released before r17 > 255 cycles
  135.     rjmp setDit
  136.     ldi r16,240
  137.     inc r16
  138.     brne pc-1           ;adds some delay
  139.     inc r17
  140.     cpi r17,255     ;n
  141.     brge bit            ;compare r17 to 255 cycles, stay in loop if LT (could be dit), leave if GT (dah)
  142. setDah:
  143.     sbic pinb,2
  144.     rjmp pc-1
  145.     sbi porta,0     ;temp
  146.     ldi r16,200
  147.     inc r16
  148.     brne pc-1
  149.     cbi porta,0     ;temp
  150.     set             ;set carry
  151.     rjmp assnToReg
  152.  
  153.  
  154.  
  155. setDit:
  156.     sbi porta,0     ;temp
  157.     cbi porta,0     ;temp
  158.     clt             ;clear carry
  159.  
  160. assnToReg:
  161.     inc r18         ;set to 1 when first ran
  162.  
  163.  
  164.     cpi r18,6
  165.     brsh pc+4           ;1, 2, 3, 4, 5
  166.     lsl r10
  167.     bld r10,0
  168.     rjmp topbit
  169.     cpi r18,11
  170.     brsh pc+4           ;6, 7, 8, 9, 10
  171.     lsl r11
  172.     bld r11,0
  173.     rjmp topbit
  174.     cpi r18,16
  175.     brsh pc+4           ;11,12,13,14,15
  176.     lsl r12
  177.     bld r12,0
  178.     rjmp topbit
  179.     cpi r18,21      ;16,17,18,19,20
  180.     brsh pc+4
  181.     lsl r13
  182.     bld r13,0
  183.     rjmp topbit
  184. save:
  185.     cbi porta,0
  186.     sbi porta,0
  187.     sbic pina,2
  188.     rjmp pc-1
  189.     cbi porta,0
  190.     rjmp MorseToDec     ;will run if it overflow
  191.  
  192. reset:
  193.     clr r10
  194.     clr r11
  195.     clr r12
  196.     clr r13
  197.     clr r18
  198.     rjmp main
  199.  
  200. MorseToDec:
  201.     mov r16,r10
  202.     rcall set
  203.     mov r24,r16
  204.     mov r16,r11
  205.     rcall set
  206.     mov r23,r16
  207.     mov r16,r12
  208.     rcall set
  209.     mov r22,r16
  210.     mov r16,r13
  211.     rcall set
  212.     mov r21,r16
  213.     ldi r20,0
  214.     ldi r19,0
  215.     rjmp main
  216.  
  217. set:                    ;use reg 10 11 12 13
  218.     cpi r16,0b00011111
  219.     brne pc+3
  220.     ldi r16,0b00000000
  221.     ret
  222.     cpi r16,0b00001111
  223.     brne pc+3
  224.     ldi r16,0b00000001
  225.     ret
  226.     cpi r16,0b00000111
  227.     brne pc+3
  228.     ldi r16,0b00000010
  229.     ret
  230.     cpi r16,0b00000011
  231.     brne pc+3
  232.     ldi r16,0b00000011
  233.     ret
  234.     cpi r16,0b00000001
  235.     brne pc+3
  236.     ldi r16,0b00000100
  237.     ret
  238.     cpi r16,0b00000000
  239.     brne pc+3
  240.     ldi r16,0b00000101
  241.     ret
  242.     cpi r16,0b00010000
  243.     brne pc+3
  244.     ldi r16,0b00000110
  245.     ret
  246.     cpi r16,0b00011000
  247.     brne pc+3
  248.     ldi r16,0b00000111
  249.     ret
  250.     cpi r16,0b00011100
  251.     brne pc+3
  252.     ldi r16,0b00001000
  253.     ret
  254.     cpi r16,0b00011110
  255.     brne pc+3
  256.     ldi r16,0b00001001
  257.     ret
  258.     ldi r16,0b00000000
  259.     ret
  260.  
  261.  
  262.  
  263.  
  264.  
  265. outTime:
  266.     mov r25,r24
  267.     rcall outNum
  268.     mov r25,r23
  269.     rcall outNum
  270.     mov r25,r22
  271.     rcall outNum
  272.     mov r25,r21
  273.     rcall outNum
  274.     rjmp main
  275. outNum:
  276.     cpi r25,0
  277.     brne pc+2
  278.     rcall zero
  279.     cpi r25,1
  280.     brne pc+2
  281.     rcall one
  282.     cpi r25,2
  283.     brne pc+2
  284.     rcall two
  285.     cpi r25,3
  286.     brne pc+2
  287.     rcall three
  288.     cpi r25,4
  289.     brne pc+2
  290.     rcall four
  291.     cpi r25,5
  292.     brne pc+2
  293.     rcall five
  294.     cpi r25,6
  295.     brne pc+2
  296.     rcall six
  297.     cpi r25,7
  298.     brne pc+2
  299.     rcall seven
  300.     cpi r25,8
  301.     brne pc+2
  302.     rcall eight
  303.     cpi r25,9
  304.     brne pc+2
  305.     rcall nine
  306.     ret
  307.  
  308. zero:
  309.     rcall dah
  310.     rcall dah
  311.     rcall dah
  312.     rcall dah
  313.     rcall dah
  314.     rcall space
  315.     ret
  316. one:
  317.     rcall dit
  318.     rcall dah
  319.     rcall dah
  320.     rcall dah
  321.     rcall dah
  322.     rcall space
  323.     ret
  324. two:
  325.     rcall dit
  326.     rcall dit
  327.     rcall dah
  328.     rcall dah
  329.     rcall dah
  330.     rcall space
  331.     ret
  332. three:
  333.     rcall dit
  334.     rcall dit
  335.     rcall dit
  336.     rcall dah
  337.     rcall dah
  338.     rcall space
  339.     ret
  340. four:
  341.     rcall dit
  342.     rcall dit
  343.     rcall dit
  344.     rcall dit
  345.     rcall dah
  346.     rcall space
  347.     ret
  348. five:
  349.     rcall dit
  350.     rcall dit
  351.     rcall dit
  352.     rcall dit
  353.     rcall dit
  354.     rcall space
  355.     ret
  356. six:
  357.     rcall dah
  358.     rcall dit
  359.     rcall dit
  360.     rcall dit
  361.     rcall dit
  362.     rcall space
  363.     ret
  364. seven:
  365.     rcall dah
  366.     rcall dah
  367.     rcall dit
  368.     rcall dit
  369.     rcall dit
  370.     rcall space
  371.     ret
  372. eight:
  373.     rcall dah
  374.     rcall dah
  375.     rcall dah
  376.     rcall dit
  377.     rcall dit
  378.     rcall space
  379.     ret
  380. nine:
  381.     rcall dah
  382.     rcall dah
  383.     rcall dah
  384.     rcall dah
  385.     rcall dit
  386.     rcall space
  387.     ret
  388. dit:
  389.     sbi porta,0
  390.     rcall delay
  391.     cbi porta,0
  392.     rcall delay
  393.     ret
  394. dah:
  395.     sbi porta,0
  396.     rcall delay
  397.     rcall delay
  398.     rcall delay
  399.     cbi porta,0
  400.     rcall delay
  401.     ret
  402. space:
  403.     rcall delay
  404.     rcall delay
  405.     rcall delay
  406.     rcall delay
  407.     ret
  408.  
  409. delay:
  410.     ldi r16,1
  411.     inc r16
  412.     brne pc-1
  413.     ldi r16,1
  414.     inc r16
  415.     brne pc-1
  416.     ldi r16,1
  417.     inc r16
  418.     brne pc-1
  419.     ldi r16,1
  420.     inc r16
  421.     brne pc-1
  422.     ret
Add Comment
Please, Sign In to add comment