Advertisement
Guest User

Untitled

a guest
Sep 27th, 2013
624
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ; Project Name  : Soldering Iron Controller                                        ;
  3. ; Applications  : Soldering, Rework, Etc.                                          ;
  4. ; Target Handle : HAKKO H-907ESD                                                   ;
  5. ; Programer     : Min-ju, Lee                                                      ;
  6. ; web mail      : [email protected]                                              ;
  7. ; web page      : www.itstyle.kr                                                   ;
  8. ; s/w ver       : v 3.0.1 (2011/11/21)                                             ;
  9. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  10. ; Ŕý´ë ÁÖŔÇ! : ÁÖŔÇÇĎÁö ľĘŔ¸¸é MCU¶Ç´Â ł»żÜşÎ ȸ·Î ĽŐ»óŔ§ÇčŔĚ ŔÖŔ˝!! ˝şÇÇÄżżˇ ŔúÁÖĆÄ °ř±ŢµÇ¸é şŇ·®łŻ °ˇ´ÉĽş ŔÖŔ¸´Ď ÁÖŔÇÇĎĽĽżä!!
  11. ; ĽŇ˝ş ´Ůżî·Îµĺ Ŕü Ç»ÁîşńĆ® ¸ŐŔú ĽĽĆĂÇҰÍ!! -> ł»şÎ 8MHz RC żŔ˝Ç·ąŔĚĹÍ
  12. ; ŸŔ̸ÓÄ«żîĹÍ, µđ˝şÇĂ·ąŔĚÂĘ ŔÎĹÍ·´Ć® ĽöÁ¤ ±ÝÁö!!
  13.  
  14. .include    "m8def.inc"
  15.  
  16. .macro  ldiw
  17.     ldi @0L,low(@1)
  18.     ldi @0H,high(@1)
  19. .endm
  20. .macro  pusw
  21.     push    @0L
  22.     push    @0H
  23. .endm
  24. .macro  popw
  25.     pop @0H
  26.     pop @0L
  27. .endm
  28. .macro  outi
  29.     ldi tmp,@1
  30.     out @0,tmp
  31. .endm
  32.  
  33. .def    digit_1 = r2
  34. .def    digit_2 = r3
  35. .def    digit_3 = r4
  36. .def    zero    = r5
  37. .def    setting_temp    = r6
  38. .def    key_flag    = r7
  39. .def    temp_comp_flag  = r8
  40. .def    speaker_freq_div    = r9
  41. .def    adc_result_low  = r10
  42. .def    adc_result_high = r11
  43. .def    adc_buff_low    = r12
  44. .def    adc_buff_high   = r13
  45. .def    adc_buff_byte3  = r14
  46. .def    adc_count   = r15
  47.  
  48.  
  49. .def    tmp = r16
  50. .def    tmp2    = r17
  51. .def    tmp3    = r18
  52. .def    tmp4    = r19
  53. .def    key_count   = r23
  54.  
  55. ;;;;;;;;;; key port
  56. .equ    key_inc = 0b01100000
  57. .equ    key_dec = 0b10100000
  58. .equ    key_mode    = 0b11000000
  59. .equ    key_no  = 0b11100000
  60.  
  61. .equ    key_shop    = 0b10110000
  62. .equ    key_star    = 0b00000000
  63.  
  64. ;;;;;;;;;; fnd pattern
  65. .equ    num_0   = 0b11000000
  66. .equ    num_1   = 0b11111001
  67. .equ    num_2   = 0b10100100
  68. .equ    num_3   = 0b10110000
  69. .equ    num_4   = 0b10011001
  70. .equ    num_5   = 0b10010010
  71. .equ    num_6   = 0b10000010
  72. .equ    num_7   = 0b11011000
  73. .equ    num_8   = 0b10000000
  74. .equ    num_9   = 0b10010000
  75. .equ    num_dot = 0b01111111
  76. .equ    num_minus   = 0b10111111
  77. .equ    num_clear   = 0b11111111
  78. .equ    alpha_d = 0b10100001
  79. .equ    alpha_l = 0b11000111
  80. .equ    alpha_o = 0b10100011
  81. .equ    alpha_t = 0b10000111
  82. .equ    alpha_f = 0b10001110
  83. .equ    alpha_s = 0b10010010
  84. .equ    alpha_p = 0b10001100
  85. .equ    alpha_e = 0b10000110
  86. .equ    alpha_u = 0b11100011
  87. .equ    alpha_h = 0b10001001
  88. .equ    alpha_i = 0b11111011
  89. .equ    alpha_dual_l = 0b11001001
  90.  
  91. .eseg
  92. using_temp:     .byte   1   ; last setting temperature
  93. sleep_timer:    .byte   1   ; sleep mode timer minutes(0 = not use, 1 = 10min, 2 = 20mins)
  94. preset1_temp:   .byte   1   ; preset temp
  95. preset2_temp:   .byte   1
  96. preset3_temp:   .byte   1
  97. .equ    eep_start_addr  = using_temp
  98.  
  99. .dseg
  100. set_temp_buffer:    .byte   2   ; setting mode use only
  101. timer_buffer:   .byte   1
  102. timer_count:    .byte   4
  103. request_beep_on:    .byte   1
  104. beep_highfreg_enahle:   .byte   1 ; 1 == en, 0== disable
  105.  
  106. .cseg
  107.     .org    0x0000
  108.     rjmp reset ; Reset Handler
  109.     reti ; IRQ0 Handler
  110.     reti ; IRQ1 Handler
  111.     reti ; Timer2 Compare Handler
  112.     reti ; Timer2 Overflow Handler
  113.     reti ; Timer1 Capture Handler
  114.     reti ; Timer1 CompareA Handler
  115.     reti ; Timer1 CompareB Handler
  116.     reti ; Timer1 Overflow Handler
  117.     rjmp    display ; Timer0 Overflow Handler
  118.     reti ; SPI Transfer Complete Handler
  119.     reti ; USART RX Complete Handler
  120.     reti ; UDR Empty Handler
  121.     reti ; USART TX Complete Handler
  122.     rjmp    check_temp ; ADC Conversion Complete Handler
  123.     reti ; EEPROM Ready Handler
  124.     reti ; Analog Comparator Handler
  125.     reti ; Two-wire Serial Interface Handler
  126.     reti ; Store Program Memory Ready Handler
  127.  
  128.  
  129. display:
  130.     push    tmp
  131.     in  tmp,SREG
  132.     push    tmp
  133.  
  134.     outi    PORTD,0xff  ; fnd off
  135.  
  136.     in  tmp,PORTC   ; select fnd digit
  137.     lsr tmp
  138.     andi    tmp,0x38
  139.     brne    PC+2
  140.     ldi tmp,0x20
  141.     out PORTC,tmp
  142.  
  143.     sbic    PORTC,5 ; fnd font out
  144.     out PORTD,digit_1
  145.     sbic    PORTC,4
  146.     out PORTD,digit_2
  147.     sbic    PORTC,3
  148.     out PORTD,digit_3
  149.  
  150.     lds tmp,beep_highfreg_enahle
  151.     cpi tmp,1
  152.     breq    PC+4
  153.     inc speaker_freq_div
  154.     sbrs    speaker_freq_div,0
  155.     rjmp    PC+8
  156.     sbis    DDRB,PB0    ; if DDRB0 == 1, speaker on
  157.     rjmp    PC+5    ; else if DDRB0 != 1, speaker off
  158.     sbis    PORTB,PB0   ; output toggle(1kHz output)
  159.     rjmp    PC+3
  160.     cbi PORTB,PB0
  161.     rjmp    PC+2
  162.     sbi PORTB,PB0
  163.  
  164.     lds tmp,timer_buffer    ; sleep timer
  165.     cpi tmp,0
  166.     breq    PC+29
  167.         lds tmp,timer_count+0
  168.         subi    tmp,1
  169.         sts timer_count+0,tmp
  170.         lds tmp,timer_count+1
  171.         sbci    tmp,0
  172.         sts timer_count+1,tmp
  173.         lds tmp,timer_count+2
  174.         sbci    tmp,0
  175.         sts timer_count+2,tmp
  176.         lds tmp,timer_count+3
  177.         sbci    tmp,0
  178.         sts timer_count+3,tmp
  179.         brne    PC+8
  180.         ldiw    z,RAMEND
  181.         out SPH,zH
  182.         out SPL,zL
  183.         sei
  184.         rcall   beep_long
  185.         rjmp    cooling_entry
  186.  
  187.     pop tmp
  188.     out SREG,tmp
  189.     pop tmp
  190.     reti
  191.  
  192.  
  193. ; ADC interrupt
  194. .equ    offset_value    = 269
  195. .equ    center_value    = 300+offset_value
  196. check_temp:
  197.     push    tmp
  198.     in  tmp,SREG
  199.     push    tmp
  200.     push    tmp2
  201. ;   push    tmp3
  202. ;   push    tmp4
  203.     push    r0
  204.     push    r1
  205.  
  206.     in  tmp,ADCL
  207.     in  tmp2,ADCH
  208.     add adc_buff_low,tmp
  209.     adc adc_buff_high,tmp2
  210.     adc adc_buff_byte3,zero
  211.     dec adc_count
  212.     brne    PC+15   ; ľĆ·ˇŔÇ ŔĚŔŻ·Î.... ;   PC+40   ; skip store result
  213.     ldi tmp,8
  214.     lsr adc_buff_byte3
  215.     ror adc_buff_high
  216.     ror adc_buff_low
  217.     dec tmp
  218.     brne    PC-4
  219. ;   movw    tmp2:tmp,adc_buff_high:adc_buff_low     ; 2011/11/19 µđąŮŔĚ˝ş¸¶Ć®żř°íżëżˇĽ­´Â şńĽ±Çü ż¬»ę˝Ä Ŕűżë ľČÇÔ.
  220. ;           cpi tmp2,high(center_value)
  221. ;           breq    PC+3
  222. ;           brcs    PC+14
  223. ;           rjmp    PC+4
  224. ;           cpi tmp,low(center_value)
  225. ;           breq    PC+19
  226. ;           brcs    PC+10
  227. ;               subi    tmp,low(center_value)   ; over 300'c
  228. ;               sbci    tmp2,high(center_value)
  229. ;               lsr tmp2
  230. ;               ror tmp
  231. ;               lsr tmp2
  232. ;               ror tmp
  233. ;               add adc_buff_low,tmp
  234. ;               adc adc_buff_high,tmp2
  235. ;           rjmp    PC+9
  236. ;               ldi tmp,low(center_value)   ; under 300'c
  237. ;               ldi tmp2,high(center_value)
  238. ;               sub tmp,adc_buff_low
  239. ;               sbc tmp2,adc_buff_high
  240. ;               lsr tmp2
  241. ;               ror tmp
  242. ;               sub adc_buff_low,tmp
  243. ;               sbc adc_buff_high,tmp2
  244.             movw    adc_result_high:adc_result_low,adc_buff_high:adc_buff_low
  245.             ldi tmp,low(offset_value)
  246.             ldi tmp2,high(offset_value)
  247.             sub adc_result_low,tmp
  248.             sbc adc_result_high,tmp2
  249.         clr adc_buff_byte3
  250.         clr adc_buff_high
  251.         clr adc_buff_low
  252.  
  253.     ldi tmp,10
  254.     mul setting_temp,tmp
  255. ;   ldi tmp,10  ;;;;; allow temp. error range +-
  256.     sub r0,adc_result_low
  257.     sbc r1,adc_result_high
  258.     breq    PC+19
  259.     brpl    PC+6
  260.         com r0  ; if minus, 2'c complement value
  261.         com r1
  262.         inc r0
  263.         brne    PC+2
  264.         inc r1
  265.     tst r1
  266.     brne    PC+3
  267.     cp  r0,tmp  ; out range temp
  268.     brcs    PC+4
  269.     clr temp_comp_flag  ; real temp display
  270.     inc temp_comp_flag
  271. ;   sts request_beep_on,temp_comp_flag  ; spk pff
  272.     rjmp    PC+6
  273.     in  tmp,sorder_pwm_value
  274.     cpi tmp,200
  275.     brcs    PC+3
  276.     outi    sorder_pwm_value,20 ; low duty heating
  277.  
  278.     ldi tmp,10
  279.     mul setting_temp,tmp
  280.     ldi tmp,0x1f
  281.     and tmp,adc_count
  282.     brne    PC+25
  283.         in  tmp,sorder_pwm_value    ; read pwm
  284.             cp  adc_result_low,r0   ; 1st compare
  285.             cpc adc_result_high,r1
  286.             breq    PC+7
  287.             inc r0
  288.             brne    PC+2
  289.             inc r1
  290.             cp  adc_result_low,r0   ; 2times comapare   ; µđąŮŔĚ˝ş¸¶Ć® żř°íżë ÇĘżäx : ż¬»ę˝Ä ŔűżëÇŇ °ćżě ŔϺΠǥ˝Ă ľČµÇ´Â żÂµµ¶§ą®żˇ ŔĚ°Ô ÇĘżäÇߴµĄ ÇöŔç´Â ÇĘżäx
  291.             cpc adc_result_high,r1
  292.             brne    PC+6
  293.         tst temp_comp_flag
  294.         breq    PC+3
  295.         sts request_beep_on,zero    ; spk req
  296.         clr temp_comp_flag
  297.         brcs    PC+5    ;;;;;
  298.         cpi tmp,0
  299.         breq    PC+6
  300.         dec tmp
  301.         rjmp    PC+4
  302.         cpi tmp,255
  303.         breq    PC+2
  304.         inc tmp
  305.         out sorder_pwm_value,tmp    ; write pwm
  306.  
  307.     pop r1
  308.     pop r0
  309. ;   pop tmp4
  310. ;   pop tmp3
  311.     pop tmp2
  312.     pop tmp
  313.     out SREG,tmp
  314.     pop tmp
  315.     reti
  316.  
  317.  
  318. reset:
  319.     ldi tmp,low(RAMEND)
  320.     ldi tmp2,high(RAMEND)
  321.     out SPH,tmp2
  322.     out SPL,tmp
  323.  
  324.     clr zero    ; global zero ram
  325.     clr temp_comp_flag  ; temp_comp_flag = 1 is not match temperature
  326.     inc temp_comp_flag
  327.  
  328.     rcall   wait_5ms
  329.  
  330.     outi    DDRB,0x02   ; switch port & piezo input
  331.     outi    PORTB,0
  332.  
  333.     outi    DDRC,0x38   ; fnd digit select
  334.     outi    PORTC,0x20  ; all drive off
  335.  
  336.     outi    DDRD,0xff   ; fnd pattern output
  337.     outi    PORTD,alpha_e   ; all leds off
  338.  
  339. ;;;;; eeprom check
  340.     ldi tmp2,eep_start_addr ; read last set temperature
  341.     mov tmp,tmp2
  342.     rcall   eep_read
  343.     cpi tmp,0x32
  344.     brcc    eep_init
  345.     inc tmp2
  346.     cpi tmp2,eep_start_addr+5   ; check end address
  347.     brne    PC-6
  348.     rjmp    eep_pass
  349.  
  350. eep_init:
  351.     ldi tmp4,alpha_u    ; all leds off
  352.     ldiw    z,eep_init_val*2
  353.     ldi tmp2,eep_start_addr
  354.     lpm tmp,z+
  355.     rcall   eep_write
  356.     inc tmp2
  357.     cpi tmp2,eep_start_addr+5
  358.     brne    PC-4
  359.     rjmp    eep_pass
  360.  
  361.  
  362. eep_init_val:
  363.     .db 0x14,0x00,0x14,0x1e,0x28,0
  364.  
  365. eep_pass:
  366.  
  367.     outi    TCCR0,0x02  ; prescaler
  368.     outi    TIMSK,(1<<TOIE0)    ; timer 0 overflow inturrupt enable
  369.  
  370.     outi    TCCR1A,(1<<COM1A1)|(0<<COM1A0)|(0<<COM1B1)|(0<<COM1B0)|(1<<WGM10)
  371.     outi    TCCR1B,(1<<CS12)|(1<<CS11)|(0<<CS10)
  372.     .equ    sorder_pwm_value    = OCR1AL
  373.     outi    sorder_pwm_value,0  ; heater off
  374.  
  375.     outi    ADMUX,(0<<REFS1)|(1<<REFS0) ; ADC0 input, using AREF, ADLAR is 0
  376.     outi    ADCSRA,(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|(1<<ADIE)|0x07 ; 128 division factor, Int on, free run, ADC on
  377.  
  378.     ldi tmp,using_temp  ; read last set temperature
  379.     rcall   eep_read
  380.     mov setting_temp,tmp
  381.     rcall   sleep_timer_load
  382.  
  383.     clr digit_1 ; led test
  384.     clr digit_2
  385.     clr digit_3
  386.     sei
  387.     rcall   wait_1sec
  388.  
  389.     dec digit_1 ; all off
  390.     dec digit_2
  391.     dec digit_3
  392.     rcall   wait_250ms
  393.  
  394.     rcall   beep_short
  395.  
  396. main_loop_entry:
  397.     ldi tmp,using_temp  ; read last set temperature
  398.     rcall   eep_read
  399.     mov setting_temp,tmp
  400.     rcall   sleep_timer_load
  401. main_loop:
  402.     movw    tmp2:tmp,adc_result_high:adc_result_low
  403.     ldi tmp3,high(495)
  404.     cpi tmp,low(495)
  405.     cpc tmp2,tmp3
  406.     brcs    PC+21
  407.     brmi    PC+20
  408.         ldi tmp,1
  409.         sts beep_highfreg_enahle,tmp
  410.         sbi DDRB,PB0
  411.         ldi tmp,alpha_s
  412.         mov digit_1,tmp
  413.         ldi tmp,num_minus
  414.         mov digit_2,tmp
  415.         ldi tmp,alpha_e
  416.         mov digit_3,tmp
  417.         rcall   wait_250ms
  418.         rcall   clear_all
  419.         cbi DDRB,PB0
  420.         sts beep_highfreg_enahle,zero
  421.         rcall   wait_250ms
  422.         outi    sorder_pwm_value,0  ; heater off
  423.     rjmp    main_loop
  424.     tst adc_result_high
  425.     brpl    PC+10
  426.         ldi tmp,num_clear
  427.         mov digit_1,tmp
  428.         ldi tmp,alpha_l
  429.         mov digit_2,tmp
  430.         ldi tmp,alpha_o&~0x80
  431.         mov digit_3,tmp
  432.         outi    sorder_pwm_value,255    ; heater full on
  433.     rjmp    main_loop
  434.  
  435.     tst temp_comp_flag
  436.     breq    PC+20
  437.     ldi tmp3,low(10)
  438.     ldi tmp4,high(10)
  439.     rcall   div16u
  440.     push    r20
  441.     rcall   div16u
  442.     push    r20
  443.     rcall   div16u
  444.     mov tmp,r20
  445.     rcall   font_load
  446.     mov digit_1,tmp
  447.     pop tmp
  448.     rcall   font_load
  449.     mov digit_2,tmp
  450.     pop tmp
  451.     rcall   font_load
  452.     sbic    PINB,PB1
  453.     andi    tmp,~0x80
  454.     mov digit_3,tmp
  455.     rjmp    PC+13
  456.  
  457.     mov tmp,setting_temp
  458.     ldi tmp2,10
  459.     rcall   div08u
  460.     rcall   font_load
  461.     mov digit_1,tmp
  462.     mov tmp,tmp3
  463.     rcall   font_load
  464.     mov digit_2,tmp
  465.     ldi tmp,num_0
  466.     sbic    PINB,PB1
  467.     andi    tmp,~0x80
  468.     mov digit_3,tmp
  469.  
  470.     lds tmp,request_beep_on
  471.     tst tmp
  472.     brne    PC+2
  473.     rcall   beep_short
  474.     ldi tmp,1
  475.     sts request_beep_on,tmp
  476.  
  477.     rcall   key_check
  478.     cpi tmp,key_inc ; preset # 1
  479.     brne    PC+3
  480.         ldi tmp2,preset1_temp
  481.         rjmp    check_preset
  482.     cpi tmp,key_dec ; preset # 2
  483.     brne    PC+3
  484.         ldi tmp2,preset2_temp
  485.         rjmp    check_preset
  486.     cpi tmp,key_mode    ; preset # 3
  487.     brne    PC+3
  488.         ldi tmp2,preset3_temp
  489.         rjmp    check_preset
  490.     rjmp    main_loop
  491.  
  492.  
  493.  
  494. check_set_temp:
  495.     ldi tmp,alpha_s
  496.     mov digit_1,tmp
  497.     ldi tmp,alpha_e
  498.     mov digit_2,tmp
  499.     ldi tmp,alpha_t
  500.     mov digit_3,tmp
  501.     rcall   beep_short_2times
  502.  
  503.     ldi tmp3,250    ; press 1sec< to set to sleep timer
  504.     in  tmp,PINB
  505.     andi    tmp,key_no
  506.     cpi tmp,key_no
  507.     breq    set_temp_entry  ; press short go to set temp
  508.     rcall   wait_5ms
  509.     dec tmp3
  510.     brne    PC-6
  511.     rjmp    check_set_sleep
  512. set_temp_entry:
  513.     rcall   sleep_timer_load
  514.     mov tmp,setting_temp
  515.     ldi tmp2,10
  516.     rcall   div08u
  517.  
  518.     sts set_temp_buffer,tmp ; digit 1
  519.     sts set_temp_buffer+1,tmp3  ; digit 2
  520.  
  521.     rcall   beep_short
  522.  
  523.     clr xL
  524. set_temp_loop:
  525.     ldi r24,low(3000)
  526.     ldi r25,high(3000)
  527. set_temp_loop_count_resume:
  528.     sbiw    r25:r24,1
  529.     brne    PC+2
  530.     rjmp    main_loop_entry
  531.     inc xH  ; blink count
  532.     ldiw    y,set_temp_buffer
  533.  
  534.     cpi xL,0
  535.     brne    PC+10
  536.     ldd tmp,y+0
  537.     cpi tmp,5
  538.     brne    PC+3
  539.     ldi tmp,2
  540.     rjmp    PC+4
  541.     cpi tmp,1
  542.     brne    PC+2
  543.     ldi tmp,4
  544.     std y+0,tmp
  545.  
  546.     ldd tmp,y+0
  547.     rcall   font_load
  548.         cpi key_count,key_def_value
  549.         brne    PC+5
  550.         cpi xL,0
  551.         brne    PC+3
  552.         sbrs    xH,5    ; blink
  553.         ldi tmp,num_clear   ; clear
  554.     mov digit_1,tmp
  555.     ldd tmp,y+1
  556.     rcall   font_load
  557.         cpi key_count,key_def_value
  558.         brne    PC+5
  559.         cpi xL,1
  560.         brne    PC+3
  561.         sbrs    xH,5    ; blink
  562.         ldi tmp,num_clear   ; clear
  563.     mov digit_2,tmp
  564.     ldi tmp,num_0
  565.     mov digit_3,tmp
  566.  
  567.     add yL,xL
  568.     adc yH,zero
  569.  
  570.     rcall   key_check
  571.     cpi tmp,key_inc&key_dec
  572.     brne    PC+2
  573.     rjmp    turbo_mode_entry
  574.     cpi tmp,key_mode    ; enter
  575.     brne    PC+19;  PC+8
  576.  
  577.  
  578.         ldi tmp3,250    ; press 1sec< to set to sleep timer ; 2011/11/19 µđąŮŔĚ˝ş¸¶Ć® żř°íżë... ż©±âĽ± ĂëĽŇ¸¦ modeŰ ±ć°Ô ´©¸§ µĘ.
  579.         in  tmp,PINB
  580.         andi    tmp,key_no
  581.         cpi tmp,key_mode
  582.         brne    PC+7    ; press stop go to next position or sort...
  583.         rcall   wait_5ms
  584.         dec tmp3
  585.         brne    PC-6
  586.         rcall   beep_long
  587.         rcall   clear_all
  588.         rjmp    main_loop_entry
  589.  
  590.  
  591.         cpi xL,1    ; end pos
  592.         brne    PC+3
  593.         rcall   beep_short_2times
  594.         rjmp    set_temp_sort
  595.         inc xL
  596.         rcall   beep_short
  597.         rjmp    set_temp_loop
  598.     cpi tmp,key_inc
  599.     brne    PC+7
  600.         ld  tmp,y
  601.         inc tmp
  602.         cpi tmp,10
  603.         brcs    PC+2
  604.         clr tmp
  605.         st  y,tmp
  606.     cpi tmp,key_dec
  607.     brne    PC+7
  608.         ld  tmp,y
  609.         dec tmp
  610.         cpi tmp,10
  611.         brcs    PC+2
  612.         ldi tmp,9
  613.         st  y,tmp
  614. ;   cpi tmp,key_esc ; 2011/11/19 µđąŮŔĚ˝ş¸¶Ć® żř°íżë... ąöư Ľö şŻ°ćŔ¸·Î »čÁ¦.
  615. ;   brne    PC+8
  616. ;       cpi xL,0
  617. ;       brne    PC+3
  618. ;       rcall   beep_long
  619. ;       rjmp    main_loop_entry
  620. ;       clr xL
  621. ;       rcall   beep_short
  622. ;       rjmp    set_temp_loop
  623.     rjmp    set_temp_loop_count_resume
  624.  
  625. check_preset:
  626.     ; do not use 'tmp2' global register
  627.     ldi tmp3,250    ; press 1sec< to set to preset
  628.     in  tmp,PINB
  629.     andi    tmp,key_no
  630.     cpi tmp,key_no
  631.     breq    load_preset
  632.     rcall   wait_5ms
  633.     dec tmp3
  634.     brne    PC-6
  635. ;   rjmp    store_preset
  636.  
  637. store_preset:
  638.     push    tmp2    ; back up preset number
  639.  
  640.     subi    tmp2,preset1_temp-1
  641.     mov tmp,tmp2
  642.     rcall   font_load
  643.     mov digit_2,tmp
  644.     mov tmp2,tmp
  645.     ldi tmp,num_minus
  646.     mov digit_1,tmp
  647.     mov digit_3,digit_1
  648.  
  649.     rcall   beep_short_2times
  650.  
  651.     ; do not use 'tmp2' global register
  652.         ldi tmp3,250    ; press 1sec< to set temp(by press mode key) or go main loop(else all key)
  653.             in  tmp,PINB
  654.             andi    tmp,key_no
  655.             cpi tmp,key_no
  656.             breq    PC+11
  657.             rcall   wait_5ms
  658.             dec tmp3
  659.             brne    PC-6
  660.         pop tmp ; read dump preset value
  661.         cpi tmp2,num_3  ; press preset -3- ?
  662.         breq    PC+4
  663.         rcall   clear_all
  664.         rcall   beep_long
  665.         rjmp    main_loop_entry ; if not, cancel
  666.         rjmp    check_set_temp  ; if yes, go set temp
  667.  
  668.     mov tmp,setting_temp
  669.     pop tmp2
  670.     rcall   eep_write   ; temp info save to preset
  671.  
  672.     ldi tmp2,10
  673.     rcall   div08u
  674.     sts set_temp_buffer,tmp
  675.     sts set_temp_buffer+1,tmp3
  676.  
  677.     rcall   beep_dingdingdong
  678.     rcall   wait_1sec
  679.     rjmp    set_temp_sort
  680.  
  681. load_preset:
  682.     mov tmp,tmp2
  683.     rcall   eep_read
  684.  
  685.     ldi tmp2,10
  686.     rcall   div08u
  687.     sts set_temp_buffer,tmp
  688.     sts set_temp_buffer+1,tmp3
  689.  
  690.     rcall   beep_dingdingdong
  691. ;   rjmp    set_temp_sort
  692.  
  693. set_temp_sort:
  694.     ldi tmp2,2  ; blink to times
  695.  
  696.     rcall   clear_all
  697.     rcall   wait_250ms
  698.  
  699.     lds tmp,set_temp_buffer
  700.     rcall   font_load
  701.     mov digit_1,tmp
  702.     lds tmp,set_temp_buffer+1
  703.     rcall   font_load
  704.     mov digit_2,tmp
  705.     ldi tmp,num_0
  706.     mov digit_3,tmp
  707.     rcall   wait_250ms
  708.  
  709.     dec tmp2
  710.     brne    PC-14
  711.  
  712.         lds tmp,set_temp_buffer
  713.         ldi tmp2,10
  714.         mul tmp,tmp2
  715.         lds tmp,set_temp_buffer+1
  716.         add tmp,r0
  717.         mov setting_temp,tmp
  718.  
  719.         ldi tmp2,using_temp ; save last set temperature
  720.         rcall   eep_write
  721.  
  722.     clr temp_comp_flag
  723.     inc temp_comp_flag
  724.     rjmp    main_loop_entry
  725.  
  726. check_set_sleep:
  727.     rcall   beep_short_2times
  728.     ldi tmp3,250    ; total press 2sec< to go sleep
  729.     ldi tmp,alpha_s
  730.     mov digit_1,tmp
  731.     ldi tmp,alpha_l
  732.     mov digit_2,tmp
  733.     ldi tmp,alpha_p
  734.     mov digit_3,tmp
  735.  
  736.     in  tmp,PINB
  737.     andi    tmp,key_no
  738.     cpi tmp,key_no
  739.     breq    set_sleep_entry ; press short to set to sleep timer
  740.     rcall   wait_5ms
  741.     dec tmp3
  742.     brne    PC-6
  743.     rjmp    cooling_entry
  744.  
  745. set_sleep_entry:
  746.     rcall   beep_short
  747. set_sleep_loop:
  748.     ldi r24,low(3000)
  749.     ldi r25,high(3000)
  750. set_sleep_loop_resume:
  751.     sbiw    r25:r24,1
  752.     brne    PC+2
  753.     rjmp    main_loop_entry
  754.     inc xH
  755.     ldiw    y,timer_buffer
  756.  
  757.         cpi key_count,key_def_value
  758.         brne    PC+3
  759.             sbrs    xH,5    ; blink
  760.             rjmp    PC+3
  761.             rcall   set_sleep_display
  762.             rjmp    PC+5
  763.             clr digit_1
  764.             dec digit_1
  765.             mov digit_2,digit_1
  766.             mov digit_3,digit_2
  767.  
  768.     rcall   key_check
  769.     cpi tmp,key_mode    ; enter
  770.     brne    PC+14
  771.  
  772.  
  773.         ldi tmp3,250    ; press 1sec< to set to sleep timer ; 2011/11/19 µđąŮŔĚ˝ş¸¶Ć® żř°íżë... ż©±âĽ± ĂëĽŇ¸¦ modeŰ ±ć°Ô ´©¸§ µĘ.
  774.         in  tmp,PINB
  775.         andi    tmp,key_no
  776.         cpi tmp,key_mode
  777.         brne    PC+7    ; press stop go to next position or sort...
  778.         rcall   wait_5ms
  779.         dec tmp3
  780.         brne    PC-6
  781.         rcall   beep_long
  782.         rcall   beep_short
  783.         rjmp    main_loop_entry
  784.  
  785.  
  786.         rcall   beep_dingdingdong
  787.         rjmp    set_sleep_sort
  788.     cpi tmp,key_inc
  789.     brne    PC+8
  790.         ldd tmp,y+0
  791.         inc tmp
  792.         cpi tmp,10
  793.         brcs    PC+2
  794.         clr tmp
  795.         std y+0,tmp
  796.         rjmp    set_sleep_loop
  797.     cpi tmp,key_dec
  798.     brne    PC+8
  799.         ldd tmp,y+0
  800.         dec tmp
  801.         cpi tmp,10
  802.         brcs    PC+2
  803.         ldi tmp,9
  804.         std y+0,tmp
  805.         rjmp    set_sleep_loop
  806. ;   cpi tmp,key_esc ; 2011/11/19 µđąŮŔĚ˝ş¸¶Ć® żř°íżë... ąöư Ľö şŻ°ćŔ¸·Î »čÁ¦.
  807. ;   brne    PC+3
  808. ;       rcall   beep_long
  809. ;       rjmp    main_loop_entry
  810.     rjmp    set_sleep_loop_resume
  811.  
  812. set_sleep_sort:
  813.     ldi tmp2,2
  814.  
  815.     rcall   clear_all
  816.     rcall   wait_250ms
  817.     rcall   set_sleep_display
  818.     rcall   wait_250ms
  819.  
  820.     dec tmp2
  821.     brne    PC-5
  822.  
  823.     ldd tmp,y+0
  824.     ldi tmp2,sleep_timer    ; save last set temperature
  825.     rcall   eep_write
  826.  
  827.     rjmp    main_loop_entry
  828.  
  829. set_sleep_display_eep:
  830.     ldiw    y,timer_buffer
  831. set_sleep_display:
  832.     ldd tmp,y+0
  833.     cpi tmp,0
  834.     brne    PC+5
  835.     ldi tmp,alpha_d
  836.     mov digit_1,tmp
  837.     ldi tmp,alpha_s&num_dot
  838.     rjmp    PC+4
  839.    
  840.     rcall   font_load
  841.     mov digit_1,tmp
  842.     ldi tmp,num_0&num_dot
  843.     mov digit_2,tmp
  844.     ldi tmp,alpha_t
  845.     mov digit_3,tmp
  846.     ret
  847.  
  848.  
  849. turbo_mode_entry:
  850.     rcall   beep_short_2times
  851.  
  852.     ldi tmp3,250    ; press 1sec< to set to sleep timer
  853.     in  tmp,PINB
  854.     andi    tmp,key_no
  855.     cpi tmp,key_inc&key_dec
  856.     breq    PC+2
  857.     rjmp    set_temp_loop_count_resume  ; press short go to set temp continue
  858.     rcall   wait_5ms
  859.     dec tmp3
  860.     brne    PC-7
  861.  
  862.     rcall   beep_short_2times
  863.     outi    sorder_pwm_value,255    ; heater full on
  864.     ldiw    x,60000 ; 3minutes limit
  865. turbo_mode_loop:
  866.     cbi ADCSRA,ADIE
  867.  
  868.     sbiw    x,1
  869.     breq    turbo_mode_exit ; if continue 3minutes, go to cooling mode
  870.  
  871.         sbrs    xL,6    ; blink slow
  872.         rjmp    PC+8
  873.         ldi tmp,alpha_f
  874.         mov digit_1,tmp
  875.         ldi tmp,alpha_u
  876.         mov digit_2,tmp
  877.         ldi tmp,alpha_dual_l&~0x80
  878.         mov digit_3,tmp
  879.         rjmp    PC+6
  880.     ldi tmp,0xff
  881.     mov digit_1,tmp
  882.     mov digit_2,tmp
  883.     ldi tmp,~0x80
  884.     mov digit_3,tmp
  885.  
  886.     movw    y,x
  887.     andi    yL,0xff
  888.     brne    PC+4
  889.     andi    yH,0x03
  890.     brne    PC+2
  891.     rcall   beep_short
  892.  
  893.     rcall   key_check
  894.     cpi tmp,key_no
  895.     breq    turbo_mode_loop
  896. turbo_mode_exit:
  897.     sbi ADCSRA,ADIE
  898. ;   rjmp    cooling_entry
  899.  
  900.  
  901. cooling_entry:
  902.     ldi tmp,alpha_o
  903.     mov digit_1,tmp
  904.     ldi tmp,alpha_f
  905.     mov digit_2,tmp
  906.     mov digit_3,tmp
  907.  
  908.     rcall   beep_short
  909.  
  910.  
  911.         ldi tmp3,250    ; press 1sec< to cancle
  912.         in  tmp,PINB
  913.         andi    tmp,key_no
  914.         cpi tmp,key_no
  915.         breq    PC+7    ; press short go to cooling mode(sleep)
  916.         rcall   wait_5ms
  917.         dec tmp3
  918.         brne    PC-6
  919.         rcall   clear_all
  920.         rcall   beep_long
  921.         rjmp    main_loop_entry
  922.  
  923.  
  924.     rcall   key_check
  925.     cpi key_count,key_def_value
  926.     brne    PC-2
  927.     cpi tmp,key_no
  928.     brne    PC-4
  929.  
  930.     out sorder_pwm_value,zero   ; heater off
  931.     clr setting_temp
  932. cooling_loop:
  933.     ldiw    z,RAMEND
  934.     out SPH,zH
  935.     out SPL,zL
  936.  
  937.     movw    tmp2:tmp,adc_result_high:adc_result_low
  938.     ldi tmp3,high(545)
  939.     cpi tmp,low(545)
  940.     cpc tmp2,tmp3
  941.     brcc    PC+20
  942.         ldi tmp3,low(10)
  943.         ldi tmp4,high(10)
  944.         rcall   div16u
  945.         push    r20
  946.         rcall   div16u
  947.         push    r20
  948.         rcall   div16u
  949.         mov tmp,r20
  950.         rcall   font_load
  951.         mov digit_1,tmp
  952.         pop tmp
  953.         rcall   font_load
  954.         mov digit_2,tmp
  955.         pop tmp
  956.         rcall   font_load
  957.         sbic    PINB,PB1
  958.         andi    tmp,~0x80
  959.         mov digit_3,tmp
  960.     rjmp    PC+7
  961.         ldi tmp,0xff
  962.         mov digit_1,tmp
  963.         ldi tmp,alpha_h
  964.         mov digit_2,tmp
  965.         ldi tmp,alpha_i
  966.         mov digit_3,tmp
  967.  
  968.     tst adc_result_high
  969.     brmi    sleep_entry
  970.  
  971.     rcall   key_check
  972.     cpi tmp,key_no
  973.     breq    PC+2
  974.     rjmp    main_loop_entry
  975.  
  976.     ldiw    z,100
  977.     cp  adc_result_low,zL
  978.     cpc adc_result_high,zH
  979.     brcc    cooling_loop
  980.  
  981. sleep_entry:
  982.     ldi tmp,alpha_o ; display 'off'
  983.     mov digit_1,tmp
  984.     ldi tmp,alpha_f
  985.     mov digit_2,tmp
  986.     mov digit_3,tmp
  987.     rcall   beep_long
  988. ;   ldiw    x,sleep_loop_image*2
  989.    
  990. ;   out sorder_pwm_value,zero   ; heater off
  991. ;   clr setting_temp
  992. /*
  993. sleep_loop:
  994.     ldi tmp,high((sleep_loop_image*2)+18)
  995.     cpi xL,low((sleep_loop_image*2)+18)
  996.     cpc xH,tmp
  997.     brcs    PC+3
  998.     ldiw    x,sleep_loop_image*2
  999.  
  1000.     sbrs    tmp4,0
  1001.     rjmp    PC+3
  1002.     adiw    y,1
  1003.     rjmp    PC+2
  1004.     sbiw    y,1
  1005.     brne    PC+4
  1006.     sbrc    tmp4,0
  1007.     adiw    x,3
  1008.     inc tmp4
  1009.  
  1010.     movw    z,x
  1011.  
  1012.     cp  yL,yH
  1013.     brcs    PC+2
  1014.     adiw    z,3
  1015.     lpm digit_1,z+
  1016.     lpm digit_2,z+
  1017.     lpm digit_3,z+
  1018.  
  1019.     ldi tmp,8
  1020.     rcall   wait_us
  1021.  
  1022.     in  tmp,PINB
  1023.     andi    tmp,key_no
  1024.     cpi tmp,key_no
  1025.     breq    sleep_loop
  1026.     ldi tmp3,250    ; press 1sec< to set to sleep timer
  1027.     rcall   wait_5ms
  1028.     in  tmp,PINB
  1029.     andi    tmp,key_no
  1030.     cpi tmp,key_no
  1031.     breq    sleep_loop
  1032.     dec tmp3
  1033.     brne    PC-6
  1034.     rjmp    reset
  1035.  
  1036. sleep_loop_image:
  1037.     .db num_minus,num_minus,num_minus,0xff,num_minus,num_minus,num_minus,0xff,num_minus,num_minus,num_minus,0xff
  1038.     .db num_minus,num_minus,num_minus,alpha_o,alpha_f,alpha_f,num_minus,num_minus,num_minus,0
  1039.  
  1040. */
  1041.  
  1042. sleep_loop:
  1043. ;   ldiw    x,750
  1044. sleep_loop_key:
  1045.     out sorder_pwm_value,zero   ; heater off
  1046.     sts timer_buffer,zero
  1047.     clr setting_temp
  1048.  
  1049.     sbrs    tmp4,0
  1050.     rjmp    PC+3
  1051.     adiw    y,1
  1052.     rjmp    PC+2
  1053.     sbiw    y,1
  1054.     brne    PC+2
  1055.     inc tmp4
  1056.  
  1057.     in  tmp,PINB
  1058.     com tmp
  1059.     bst tmp,PB1
  1060.  
  1061.     cp  yL,yH
  1062.     brcs    PC+3
  1063.     ldi tmp,num_minus
  1064.     rjmp    PC+2
  1065.     ldi tmp,0xff
  1066.     mov digit_1,tmp
  1067.     mov digit_2,tmp
  1068.     mov digit_3,tmp
  1069.     bld digit_3,7
  1070.  
  1071.     ldi tmp,8
  1072. ;   sts timer_count+3,tmp   ; no means number...
  1073.     rcall   wait_us
  1074.  
  1075.     ; 2011/10/09 - Heating protect
  1076.         movw    tmp2:tmp,adc_result_high:adc_result_low
  1077.         tst adc_result_high
  1078.         brmi    PC+6
  1079.             ldi tmp3,high(102)
  1080.             cpi tmp,low(102)
  1081.             cpc tmp2,tmp3
  1082.             brcs    PC+2
  1083.             rjmp    cooling_entry
  1084.  
  1085.     in  tmp,PINB
  1086.     andi    tmp,key_no
  1087.     cpi tmp,key_no
  1088.     breq    sleep_loop
  1089.     rcall   beep_short
  1090.     ldi tmp3,250    ; press 1sec< to set to sleep timer
  1091.     rcall   wait_5ms
  1092.     in  tmp,PINB
  1093.     andi    tmp,key_no
  1094.     cpi tmp,key_no
  1095.     breq    sleep_loop
  1096.     dec tmp3
  1097.     brne    PC-6
  1098.     rjmp    reset
  1099.  
  1100.    
  1101. sleep_timer_load:
  1102.     in  tmp,SREG
  1103.     push    tmp
  1104.     cli
  1105.     ldi tmp,sleep_timer ; read last set temperature
  1106.     rcall   eep_read
  1107.     sts timer_buffer,tmp
  1108.     cpi tmp,0
  1109.     breq    PC+25
  1110.  
  1111.     push    r23
  1112.     mov r23,tmp
  1113.     clr tmp
  1114.     clr tmp2
  1115.     clr tmp3
  1116.     clr tmp4
  1117.     ldi r20,byte1(2343750)
  1118.     ldi r21,byte2(2343750)
  1119.     ldi r22,byte3(2343750)
  1120.     add tmp,r20
  1121.     adc tmp2,r21
  1122.     adc tmp3,r22
  1123.     adc tmp4,zero
  1124.     dec r23
  1125.     brne    PC-5
  1126.     sts timer_count+0,tmp
  1127.     sts timer_count+1,tmp2
  1128.     sts timer_count+2,tmp3
  1129.     sts timer_count+3,tmp4
  1130.     pop r23
  1131.     pop tmp
  1132.     out SREG,tmp
  1133.     ret
  1134.  
  1135.  
  1136.    
  1137.  
  1138. font_load:
  1139.     ldiw    z,font_db*2
  1140.     add zL,tmp
  1141.     adc zH,zero
  1142.     lpm tmp,z
  1143.     ret
  1144.  
  1145. font_db:
  1146.     .db num_0,num_1,num_2,num_3,num_4,num_5,num_6,num_7,num_8,num_9
  1147.  
  1148. beep_dingdingdong:
  1149.     rcall   beep_short_2times
  1150.     rjmp    PC+2
  1151. beep_dingdong:
  1152.     rcall   beep_short
  1153.     ldi tmp,1
  1154.     sts beep_highfreg_enahle,tmp
  1155.     rcall   beep_short
  1156.     sts beep_highfreg_enahle,zero
  1157.     ret
  1158.  
  1159. beep_short_2times:
  1160.     rcall   beep_short
  1161.     rcall   wait_5ms
  1162.     rcall   wait_5ms
  1163.     rcall   wait_5ms
  1164.     rcall   wait_5ms
  1165. beep_short:
  1166.     sbi DDRB,PB0
  1167.     ldi tmp4,10
  1168.     rjmp    PC+3
  1169. beep_long:
  1170.     sbi DDRB,PB0
  1171.     ldi tmp4,100
  1172.     rcall   wait_5ms
  1173.     dec tmp4
  1174.     brne    PC-2
  1175.     cbi DDRB,PB0
  1176.     ret
  1177.  
  1178. ; key check
  1179. ; key data output = tmp
  1180. .equ    key_def_value = 10
  1181. key_check:
  1182.     rcall   wait_5ms
  1183.     ldi tmp,key_no
  1184.     and key_flag,tmp
  1185.     mov tmp,key_flag
  1186.     cpi tmp,key_no
  1187.     breq    PC+12
  1188.     in  tmp,PINB
  1189.     andi    tmp,key_no
  1190.     cp  key_flag,tmp
  1191.     brne    PC+8
  1192.     dec key_count
  1193.     breq    PC+4
  1194.     cpi key_count,160
  1195.     brne    PC+5
  1196.     ldi key_count,190
  1197.     mov tmp,key_flag
  1198.     rjmp    PC+3
  1199.     ldi key_count,key_def_value
  1200.     ldi tmp,key_no
  1201.     in  key_flag,PINB
  1202.     ret
  1203.  
  1204.  
  1205. clear_all:
  1206.     clr digit_1
  1207.     dec digit_1
  1208.     mov digit_2,digit_1
  1209.     mov digit_3,digit_2
  1210.     ret
  1211. ;-----------------------------------------------------------------------------:
  1212. ; 16bit/16bit Unsigned Division
  1213. ;
  1214. ; Register Variables
  1215. ;  Call:  tmp2:tmp = dividend (0x0000..0xffff)
  1216. ;         tmp4:tmp3 = divisor (0x0001..0x7fff)
  1217. ;         r21:r20  = <don't care>
  1218. ;         r22        = <don't care> (high register must be allocated)
  1219. ;
  1220. ;  Result:tmp2:tmp = tmp2:tmp / tmp4:tmp3
  1221. ;         tmp4:tmp3 = <not changed>
  1222. ;         r21:r20  = tmp2:tmp % tmp4:tmp3
  1223. ;         r22        = 0
  1224. ;
  1225. ; Size  = 16 words
  1226. ; Clock = 179..211 cycles (+ret)
  1227. ; Stack = 0 byte
  1228.  
  1229.  
  1230. div16u:     clr r20     ;initialize variables
  1231.         clr r21     ;  mod = 0;
  1232.         ldi r22,16      ;  r22 = 16;
  1233.                     ;---- car22urating loop
  1234.         lsl tmp     ;var1 = var1 << 1;
  1235.         rol tmp2        ;/
  1236.         rol r20     ;mod = mod << 1 + carry;
  1237.         rol r21     ;/
  1238.         cp  r20,tmp3    ;if (mod => var2) {
  1239.         cpc r21,tmp4    ; mod -= var2; var1++;
  1240.         brcs    PC+4        ; }
  1241.         inc tmp     ;
  1242.         sub r20,tmp3    ;
  1243.         sbc r21,tmp4    ;/
  1244.         dec r22     ;if (--r22 > 0)
  1245.         brne    PC-11       ; continue loop;
  1246.         ret
  1247.  
  1248.  
  1249.  
  1250.  
  1251. ; Register Variables
  1252. ;  Call:  tmp = dividend (0x00..0xff)
  1253. ;         tmp2 = divisor (0x01..0x7f)
  1254. ;         tmp3  = <don't care>
  1255. ;         tmp4   = <don't care> (high register must be allocated)
  1256. ;
  1257. ;  Result:tmp = tmp / tmp2
  1258. ;         tmp2 = <not changed>
  1259. ;         tmp3  = tmp % tmp2
  1260. ;         tmp4   = 0
  1261. ;
  1262. ; Size  = 11 words
  1263. ; Clock = 66..74 cycles  (+ret)
  1264. ; Stack = 0 byte
  1265.  
  1266. div08u:     clr tmp3        ;initialize variables
  1267.         ldi tmp4,8      ;  tmp3 = 0; tmp4 = 8;
  1268.                     ;---- catmp4urating loop
  1269.         lsl tmp     ;tmp = tmp << 1;
  1270.         rol tmp3        ;tmp3 = tmp3 << 1 + carry;
  1271.         cp  tmp3,tmp2   ;if (tmp3 => tmp2) {
  1272.         brcs    PC+3        ; tmp3 -= tmp2; tmp++;
  1273.         inc tmp     ; }
  1274.         sub tmp3,tmp2   ;/
  1275.         dec tmp4        ;if (--tmp4 > 0)
  1276.         brne    PC-7        ; continue loop;
  1277.         ret
  1278.  
  1279.  
  1280.  
  1281. eep_write:
  1282.     sbic    EECR,EEWE
  1283.     rjmp    PC-1
  1284.  
  1285.     out EEARH,zero
  1286.     out EEARL,tmp2
  1287.     out EEDR,tmp
  1288.     sbi EECR,EEMWE
  1289.     sbi EECR,EEWE
  1290.     ret
  1291.  
  1292.  
  1293. eep_read:
  1294.     sbic    EECR,EEWE
  1295.     rjmp    PC-1
  1296.  
  1297.     out EEARH,zero
  1298.     out EEARL,tmp
  1299.     sbi EECR,EERE
  1300.     in  tmp,EEDR
  1301.     ret
  1302.  
  1303.  
  1304.  
  1305. wait_3sec:
  1306.     rcall   wait_1sec
  1307.     rcall   wait_1sec
  1308. wait_1sec:
  1309.     rcall   wait_250ms
  1310.     rcall   wait_250ms
  1311.     rcall   wait_250ms
  1312. wait_250ms:
  1313.     ldi tmp,250
  1314.     rjmp    wait_ms
  1315. wait_5ms:
  1316.     ldi tmp,5
  1317. wait_ms:
  1318.     push    tmp
  1319.     ldi tmp,250
  1320.     rcall   wait_us
  1321.     ldi tmp,250
  1322.     rcall   wait_us
  1323.     ldi tmp,250
  1324.     rcall   wait_us
  1325.     ldi tmp,250
  1326.     rcall   wait_us
  1327.     pop tmp
  1328.     dec tmp
  1329.     brne    wait_ms
  1330.     ret
  1331.  
  1332. wait_us:
  1333.     nop
  1334.     nop
  1335.     nop
  1336.     nop
  1337.     nop
  1338.     dec tmp
  1339.     brne    wait_us
  1340.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement