Bez tytułu

z Scanty Peccary, 4 lata temu, napisane w Plain Text, wyświetlone 327 razy.
URL https://pastebin.k4be.pl/view/67abec60 Udostępnij
Pobierz wklejkę lub Pokaż surowy tekst
  1. .include "tn2313def.inc"
  2.  
  3. .equ SEG_G   =0x1000
  4. .equ SEG_P_G =0x4000
  5. .equ SEG_L_G =0x2000
  6. .equ SEG_SR  =0x8000
  7. .equ SEG_P_D =0x2
  8. .equ SEG_L_D =0x1
  9. .equ SEG_D   =0x4
  10. .equ KROPKA  =0x8
  11.  
  12. .equ zero    =SEG_G+SEG_P_G+SEG_L_G+SEG_P_D+SEG_L_D+SEG_D
  13. .equ jeden   =SEG_P_G+SEG_P_D
  14. .equ dwa     =SEG_G+SEG_P_G+SEG_SR+SEG_L_D+SEG_D
  15. .equ trzy    =SEG_G+SEG_P_G+SEG_SR+SEG_P_D+SEG_D
  16. .equ cztery  =SEG_L_G+SEG_P_G+SEG_SR+SEG_P_D
  17. .equ piec    =SEG_G+SEG_L_G+SEG_SR+SEG_P_D+SEG_D
  18. .equ szesc   =SEG_G+SEG_L_G+SEG_SR+SEG_P_D+SEG_L_D+SEG_D
  19. .equ siedem  =SEG_G+SEG_P_G+SEG_P_D
  20. .equ osiem   =SEG_G+SEG_P_G+SEG_L_G+SEG_SR+SEG_P_D+SEG_L_D+SEG_D
  21. .equ dziewiec=SEG_G+SEG_P_G+SEG_L_G+SEG_SR+SEG_P_D+SEG_D
  22. .equ litstopien=SEG_G+SEG_P_G+SEG_L_G+SEG_SR
  23. .equ litc    =SEG_G+SEG_L_G+SEG_L_D+SEG_D
  24. .equ litj    =SEG_L_D + SEG_D + SEG_P_D + SEG_P_G
  25. .equ litd    =SEG_L_D+SEG_D+SEG_P_D+SEG_SR+SEG_P_G
  26. .equ litp    =SEG_L_D+SEG_L_G+SEG_G+SEG_SR+SEG_P_G
  27. .equ litn    =SEG_SR+SEG_P_D+SEG_L_D
  28.  
  29. .equ MINUS   = 10
  30. .equ NIC     = 11
  31. .equ STOPIEN = 12
  32. .equ C       = 13
  33. .equ J       = 14
  34. .equ D       = 15
  35. .equ P       = 16
  36. .equ N       = 17
  37.  
  38. .equ PORT595 =PORTB
  39. .equ DDR595  =DDRB
  40. .equ DIN     =PB4
  41. .equ CLK     =PB6
  42. .equ LOAD    =PB3
  43.  
  44. .equ _1WDDR = DDRB
  45. .equ _1WPIN = PINB
  46. .equ _1WL   = PB2
  47. .equ _1WPORT = PORTB
  48.  
  49. ;rejestry
  50. .def sregtmp =r0
  51. .def tmpi1   =r1
  52. .def wysl_i  =r2
  53. .def ZERO    =r3
  54. .def mig1    =r4
  55. .def mig2    =r5
  56. .def przyc   =r6
  57. .def stp     =r7
  58. .def ptmp    =r8
  59. .def jasnosc =r9
  60. .def ile_czuj=r10
  61. .def stan    =r11 ;0-czas, 1-data, 2-temp
  62. .def stan_tmp=r12
  63. .def mig2r   =r13
  64. .def rjasnosc=r14
  65. ;r15
  66.  
  67.  
  68.  
  69. ;tylko dla search_rom
  70. .def powtorz=r11
  71. .def ostatni=r12
  72. .def licznik=r13
  73. .def ostatni_zero =r14
  74. .def dana=r15
  75.  
  76.  
  77.  
  78. .def tmp     =r16
  79. .def tmp1    =r17
  80. .def L       =r18
  81. .def ARGD    =r19
  82. .def LSB     =r20
  83. .def tmpi2   =r20
  84. .def MSB     =r21
  85. .def tmpi    =r22
  86.  
  87. .def ustaw_i =r23
  88.  
  89. .def ARG     =r24
  90. .def ARGL    =r24
  91.  
  92. .def ARGH    =r25
  93. .def X       =r26
  94.  
  95. .def tryb    =r27
  96.  
  97. .def LY      =r28
  98. .def HY      =r29
  99.  
  100. .def LZ      =r30
  101. .def HZ      =r31
  102.  
  103.  
  104. .macro adpmZ
  105.         ldi r30, (@0*2)&255
  106.         ldi r31, @0>>7
  107. .endmacro
  108.  
  109. .macro lsr16
  110.         lsr @1
  111.         ror @0
  112. .endmacro
  113.  
  114. .macro adi
  115.         subi @0, 256-@1
  116. .endmacro
  117.  
  118. .dseg
  119.         w:            .byte 7
  120.         minusik:      .byte 1
  121.         minusik1:     .byte 1
  122.         minusik2:     .byte 1
  123.         temperatura1: .byte 2
  124.         temperatura2: .byte 2
  125.         czas:
  126.                 sek:    .byte 1
  127.                 min:    .byte 1
  128.                 godz:   .byte 1
  129.                 dzient: .byte 1
  130.                 dzienm: .byte 1
  131.                 mies:   .byte 1
  132.                 rok:    .byte 1
  133.         konf:
  134.                 jasn_dzien: .byte 1
  135.                 jasn_noc:   .byte 1
  136.                 pocz_dnia:  .byte 1
  137.                 pocz_nocy:  .byte 1
  138.                 cykl:       .byte 1
  139.                 czasc:      .byte 1
  140.         rom:
  141.                 ukl1:       .byte 8
  142.                 ukl2:       .byte 8
  143.         dtemp:       .byte 1
  144.  
  145. .cseg
  146.         ldi tmp, RAMEND         ;stos
  147.         out SPL, tmp
  148.         ldi tmp, 1<<WGM01
  149.         out TCCR0A, tmp
  150.         ldi tmp, (1<<CS00)+(1<<CS01)
  151.         out TCCR0B, tmp
  152.         ldi tmp, (1<<LOAD)+(1<<CLK)+(1<<DIN)
  153.         out DDR595, tmp
  154.         clr ZERO
  155.         sbi PORTD, 0
  156.         sbi PORTD, 1
  157.         sbi PORTA, 1
  158.         rjmp main
  159.  
  160. vector_TM0A:
  161.         in sregtmp, SREG
  162.         push X
  163.         ldi tmpi, 180   ;start rejestru timera
  164.         out TCNT0, tmpi
  165.  
  166.         sbrs mig1, 1    ;obsl. klawiatury
  167.         rcall obsl_przyc
  168.  
  169.         inc mig1
  170.         brne int_wysylaj
  171.         inc mig2r
  172.         inc mig2
  173.  
  174.         mov tmpi, mig2r
  175.         andi tmpi, 0x0f
  176.         brne jasnosc_ust
  177.  
  178.         cp rjasnosc, jasnosc
  179.         breq jasnosc_ust
  180.         brlo jasnosc_mniejsza
  181.  
  182.         dec rjasnosc
  183.         rjmp jasnosc_ust
  184.  
  185.         jasnosc_mniejsza:
  186.         inc rjasnosc
  187.  
  188.         jasnosc_ust:
  189.         lds tmpi, czasc ;czas przelaczania
  190.         add tmpi, tmpi
  191.         adi tmpi, 12
  192.         cp mig2, tmpi
  193.         brlo int_wysylaj
  194.  
  195.         clr mig2
  196.  
  197.         lds tmpi, cykl  ;przelaczanie czas/temp
  198.         cpi tmpi, 2
  199.         brlo podany_cykl
  200.         inc tryb
  201.         rjmp int_wysylaj
  202.  
  203.         podany_cykl:
  204.         mov tryb, tmpi 
  205.  
  206.         int_wysylaj:
  207.         and tryb, tryb  ;przy ustawianiu zawsze jasnosc bez plynnego przejscia
  208.         brne nie_ustawianie
  209.         mov rjasnosc, jasnosc
  210.  
  211.         nie_ustawianie:
  212.         mov tmpi, mig1  ;jasnosc
  213.         andi tmpi, 0x1f
  214.         cp rjasnosc, tmpi
  215.         brlo int_wyjdz
  216.  
  217.         ldi L, 7
  218.         ldi X, w
  219.         rcall wygas_zero
  220.         adpmZ siatka
  221.  
  222.         int_petla:      ;petla wyswietlania
  223.                 ld tmpi, X+
  224.                 add tmpi, tmpi
  225.                 movw LY, LZ
  226.                 adpmZ cyfra
  227.                 add LZ, tmpi
  228. ;               adc HZ, ZERO
  229.                 lpm LSB, Z+
  230.                 lpm MSB, Z
  231.  
  232.                 cpi L, 6        ;przecinek
  233.                 sbrc stan, 1
  234.                 brsh test_przec
  235.                 cpi L, 1        ;migajaca kropka
  236.                 brne orb
  237.  
  238.                 sbrs mig2r, 1   ;miganie
  239.                 rjmp orb
  240.                 cp stan, ZERO   ;tylko jesli czas
  241.                 brne orb
  242.                 cpi tmpi, 20
  243.                 brsh orb
  244.                 rjmp u_kropka
  245.  
  246.                 test_przec:     ;przecinek
  247.                 mov LZ, X
  248.                 ldd tmpi, Z+1
  249.                 cpi tmpi, STOPIEN
  250.                 brne orb
  251.  
  252.                 u_kropka:
  253.                 ori LSB, KROPKA
  254.                
  255.                 orb:
  256.                 movw LZ, LY
  257.                 lpm tmpi, Z+
  258.                 lpm tmpi1, Z+
  259.  
  260.                 or LSB, tmpi
  261.                 or MSB, tmpi1
  262.                 rcall wyslij
  263.                 dec L
  264.         brne int_petla
  265.  
  266.         rcall wysw_koniec
  267.  
  268.         int_wyjdz:
  269.         pop X
  270.         out SREG, sregtmp
  271.         reti
  272.  
  273. wysw_koniec:
  274.         ldi MSB, high(0x800)
  275.         ldi LSB, 0
  276.  
  277.         sbrs stan, 1
  278.         rjmp spr_kropka
  279.  
  280.         lds tmpi, minusik       ;minus
  281.         sbrc tmpi, 3
  282.         ori MSB, high(SEG_SR)
  283.         rjmp nie_ma
  284.  
  285.         spr_kropka:
  286.         sbrc stan, 0
  287.         ori LSB, low(KROPKA)
  288.  
  289.         nie_ma:
  290.         rcall wyslij    ;wyslij siatke 1
  291.         rcall wyslij    ;wyczysc wyswietlacz
  292.         ret
  293.  
  294. obsl_przyc:
  295.         and przyc, przyc
  296.         breq przyc_dalej        ;jak przyc>0 nie sprawdzaj
  297.         ret
  298.         przyc_dalej:
  299.         in tmpi, PIND
  300.         sbrs tmpi, 0
  301.         rjmp wcisniety
  302.         sbrs tmpi, 1
  303.         rjmp wcisniety
  304.         in tmpi, PINA
  305.         sbrs tmpi, 1
  306.         rjmp wcisniety
  307.         clr stp
  308.         ret
  309.  
  310.         wcisniety:
  311.         mov tmpi, stp
  312.         cpi tmpi, 255
  313.         breq wpisz_przyc
  314.         inc stp
  315.         cpi tmpi, 2
  316.         breq wpisz_przyc
  317.         ret
  318.  
  319.         wpisz_przyc:
  320.         clr tmpi2
  321.         in tmpi, PIND
  322.         sbrs tmpi, 0
  323.         ori tmpi2, 1
  324.         sbrs tmpi, 1
  325.         ori tmpi2, 2
  326.         in tmpi, PINA
  327.         sbrs tmpi, 1
  328.         ori tmpi2, 4
  329.         mov przyc, tmpi2
  330.         ret
  331.  
  332. przycisk:
  333.         mov ptmp, przyc
  334.         clr przyc
  335.         ret
  336.  
  337. wygas_zero:
  338.         lds tmpi, w+6
  339.         cpi tmpi, 11
  340.         brsh niezero
  341.         ld tmpi, X
  342.         cpi tmpi, 0
  343.         brne niezero
  344.         ldi tmpi, NIC
  345.         st X, tmpi
  346.         niezero:
  347.         ret
  348.  
  349. main:
  350.  
  351.  
  352.  
  353.         clr przyc
  354.  
  355.         ldi X, w
  356.         pet_zer:
  357.                 st X+, ZERO
  358.                 cpi X, dtemp
  359.         brlo pet_zer
  360.         st X, ZERO
  361.  
  362.         ldi ARG, 7
  363.         ldi ARGH, 1
  364.         rcall i2cSend
  365.         ldi X, konf     ;wczytaj ustawienia
  366.         ldi ARG, 8
  367.         ldi ARGH, 6
  368.         rcall i2cReceive
  369.         rcall search_rom
  370.         and ile_czuj, ile_czuj
  371.         brne nie_wylacz_temp
  372.         sts cykl, ZERO
  373.         nie_wylacz_temp:
  374.  
  375.         ldi tmp, 1<<OCIE0A
  376.         out TIMSK, tmp
  377.         clr stan_tmp
  378.  
  379.  
  380.  
  381.  
  382.  
  383. ;       sei
  384. ;       ldi ARG, 15
  385. ;       mov jasnosc, ARG
  386.  
  387.         petla:
  388.  
  389.  
  390.  
  391.  
  392.  
  393. ;       ldi ARG, 0
  394. ;       ldi ARGH, 1
  395. ;       ldi X, sek
  396. ;       rcall i2cReceive
  397.  
  398.  
  399. ;       lds ARG, sek
  400. ;       rcall bcd2bin
  401. ;       ldi X, w
  402. ;       rcall dz
  403.  
  404. ;       ldi ARG, 50
  405. ;       rcall _delay_ms
  406.  
  407.  
  408. ;       rjmp petla
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.                 sei
  417.                 mov stan, stan_tmp
  418.                 rcall odcz_czas
  419.  
  420.                 rcall przycisk
  421.                 sbrc ptmp, 2
  422.                 rcall ustaw
  423.                 sbrc ptmp, 1    ;przel czas/data
  424.                 rjmp przel_data
  425.                 sbrc ptmp, 0
  426.                 rjmp przel_data
  427.  
  428.                 sbrc tryb, 0    ;temperatura
  429.                 breq main_temp
  430.                 rjmp petla      ;koniec odcz czasu
  431.  
  432.                 main_temp:      ;odcz temperatury
  433.                 mov stan_tmp, stan
  434.                 rcall wysw_temp
  435.  
  436.                 lds tmp, cykl
  437.                 cpi tmp, 1      ;jesli cykl=1 to odczytuj temp w cyklu
  438.                 breq petla
  439.  
  440.                 czekaj_na_tryb: ;jesli nie, odczytaj tylko raz
  441.                         rcall przycisk
  442.                         sbrc ptmp, 2
  443.                         rcall ustaw
  444.                         sbrc tryb,0
  445.                 rjmp czekaj_na_tryb
  446.                 rjmp petla
  447.  
  448.                 przel_data:     ;przel czas/data
  449.                 mov tmp, stan
  450.                 cp stan, ZERO
  451.                 breq stan_zero
  452.                 mov stan_tmp, ZERO
  453.                 rjmp petla
  454.                 stan_zero:
  455.                 ldi tmp, 1
  456.                 mov stan_tmp, tmp
  457.         rjmp petla
  458.  
  459. minusw:
  460.         ldi tmp, MINUS  ;zastepowanie nieustawianych liczb kreskami
  461.         st X+, tmp
  462.         st X+, tmp
  463.         ret
  464.  
  465. ustaw:
  466.         clr ustaw_i
  467.         ustaw_petla:
  468.                 clr tryb
  469.                 rcall odcz_czas
  470.  
  471.                 ldi X, w
  472.                 cpi ustaw_i, 0 ;godz
  473.                 breq u0
  474.                 cpi ustaw_i, 1 ;min
  475.                 breq u1
  476.                 cpi ustaw_i, 2 ;sek
  477.                 breq u2
  478.                 cpi ustaw_i, 3 ;dzien
  479.                 breq u3
  480.                 cpi ustaw_i, 4 ;mies
  481.                 breq u4
  482.                 cpi ustaw_i, 5 ;rok
  483.                 breq u5
  484.                 cpi ustaw_i, 6 ;jas dzien
  485.                 breq u6
  486.                 cpi ustaw_i, 7 ;jas noc
  487.                 breq u7
  488.                 cpi ustaw_i, 8 ;pocz dnia
  489.                 breq u8
  490.                 cpi ustaw_i, 9 ;pocz nocy
  491.                 breq u9
  492.                 cpi ustaw_i, 10 ;cykl
  493.                 breq u10
  494.  
  495.                 u11:    ;opoznienie
  496.                 ldi tmp, D
  497.                 st X+, tmp
  498.                 ldi tmp, NIC
  499.                 st X, tmp
  500.                 rjmp ustaw_dalej
  501.  
  502.                 u10:    ;cykl
  503.                 and ile_czuj, ile_czuj
  504.                 brne sa_czujniki
  505.                 ret ;jesli nie ma czujnikow temp
  506.  
  507.                 sa_czujniki:
  508.                 ldi tmp, C
  509.                 st X+, tmp
  510.                 ldi tmp, NIC
  511.                 st X, tmp
  512.                 rjmp ustaw_dalej
  513.  
  514.                 u9:     ;pocz nocy
  515.                 ldi tmp, P
  516.                 st X+, tmp
  517.                 ldi tmp, N
  518.                 st X, tmp
  519.                 rjmp ustaw_dalej
  520.  
  521.                 u3:     ;dzien
  522.                 u0:     ;godz
  523.                 ldi X, w+3
  524.                 rcall minusw
  525.                 rcall minusw
  526.                 rjmp ustaw_dalej
  527.  
  528.                 u4:     ;mies
  529.                 u1:     ;min
  530.                 rcall minusw
  531.                 ldi X, w+5
  532.                 rcall minusw
  533.                 rjmp ustaw_dalej
  534.  
  535.                 u5:     ;rok
  536.                 u2:     ;sek
  537.                 rcall minusw
  538.                 inc X
  539.                 rcall minusw
  540.                 rjmp ustaw_dalej
  541.  
  542.                 u7:     ;jasnosc noc
  543.                 ldi tmp, J
  544.                 st X+, tmp
  545.                 ldi tmp, N
  546.                 st X, tmp
  547.                 rjmp ustaw_dalej
  548.  
  549.                 u6:     ;jasnosc dzien
  550.                 ldi tmp, J
  551.                 st X+, tmp
  552.                 ldi tmp, D
  553.                 st X, tmp
  554.                 rjmp ustaw_dalej
  555.  
  556.                 u8:     ;pocz dnia
  557.                 ldi tmp, P
  558.                 st X+, tmp
  559.                 ldi tmp, D
  560.                 st X, tmp
  561.                 ;rjmp ustaw_dalej
  562.  
  563.                 ustaw_dalej:
  564.  
  565.                 cpi ustaw_i, 6
  566.                 brlo nie_konf
  567.  
  568.                 mov tmp, ustaw_i        ;wyswietlanie przy ustawianiu konf
  569.                 subi tmp, 6
  570.                 ldi X, konf
  571.                 add X, tmp
  572.                 ld ARG, X
  573.                 ldi X, w+2
  574.                 rcall dz
  575.                 ldi tmp, NIC
  576.                 st X+, tmp
  577.                 st X+, tmp
  578.                 st X, tmp
  579.  
  580.                 nie_konf:
  581.                 sei
  582.                 rcall przycisk
  583.                 and ptmp, ptmp
  584.                 brne _ustaw_wcisniety
  585.                 rjmp ustaw_petla        ;nie rob nic wiecej jak nie byl wcisniety
  586.                 _ustaw_wcisniety:
  587.  
  588.                 sbrs ptmp, 2            ;ustaw nastepna
  589.                 rjmp ustaw_nie_nastepny
  590.                 inc ustaw_i
  591.  
  592.                 cpi ustaw_i, 6  ;stan data - tylko jesli ustawiamy date
  593.                 brsh nie_kropka
  594.                 cpi ustaw_i, 3
  595.                 brlo nie_kropka
  596.                
  597.                 ldi tmp, 1
  598.                 mov stan, tmp
  599.                 rjmp ustaw_nastepny
  600.  
  601.                 nie_kropka:
  602.                 mov stan, ZERO
  603.  
  604.                 ustaw_nastepny:         ;ustaw nastepna
  605.                 cpi ustaw_i, 12
  606.                 breq ustaw_koniec
  607.                 rjmp ustaw_petla
  608.  
  609.                 ustaw_koniec:
  610.                 ret
  611.  
  612.                 ustaw_nie_nastepny:     ;a jesli nie ustaw nastepna, to byl wcisniety +/-
  613.                 cpi ustaw_i, 0 ;godz
  614.                 breq zm0
  615.                 cpi ustaw_i, 1 ;min
  616.                 breq zm1
  617.                 cpi ustaw_i, 2 ;sek
  618.                 breq zm2
  619.  
  620.                 cpi ustaw_i, 3 ;dzien
  621.                 breq zm3
  622.                 cpi ustaw_i, 4 ;mies
  623.                 breq zm4
  624.                 cpi ustaw_i, 5 ;rok
  625.                 breq zm5
  626.  
  627.                 cpi ustaw_i, 6 ;jas dzien
  628.                 breq zm6
  629.                 cpi ustaw_i, 7 ;jas noc
  630.                 breq zm7
  631.                 cpi ustaw_i, 8 ;pocz dnia
  632.                 breq zm8
  633.                 cpi ustaw_i, 9 ;pocz nocy
  634.                 breq zm9
  635.                 cpi ustaw_i, 10 ;cykl
  636.                 breq zm10
  637.                 ;breq zm11 ;opozn
  638.  
  639.                 zm11:                   ;opoznienie
  640.                 ldi ARG, 15
  641.                 ldi X, czasc
  642.                 rjmp ustaw_zapis_konf
  643.  
  644.                 zm10:                   ;cykl
  645.                 ldi ARG, 2
  646.                 ldi X, cykl
  647.                 rjmp ustaw_zapis_konf
  648.  
  649.                 zm9:                    ;pocz nocy
  650.                 ldi ARG, 23
  651.                 ldi X, pocz_nocy
  652.                 rjmp ustaw_zapis_konf
  653.  
  654.                 zm8:                    ;pocz dnia
  655.                 ldi ARG, 23
  656.                 ldi X, pocz_dnia
  657.                 rjmp ustaw_zapis_konf
  658.  
  659.                 zm7:                    ;jasnosc noc
  660.                 ldi ARG, 31
  661.                 ldi X, jasn_noc
  662.                 rjmp ustaw_zapis_konf
  663.  
  664.                 zm6:                    ;jasnosc dzien
  665.                 ldi ARG, 31
  666.                 ldi X, jasn_dzien
  667.                 rjmp ustaw_zapis_konf
  668.  
  669.                 zm5:                    ;ust rok
  670.                 ldi X, rok
  671.                 ldi ARG, 99
  672.                 rjmp ustaw_zapis
  673.  
  674.                 zm4:                    ;ust mies
  675.                 ldi X, mies
  676.                 ldi ARG, 12
  677.                 rjmp ustaw_zapis
  678.  
  679.                 zm3:                    ;ust dzien
  680.                 ldi X, dzienm
  681.                 ldi ARG, 31
  682.                 rjmp ustaw_zapis
  683.  
  684.                 zm2:            ;zeruj sekundy
  685.                 ldi X, sek
  686.                 st X, ZERO
  687.                 ldi ARGH, 1
  688.                 ldi ARG, 0
  689.                 rcall i2cSend
  690.                 rjmp ustaw_petla
  691.  
  692.                 zm0:            ;ust godziny
  693.                 ldi X, godz
  694.                 ldi ARG, 23
  695.                 rjmp ustaw_zapis
  696.  
  697.                 zm1:            ;ust minuty
  698.                 ldi X, min
  699.                 ldi ARG, 59
  700.  
  701.                 ustaw_zapis:    ;zapis czasu
  702.                 rcall pm
  703.                 ldi X, min
  704.                 ldi tmp, 6
  705.                 konw_petla:
  706.                         ld ARG, X
  707.                         rcall bin2bcd
  708.                         st X+, ARG
  709.                         dec tmp
  710.                 brne konw_petla
  711.  
  712.                 ldi X, min
  713.                 ldi ARGH, 6
  714.                 ldi ARG, 1
  715.                 rcall i2cSend
  716.                 rjmp ustaw_petla
  717.  
  718.                 ustaw_zapis_konf:       ;zapis konfiguracji
  719.                 rcall pm
  720.                 ldi X, konf
  721.                 ldi ARG, 8
  722.                 ldi ARGH, 6
  723.                 rcall i2cSend
  724.         rjmp ustaw_petla
  725.  
  726. pm:
  727.         ld tmp, X
  728.         sbrc ptmp, 0
  729.         rjmp pm_plus
  730.  
  731.         cpi tmp, 0      ;minus
  732.         breq pm_zero
  733.  
  734.         dec tmp
  735.         st X, tmp
  736.         ret
  737.        
  738.         pm_zero:
  739.         st X, ARG
  740.         ret
  741.  
  742.         pm_plus:        ;plus
  743.         cp tmp, ARG
  744.         brsh pm_max
  745.         inc tmp
  746.         st X, tmp
  747.         ret
  748.  
  749.         pm_max:
  750.         st X, ZERO
  751.         ret
  752.  
  753. wyslij_adr:
  754.         ldi X, dtemp
  755.         ld tmp, X
  756.         sbrc tmp, 0
  757.         ldi X, ukl2
  758.         sbrs tmp, 0
  759.         ldi X, ukl1
  760.  
  761.         ldi tmp1, 8
  762.         adr_petla:
  763.                 ld ARG, X+
  764.                 rcall _1wire_write
  765.                 dec tmp1
  766.         brne adr_petla
  767.         ret
  768.  
  769. wysw_temp:
  770.         ldi tmp, 2
  771.         mov stan, tmp
  772.         clr tmp1
  773.         sbrc ile_czuj, 1
  774.         rjmp dwa_czuj
  775.         rjmp jeden_czuj
  776.  
  777.         dwa_czuj:
  778.         lds tmp1, dtemp
  779.         inc tmp1
  780.  
  781.         jeden_czuj:
  782.         sts dtemp, tmp1
  783.  
  784.         sbrs tmp1, 0
  785.         rjmp odcz1
  786.         ldi X, temperatura2
  787.         lds tmp, minusik2
  788.         ldi tmp1, 2
  789.         rjmp kon_odcz
  790.  
  791.         odcz1:
  792.         ldi X, temperatura1
  793.         lds tmp, minusik1
  794.         ldi tmp1, NIC
  795.         sbrc ile_czuj, 1
  796.         ldi tmp1, 1
  797.  
  798.         kon_odcz:
  799.         sts minusik, tmp
  800.         sts w+5, tmp1
  801.  
  802.         ld ARG, X+ ;stopnie
  803.         ld tmp, X  ;dziesiate
  804.         ldi X, w
  805.         ldi tmp1, NIC
  806.         cpi ARG, 10
  807.         brlo mniej_10
  808.  
  809.         rcall dz
  810.         rjmp wiecej_10
  811.  
  812.         mniej_10:
  813.         st X+, ARG
  814.         sts w+4, tmp1
  815.  
  816.         wiecej_10:
  817.         st X+, tmp
  818.         ldi tmp, STOPIEN
  819.         st X+, tmp
  820.         ldi tmp, C
  821.         st X, tmp
  822.         sts w+6, tmp1
  823.  
  824.         rcall _1wire_init       ;odczyt i konwersja
  825.         ldi ARG, 0x55
  826.         rcall _1wire_write
  827.  
  828.         rcall wyslij_adr
  829.        
  830.  
  831.  
  832.         ldi ARG, 0x44
  833.         rcall _1wire_write
  834.         sbi _1WPORT, _1WL       ;zasilanie 'parasite'
  835.         sbi _1WDDR, _1WL
  836.         sei
  837.         ldi ARG, 255
  838.         rcall _delay_ms
  839.         ldi ARG, 255
  840.         rcall _delay_ms
  841.         ldi ARG, 255
  842.         rcall _delay_ms
  843.         cbi _1WPORT, _1WL
  844.         cbi _1WDDR, _1WL
  845.         rcall _1wire_init
  846.         ldi ARG, 0x55
  847.         rcall _1wire_write
  848.         rcall wyslij_adr
  849.         ldi ARG, 0xBE
  850.         rcall _1wire_write
  851.         sei
  852.         rcall _1wire_read
  853.         push ARG
  854.         rcall _1wire_read
  855.  
  856.         mov tmp1, ARG ;test na minus
  857.         andi tmp1, 8
  858.         lds tmp, dtemp
  859.         sbrs tmp, 0
  860.         sts minusik1, tmp1
  861.         sbrc tmp, 0
  862.         sts minusik2, tmp1
  863.        
  864.         pop tmp
  865.  
  866.         breq nieujemna
  867.         com ARG
  868.         neg tmp
  869.        
  870.         nieujemna:
  871.  
  872.         mov tmp1, tmp   ;stopnie beda w ARG
  873.         andi tmp1, 0xf0
  874.         or ARG, tmp1
  875.         swap ARG
  876.  
  877.         andi tmp, 0x0f  ;dziesiate beda w tmp
  878.         add tmp, tmp
  879.         mov tmp1, tmp
  880.         add tmp, tmp
  881.         add tmp, tmp
  882.         add tmp, tmp1
  883.         swap tmp
  884.         andi tmp, 0x0f
  885.  
  886.         lds tmp1, dtemp
  887.         sbrs tmp1, 0
  888.         ldi X, temperatura1
  889.         sbrc tmp1, 0
  890.         ldi X, temperatura2
  891.  
  892.         st X+, ARG
  893.         st X, tmp
  894.         ret
  895.  
  896. odcz_czas:
  897.         ldi ARGH, 7     ;odczytaj
  898.         ldi X, czas
  899.         ldi ARG, 0
  900.         rcall i2cReceive
  901.  
  902.         ldi tmp1, 7
  903.         ldi X, czas
  904.         odcz_petla:     ;bcd2bin
  905.                 ld ARG, X
  906.                 rcall bcd2bin
  907.                 st X+, ARG
  908.                 dec tmp1
  909.         brne odcz_petla
  910.  
  911.         lds ARG, godz   ;wyswietl
  912.         sbrc stan, 0
  913.         lds ARG, dzienm
  914.         ldi X, w
  915.         cli
  916.         rcall dz
  917.  
  918.         ldi ARG, NIC
  919.         st X+, ARG
  920.  
  921.         lds ARG, min
  922.         sbrc stan, 0
  923.         lds ARG, mies
  924.         rcall dz
  925.  
  926.         lds ARG, sek
  927.         sbrc stan, 0
  928.         lds ARG, rok
  929.         rcall dz
  930.  
  931.         ;ustaw jasnosc wyswietlacza w zalezn. od godziny
  932.         lds tmp, godz
  933.  
  934.         ldi X, pocz_dnia ;pocz dnia
  935.         ld tmp1, X+
  936.         cp tmp, tmp1
  937.         brlo noc
  938.         ld tmp1, X ;pocz nocy
  939.         cp tmp, tmp1
  940.         brsh noc
  941.  
  942.         lds jasnosc, jasn_dzien
  943.         ret
  944.  
  945.         noc:
  946.         lds jasnosc, jasn_noc
  947.         ret
  948.  
  949. wyslij:
  950.         clr wysl_i
  951.         petla_wys:
  952.                 sbrs LSB, 0
  953.                 rjmp wlacz
  954.                 cbi PORT595, DIN
  955.                 rjmp zeg
  956.                 wlacz:
  957.                 sbi PORT595, DIN
  958.                 zeg:
  959.                 sbi PORT595, CLK
  960.                 cbi PORT595, CLK
  961.                 lsr16 LSB, MSB
  962.                 inc wysl_i
  963.                 sbrs wysl_i, log2(16)
  964.         rjmp petla_wys
  965.         sbi PORT595, LOAD
  966.         cbi PORT595, LOAD
  967.         ret
  968.  
  969.  
  970. _delay_ms:
  971.         delay_pet:
  972.                 ldi ARGD, 255
  973.                 rcall _delay_us
  974.                 ldi ARGD, 255
  975.                 rcall _delay_us
  976.                 ldi ARGD, 255
  977.                 rcall _delay_us
  978.                 ldi ARGD, 255
  979.                 rcall _delay_us
  980.                 dec ARG
  981.         brne delay_pet
  982.         ret
  983.  
  984. _delay_us:
  985.         cpi ARGD, 0
  986.         brne cz
  987.         ldi ARGD, 60
  988.         cz:
  989.                 nop
  990.                 nop
  991.                 nop
  992.                 nop
  993.                 nop
  994.                 dec ARGD
  995.         brne cz
  996.         ret
  997.  
  998. divmod:
  999.         clr ARGH
  1000.         div_petla:
  1001.                 cpi ARGL, 10
  1002.                 brlo div_koniec
  1003.                 inc ARGH
  1004.                 subi ARGL, 10
  1005.         rjmp div_petla
  1006.         div_koniec:
  1007.         ret
  1008.  
  1009. bcd2bin:
  1010.         mov tmp, ARG
  1011.         andi tmp, 0x0f
  1012.         swap ARG
  1013.         andi ARG, 0x0f
  1014.         add ARG, ARG
  1015.         add tmp, ARG
  1016.         add ARG, ARG
  1017.         add ARG, ARG
  1018.         add ARG, tmp
  1019.        
  1020.         ret
  1021.  
  1022. bin2bcd:
  1023.         rcall divmod
  1024.         swap ARGH
  1025.         andi ARGH, 0xf0
  1026.         add ARG, ARGH
  1027.         ret
  1028.  
  1029. .equ SDAPIN =PINB
  1030. .equ SCLDDR =DDRB
  1031. .equ SDADDR =DDRB
  1032. .equ SCL    =PB7
  1033. .equ SDA    =PB5
  1034.  
  1035. scl_toggle:
  1036.         rcall _delay_us
  1037.         cbi SCLDDR, SCL
  1038.         rcall _delay_us
  1039.         sbi SCLDDR, SCL
  1040.         rcall _delay_us
  1041.         ret
  1042.  
  1043. istart:
  1044.         rcall _delay_us
  1045.         sbi SDADDR, SDA
  1046.         rcall _delay_us
  1047.         sbi SCLDDR, SCL
  1048.         rcall _delay_us
  1049.         ret
  1050.  
  1051. istop:
  1052.         rcall _delay_us
  1053.         cbi SCLDDR, SCL
  1054.         rcall _delay_us
  1055.         cbi SDADDR, SDA
  1056.         rcall _delay_us
  1057.         ret
  1058.  
  1059. i2cPutbyte:
  1060.         ldi tmp, 8
  1061.         _putbyte_petla:
  1062.                 sbrs ARG, 7
  1063.                 rjmp _putbyte_lo
  1064.                 cbi SDADDR, SDA
  1065.                 rjmp _putbyte_d
  1066.                 _putbyte_lo:
  1067.                 sbi SDADDR, SDA
  1068.                 _putbyte_d:
  1069.                 rcall scl_toggle
  1070.                 lsl ARG
  1071.                 dec tmp
  1072.         brne _putbyte_petla
  1073.  
  1074.         cbi SDADDR, SDA
  1075.         rcall scl_toggle
  1076.         sbi SDADDR, SDA
  1077.  
  1078.         ret
  1079.  
  1080. i2cGetbyte:
  1081.         mov tmp1, ARG
  1082.         cbi SDADDR, SDA
  1083.         clr ARG
  1084.         ldi tmp, 8
  1085.         _getbyte_petla:
  1086.                 lsl ARG
  1087.                 rcall _delay_us
  1088.                 cbi SCLDDR, SCL
  1089.                 sbic SDAPIN, SDA
  1090.                 ori ARG, 1
  1091.                 rcall _delay_us
  1092.                 sbi SCLDDR, SCL
  1093.                 dec tmp
  1094.         brne _getbyte_petla
  1095.  
  1096.         cpi tmp1, 0
  1097.         breq _getbyte_n
  1098.         sbi SDADDR, SDA
  1099.         _getbyte_n:
  1100.  
  1101.         rcall scl_toggle
  1102.         sbi SDADDR, SDA
  1103.         ret
  1104.  
  1105. i2cSend: ;ARG - poczatek, ARGH - dlugosc, X - adres
  1106.         rcall istart
  1107.         push ARG
  1108.         ldi ARG, 0b11010000
  1109.         rcall i2cPutbyte
  1110.         pop ARG
  1111.         rcall i2cPutbyte
  1112.         _send_petla:
  1113.                 ld ARG, X+
  1114.                 rcall i2cPutbyte
  1115.                 dec ARGH
  1116.         brne _send_petla
  1117.  
  1118.         sbi SDADDR, SDA
  1119.         rcall istop
  1120.         ret
  1121.  
  1122. i2cReceive: ;ARG - poczatek, ARGH - dlugosc, X - adres
  1123.         rcall istart
  1124.         push ARG
  1125.         ldi ARG, 0b11010000
  1126.         rcall i2cPutbyte
  1127.         pop ARG
  1128.         rcall i2cPutbyte
  1129.  
  1130.         cbi SDADDR, SDA
  1131.         cbi SCLDDR, SCL
  1132.  
  1133.         rcall istart
  1134.         ldi ARG, 0b11010001
  1135.         rcall i2cPutbyte
  1136.  
  1137.         _receive_petla:
  1138.                 mov ARG, ARGH
  1139.                 rcall i2cGetbyte
  1140.                 st X+, ARG
  1141.                 dec ARGH
  1142.         brne _receive_petla
  1143.         stop:
  1144.         rcall istart
  1145.         rcall istop
  1146.         sbis SDAPIN, SDA
  1147.         rjmp stop
  1148.         ret
  1149.  
  1150. dz: ; X - adres
  1151.         rcall divmod
  1152.         cpi ARGH, 10
  1153.         brlo dz_dalej
  1154.         ldi ARGH, 10
  1155.         dz_dalej:
  1156.         st X+, ARGH
  1157.         st X+, ARGL
  1158.         ret
  1159.  
  1160. _1wire_init:
  1161.         cli
  1162.         sbi _1WDDR, _1WL
  1163.         ldi ARG, 1
  1164.         rcall _delay_ms
  1165.         cbi _1WDDR, _1WL
  1166.         rcall _delay_us
  1167.         sei
  1168.         ldi ARG, 1
  1169.         rcall _delay_ms
  1170.         ret
  1171.  
  1172. _1wire_write:
  1173.         ldi tmp, 8
  1174.         _write_petla:
  1175.                 rcall write_slot
  1176.  
  1177.                 dec tmp
  1178.                 breq _write_koniec
  1179.                 sei
  1180.                 lsr ARG
  1181.         rjmp _write_petla
  1182.         _write_koniec:
  1183.         ret
  1184.  
  1185. _1wire_read:
  1186.         clr ARG
  1187.         ldi tmp, 1
  1188.         _read_petla:
  1189.                 rcall read_slot
  1190.                 sbrc ARGH, 0
  1191.                 or ARG, tmp
  1192.  
  1193.                 lsl tmp
  1194.         brne _read_petla
  1195.         ret
  1196.  
  1197. read_slot:      ;wejscie: lsb rej. ARGH
  1198.         cli
  1199.         sbi _1WDDR, _1WL
  1200.         ldi ARGD, 1
  1201.         rcall _delay_us
  1202.         cbi _1WDDR, _1WL
  1203.         ldi ARGD, 14
  1204.         rcall _delay_us
  1205.         andi ARGH, 0b11111110
  1206.         sbic _1WPIN, _1WL
  1207.         ori ARGH, 0b00000001
  1208.         sei
  1209.         rcall _delay_us
  1210.         ret
  1211.  
  1212. write_slot:     ;wyjscie: lsb rej. ARG
  1213.         cli
  1214.         sbi _1WDDR, _1WL
  1215.         ldi ARGD, 1
  1216.         rcall _delay_us
  1217.         sbrc ARG, 0
  1218.         cbi _1WDDR, _1WL
  1219.         rcall _delay_us
  1220.         cbi _1WDDR, _1WL
  1221.         ret
  1222.  
  1223. search_rom:
  1224.         clr ile_czuj
  1225.         clr powtorz
  1226.         clr ostatni
  1227.         ldi X, rom
  1228.  
  1229.         gl_petla:
  1230.         rcall _1wire_init
  1231.         ldi ARG, 0xF0
  1232.         rcall _1wire_write
  1233.  
  1234.         clr ostatni_zero
  1235.         clr licznik
  1236.  
  1237.         search_petla:
  1238.                 rcall read_slot
  1239.                 bst ARGH, 0
  1240.                 rcall read_slot
  1241.        
  1242.                 brtc nie_blad
  1243.                 sbrs ARGH, 0
  1244.                 rjmp nie_blad
  1245.                 blad:
  1246.                 clr ile_czuj
  1247.                 ret
  1248.        
  1249.                 nie_blad:
  1250.                 brts search_wyslij
  1251.                 sbrc ARGH, 0
  1252.                 rjmp search_wyslij
  1253.        
  1254.                 cp powtorz, licznik
  1255.                 breq rowne
  1256.                 brlo wieksze
  1257.                 bst ostatni, 0
  1258.                 rjmp dalej
  1259.        
  1260.                 rowne:
  1261.                 set
  1262.                 rjmp dalej
  1263.        
  1264.                 wieksze:
  1265.                 clt
  1266.        
  1267.                 dalej:
  1268.                 brts search_wyslij
  1269.        
  1270.                 mov ostatni_zero, licznik
  1271.        
  1272.                 search_wyslij:
  1273.                 bld ostatni, 0
  1274.                 mov ARG, ostatni
  1275.                 rcall write_slot
  1276.        
  1277.                 lsr ARG
  1278.                 ror dana
  1279.                 mov tmp, licznik
  1280.                 andi tmp, 0b111
  1281.                 inc tmp
  1282.                 sbrc tmp, 3
  1283.                 st X+, dana
  1284.        
  1285.                 inc licznik
  1286.                 sbrs licznik, 6
  1287.         rjmp search_petla
  1288.         inc ile_czuj
  1289.         mov powtorz, ostatni_zero
  1290.         and powtorz, powtorz
  1291.         breq koniec
  1292.         sbrc ile_czuj, 1
  1293.         koniec:
  1294.         ret
  1295.         rjmp gl_petla
  1296.  
  1297.         siatka: .dw 0x100, 0x80, 0x40, 0x200, 0x20, 0x10, 0x400
  1298.         cyfra:  .dw zero, jeden, dwa, trzy, cztery, piec, szesc, siedem, osiem, dziewiec, SEG_SR, 0, litstopien, litc, litj, litd, litp, litn
  1299.  
  1300.  

odpowiedź "Bez tytułu"

Tutaj możesz odpowiedzieć na wklejkę z góry

captcha