home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 December / Chip_2000-12_cd1.bin / internet / pic / hvezda / hvezda10.asm < prev    next >
Assembly Source File  |  2000-09-28  |  12KB  |  496 lines

  1. ;*****************************************************************
  2. ;* Vanocni hvezda 2000                   14.07.2000   28.09.2000 *
  3. ;* opakovaci frekvence 100Hz, 32kroku                            *
  4. ;*****************************************************************
  5. ;*             http://www.mujweb.cz/pocitace/doveda              *
  6. ;*****************************************************************
  7. ;*                                                               *
  8. ;*                         -----\/-----                          *
  9. ;*         LED ruda       -|RA2    RA1|-  LED zluta              *
  10. ;*                        -|RA3    RA0|-  LED zelena             *
  11. ;*                        -|RA4ck osc1|-  \ Crystal 3,2768MHz    *
  12. ;*              Vdd       -|MCLR  osc2|-  /                      *
  13. ;*             ground     -|Vss    Vdd|-  +5V                    *
  14. ;*                        -|RB0int RB7|-                         *
  15. ;*                        -|RB1    RB6|-                         *
  16. ;*                        -|RB2    RB5|-                         *
  17. ;*                        -|RB3    RB4|-                         *
  18. ;*                         ------------                          *
  19. ;*                                       DOVEDA BOYS c 1997-2000 *
  20. ;*****************************************************************
  21.  
  22. list p=16f84
  23. include "p16f84.inc"
  24.  
  25. TIMER        equ    0x0C    ; pomocn² ΦitaΦ pro vytvß°enφ zpo₧d∞nφ
  26. PERIODA        equ    0x0D
  27.  
  28. STRIDA1        equ    0x0F
  29. STRIDA2        equ    0x10
  30. STRIDA3        equ    0x11
  31. MAX        equ    0x12
  32. BAK_W        equ    0x14
  33. BAK_S        equ    0x15
  34.  
  35. TMP0        equ    17h
  36. TMP1        equ    18h
  37. TMP2        equ    19h
  38. TMP3        equ    1Ah
  39. TMP4        equ    1Bh
  40.  
  41. #define ZELENA    PORTA,0        ; zelena  LED 1=sviti
  42. #define ZLUTA   PORTA,1        ; zluta   LED 1=sviti
  43. #define CERVENA    PORTA,2        ; cervena LED 1=sviti
  44.  
  45.     org    0x2007        ; adresa konfigurace PIC16F84
  46.     dw _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF
  47.  
  48.     org    0        ; zacatek programu
  49.     goto    INIT        ; skok na poΦßteΦnφ inicalizaci
  50.  
  51.     org    4        ; vektor p°eruÜenφ
  52.     movwf    BAK_W        ; ulozi W
  53.     movf    STATUS,W    ; ulozi STATUS
  54.     movwf    BAK_S
  55.  
  56.     movlw    0x7F
  57.     movwf    TMR0
  58.  
  59.     bcf    INTCON,T0IF    ; vynulovat p°φznak
  60.  
  61.     movf    PERIODA,W
  62.     btfss    STATUS,Z    ; perioda > 0 -> goto INT1
  63.     goto    INT1
  64. ;-------------------------------
  65.     movf    STRIDA1,W
  66.     btfss    STATUS,Z    ; strida > 0 -> zapne LED
  67.     bsf    CERVENA
  68.  
  69.     movf    STRIDA2,W
  70.     btfss    STATUS,Z    ; strida > 0 -> zapne LED
  71.     bsf    ZLUTA
  72.  
  73.     movf    STRIDA3,W
  74.     btfss    STATUS,Z    ; strida > 0 -> zapne LED
  75.     bsf    ZELENA
  76.  
  77.     goto    INT2
  78. ;-------------------------------
  79. INT1    movf    STRIDA1,W
  80.     subwf    PERIODA,W    ; PERIODA - STRIDA1
  81.     btfsc    STATUS,Z    ; perioda = strida -> vypne LED
  82.     bcf    CERVENA
  83.  
  84.     movf    STRIDA2,W
  85.     subwf    PERIODA,W    ; PERIODA - STRIDA2
  86.     btfsc    STATUS,Z    ; perioda = strida -> vypne LED
  87.     bcf    ZLUTA
  88.  
  89.     movf    STRIDA3,W
  90.     subwf    PERIODA,W    ; PERIODA - STRIDA3
  91.     btfsc    STATUS,Z    ; perioda = strida -> vypne LED
  92.     bcf    ZELENA
  93. ;-------------------------------
  94. INT2    incf    PERIODA,F
  95.     movf    PERIODA,W
  96.     sublw    0x20        ; 0x20 - PERIODA
  97.     btfsc    STATUS,Z
  98.     clrf    PERIODA        ; perioda = 0x20 -> perioda = 0
  99.  
  100.     movf    BAK_S,W
  101.     movwf    STATUS        ; obnova STATUS
  102.     swapf    BAK_W,F
  103.     swapf    BAK_W,W        ; obnova W
  104.  
  105.     retfie            ; navrat z preruseni
  106. ;*************************************************************
  107. INIT    movlw    b'00000'    ; prednastaveni PORTU A
  108.     movwf    PORTA
  109.     bsf    STATUS,RP0    ; nastaveni BANKY 1
  110.     movlw    b'11010000'    ; PULL-UPy vypnuty
  111.     movwf    OPTION_REG    ; p°edd∞liΦ 1:2 u TMR0
  112.     movlw    b'11000'    ; portA 4-0 vystupy
  113.     movwf    TRISA        ;
  114.     movlw    b'11111111'    ; portB 7-0, 8vstupy
  115.     movwf    TRISB        ;
  116.     bcf    STATUS,RP0    ; nastaveni BANKY 0
  117. ;*************************************************************
  118. MAIN    movlw    0x20
  119.     movwf    MAX
  120.     clrf    PERIODA
  121.     call    SET_TMR
  122. ;-------------------------------
  123.     call    LIGHT1A        ; rozsviti 1
  124.     call    LIGHT1B        ; zhasne 1
  125.     call    LIGHT2A        ; rozsviti 2
  126.     call    LIGHT2B        ; zhasne 2
  127.     call    LIGHT3A        ; rozsviti 3
  128.     call    LIGHT3B        ; zhasne 3
  129.     call    LIGHT2A        ; rozsviti 2
  130.     call    LIGHT2B        ; zhasne 2
  131.  
  132.     call    LIGHT1A        ; rozsviti 1
  133.     call    LIGHT1B        ; zhasne 1
  134.     call    LIGHT2A        ; rozsviti 2
  135.     call    LIGHT2B        ; zhasne 2
  136.     call    LIGHT3A        ; rozsviti 3
  137.     call    LIGHT3B        ; zhasne 3
  138.     call    LIGHT2A        ; rozsviti 2
  139.     call    LIGHT2B        ; zhasne 2
  140. ;-------------------------------
  141.     call    LIGHT1A        ; rozsviti 1
  142.     call    LIGHT1B_2A    ; zhasne 1, rozsviti 2
  143.     call    LIGHT2B_3A    ; zhasne 2, rozsviti 3
  144.     call    LIGHT3B_2A    ; zhasne 3, rozsviti 2
  145.     call    LIGHT2B_1A    ; zhasne 2, rozsviti 1
  146.  
  147.     call    LIGHT1B_2A    ; zhasne 1, rozsviti 2
  148.     call    LIGHT2B_3A    ; zhasne 2, rozsviti 3
  149.     call    LIGHT3B_2A    ; zhasne 3, rozsviti 2
  150.     call    LIGHT2B_1A    ; zhasne 2, rozsviti 1
  151.     call    LIGHT1B        ; zhasne 1
  152. ;-------------------------------
  153.     call    LIGHT1A        ; rozsviti 1
  154.     call    LIGHT2A        ; rozsviti 2
  155.     call    LIGHT3A        ; rozsviti 3
  156. ;-------------------------------
  157.     call    LIGHT1B_2B_3B    ; zhasne 1, zhasne 2, zhasne 3
  158.     call    LIGHT1A_2A_3A    ; rozsviti 1, rozsviti 2, rozsviti 3
  159.     call    LIGHT1B_2B_3B    ; zhasne 1, zhasne 2, zhasne 3
  160. ;-------------------------------
  161.     call    DIS_TMR
  162.  
  163.     call    PGM100
  164.     call    PGM101
  165.     call    PGM102
  166.     goto    MAIN
  167. ;*************************************************************
  168. LIGHT1A    movf    MAX,W        ; rozsviti 1
  169.     movwf    TMP3
  170.     clrf    STRIDA1
  171.     clrf    STRIDA2
  172.     clrf    STRIDA3
  173.  
  174.     call    CEK50m        ; cekej 50ms sekundu
  175.     decf    TMP3,F
  176.     btfsc    STATUS,Z
  177.     return
  178.     incf    STRIDA1,F
  179.     goto    $-5
  180. ;-------------------------------
  181. LIGHT1B    movf    MAX,W        ; zhasne 1
  182.     movwf    TMP3
  183.     movlw    0x1f
  184.     movwf    STRIDA1
  185.     clrf    STRIDA2
  186.     clrf    STRIDA3
  187.  
  188.     call    CEK50m        ; cekej 50ms sekundu
  189.     decf    TMP3,F
  190.     btfsc    STATUS,Z
  191.     return
  192.     decf    STRIDA1,F
  193.     goto    $-5
  194. ;*************************************************************
  195. LIGHT2A    movf    MAX,W        ; rozsviti 2
  196.     movwf    TMP3
  197.     clrf    STRIDA1
  198.     clrf    STRIDA2
  199.     clrf    STRIDA3
  200.  
  201.     call    CEK50m        ; cekej 50ms sekundu
  202.     decf    TMP3,F
  203.     btfsc    STATUS,Z
  204.     return
  205.     incf    STRIDA2,F
  206.     goto    $-5
  207. ;-------------------------------
  208. LIGHT2B    movf    MAX,W        ; zhasne 2
  209.     movwf    TMP3
  210.     clrf    STRIDA1
  211.     movlw    0x1f
  212.     movwf    STRIDA2
  213.     clrf    STRIDA3
  214.  
  215.     call    CEK50m        ; cekej 50ms sekundu
  216.     decf    TMP3,F
  217.     btfsc    STATUS,Z
  218.     return
  219.     decf    STRIDA2,F
  220.     goto    $-5
  221. ;*************************************************************
  222. LIGHT3A    movf    MAX,W        ; rozsviti 3
  223.     movwf    TMP3
  224.     clrf    STRIDA1
  225.     clrf    STRIDA2
  226.     clrf    STRIDA3
  227.  
  228.     call    CEK50m        ; cekej 50ms sekundu
  229.     decf    TMP3,F
  230.     btfsc    STATUS,Z
  231.     return
  232.     incf    STRIDA3,F
  233.     goto    $-5
  234. ;-------------------------------
  235. LIGHT3B    movf    MAX,W        ; zhasne 3
  236.     movwf    TMP3
  237.     clrf    STRIDA1
  238.     clrf    STRIDA2
  239.     movlw    0x1f
  240.     movwf    STRIDA3
  241.  
  242.     call    CEK50m        ; cekej 50ms sekundu
  243.     decf    TMP3,F
  244.     btfsc    STATUS,Z
  245.     return
  246.     decf    STRIDA3,F
  247.     goto    $-5
  248. ;*************************************************************
  249. LIGHT1B_2A
  250.     movf    MAX,W        ; zhasne 1 a rozsviti 2
  251.     movwf    TMP3
  252.     movlw    0x1f
  253.     movwf    STRIDA1
  254.     clrf    STRIDA2
  255.     clrf    STRIDA3
  256.  
  257.     call    CEK50m        ; cekej 50ms sekundu
  258.     decf    TMP3,F
  259.     btfsc    STATUS,Z
  260.     return
  261.     incf    STRIDA2,F
  262.     decf    STRIDA1,F
  263.     goto    $-6
  264. ;-------------------------------
  265. LIGHT2B_3A
  266.     movf    MAX,W        ; zhasne 2 a rozsviti 3
  267.     movwf    TMP3
  268.     clrf    STRIDA1
  269.     movlw    0x1f
  270.     movwf    STRIDA2
  271.     clrf    STRIDA3
  272.  
  273.     call    CEK50m        ; cekej 50ms sekundu
  274.     decf    TMP3,F
  275.     btfsc    STATUS,Z
  276.     return
  277.     incf    STRIDA3,F
  278.     decf    STRIDA2,F
  279.     goto    $-6
  280. ;-------------------------------
  281. LIGHT3B_1A
  282.     movf    MAX,W        ; zhasne 3 a rozsviti 1
  283.     movwf    TMP3
  284.     clrf    STRIDA1
  285.     clrf    STRIDA2
  286.     movlw    0x1f
  287.     movwf    STRIDA3
  288.  
  289.     call    CEK50m        ; cekej 50ms sekundu
  290.     decf    TMP3,F
  291.     btfsc    STATUS,Z
  292.     return
  293.     incf    STRIDA1,F
  294.     decf    STRIDA3,F
  295.     goto    $-6
  296. ;-------------------------------
  297. LIGHT3B_2A
  298.     movf    MAX,W        ; zhasne 3 a rozsviti 2
  299.     movwf    TMP3
  300.     clrf    STRIDA1
  301.     clrf    STRIDA2
  302.     movlw    0x1f
  303.     movwf    STRIDA3
  304.  
  305.     call    CEK50m        ; cekej 50ms sekundu
  306.     decf    TMP3,F
  307.     btfsc    STATUS,Z
  308.     return
  309.     incf    STRIDA2,F
  310.     decf    STRIDA3,F
  311.     goto    $-6
  312. ;-------------------------------
  313. LIGHT2B_1A
  314.     movf    MAX,W        ; zhasne 2 a rozsviti 1
  315.     movwf    TMP3
  316.     clrf    STRIDA1
  317.     movlw    0x1f
  318.     movwf    STRIDA2
  319.     clrf    STRIDA3
  320.  
  321.     call    CEK50m        ; cekej 50ms sekundu
  322.     decf    TMP3,F
  323.     btfsc    STATUS,Z
  324.     return
  325.     incf    STRIDA1,F
  326.     decf    STRIDA2,F
  327.     goto    $-6
  328. ;*************************************************************
  329. LIGHT1A_2A_3A
  330.     movf    MAX,W        ; 1, 2 a 3 barva pomalu rozsviti
  331.     movwf    TMP3
  332.     clrf    STRIDA1
  333.     clrf    STRIDA2
  334.     clrf    STRIDA3
  335.  
  336.     call    CEK50m        ; cekej 50ms sekundu
  337.     decf    TMP3,F
  338.     btfsc    STATUS,Z
  339.     return
  340.     incf    STRIDA1,F
  341.     incf    STRIDA2,F
  342.     incf    STRIDA3,F
  343.     goto    $-7
  344. ;-------------------------------
  345. LIGHT1B_2B_3B
  346.     movf    MAX,W        ; 1, 2 a 3 barva pomalu zhasne
  347.     movwf    TMP3
  348.     movlw    0x1f
  349.     movwf    STRIDA1
  350.     movwf    STRIDA2
  351.     movwf    STRIDA3
  352.  
  353.     call    CEK50m        ; cekej 50ms sekundu
  354.     decf    TMP3,F
  355.     btfsc    STATUS,Z
  356.     return
  357.     decf    STRIDA1,F
  358.     decf    STRIDA2,F
  359.     decf    STRIDA3,F
  360.     goto    $-7
  361. ;*************************************************************
  362. PGM100    bsf    CERVENA
  363.     call    CEK1s        ; cekej 1 sekundu
  364.     bcf    CERVENA
  365.  
  366.     bsf    ZLUTA
  367.     call    CEK1s        ; cekej 1 sekundu
  368.     bcf    ZLUTA
  369.  
  370.     bsf    ZELENA
  371.     call    CEK1s        ; cekej 1 sekundu
  372.     bcf    ZELENA
  373.  
  374.     bsf    ZLUTA
  375.     call    CEK1s        ; cekej 1 sekundu
  376.     bcf    ZLUTA
  377.     return
  378. ;-------------------------------
  379. PGM101    bsf    CERVENA
  380.     call    CEK500m        ; cekej 0,5 sekundu
  381.     bcf    CERVENA
  382.  
  383.     bsf    ZLUTA
  384.     call    CEK500m        ; cekej 0,5 sekundu
  385.     bcf    ZLUTA
  386.  
  387.     bsf    ZELENA
  388.     call    CEK500m        ; cekej 0,5 sekundu
  389.     bcf    ZELENA
  390.  
  391.     bsf    ZLUTA
  392.     call    CEK500m        ; cekej 0,5 sekundu
  393.     bcf    ZLUTA
  394.  
  395.     bsf    CERVENA
  396.     call    CEK500m        ; cekej 0,5 sekundu
  397.     bcf    CERVENA
  398.  
  399.     bsf    ZLUTA
  400.     call    CEK500m        ; cekej 0,5 sekundu
  401.     bcf    ZLUTA
  402.  
  403.     bsf    ZELENA
  404.     call    CEK500m        ; cekej 0,5 sekundu
  405.     bcf    ZELENA
  406.  
  407.     bsf    ZLUTA
  408.     call    CEK500m        ; cekej 0,5 sekundu
  409.     bcf    ZLUTA
  410.     return
  411. ;-------------------------------
  412. PGM102    bsf    CERVENA
  413.     call    CEK500m        ; cekej 0,5 sekundu
  414.     bsf    ZLUTA
  415.     call    CEK500m        ; cekej 0,5 sekundu
  416.     bsf    ZELENA
  417.     call    CEK500m        ; cekej 0,5 sekundu
  418.  
  419.     call    C_123
  420.     call    CEK500m        ; cekej 0,5 sekundu
  421.  
  422.     call    S_123
  423.     call    CEK500m        ; cekej 0,5 sekundu
  424.  
  425.     call    C_123
  426.     call    CEK500m        ; cekej 0,5 sekundu
  427.  
  428.     call    S_123
  429.     call    CEK500m        ; cekej 0,5 sekundu
  430.  
  431.     call    C_123
  432.     call    CEK500m        ; cekej 0,5 sekundu
  433.     return
  434. ;*************************************************************
  435. S_123    bsf    CERVENA
  436.     bsf    ZLUTA
  437.     bsf    ZELENA
  438.     return
  439. ;-------------------------------
  440. C_123    bcf    CERVENA
  441.     bcf    ZLUTA
  442.     bcf    ZELENA
  443.     return
  444. ;*************************************************************
  445. CEK1s    movlw    .10        ; TMP2 = 10  cekej 1 sekundu
  446.     movwf    TMP2
  447.     goto    LOOP1
  448. ;-------------------------------
  449. CEK500m    movlw    .5        ; TMP2 = 5   cekej 500 milisekund
  450.     movwf    TMP2
  451.     goto    LOOP1
  452. ;-------------------------------
  453. CEK100m    movlw    .1        ; TMP2 = 1   cekej 100 milisekund
  454.     movwf    TMP2
  455.     goto    LOOP1
  456. ;-------------------------------
  457. CEK50m    movlw    30h    ; 30h    ; vice nez xx,xxx ms - inicializace LCD
  458.     movwf    TMP1
  459.     movlw    66h
  460.     movwf    TMP0
  461.     goto    CEKEJ
  462. ;-------------------------------
  463. LOOP1    movlw    .123        ; vloz do TMP1
  464.     movwf    TMP1
  465. LOOP2    movlw    .221        ; vloz do TMP0
  466.     movwf    TMP0
  467. LOOP3    decfsz    TMP0,F
  468.     goto    LOOP3
  469.     decfsz    TMP1,F
  470.     goto    LOOP2
  471.     decfsz    TMP2,F
  472.     goto    LOOP1
  473.     return
  474. ;-------------------------------
  475. CEKEJ    decfsz    TMP0,F
  476.     goto    CEKEJ
  477.     movfw    TMP1
  478.     btfsc    STATUS,Z
  479.     return
  480.     decf    TMP1,F
  481.     goto    CEKEJ
  482. ;*************************************************************
  483. SET_TMR clrf    TMR0        ; nulovat TMR0 (i jeho p°edd∞liΦ)
  484. ;    movwf    TIMER        ; p°ednastavit TIMER
  485.     movlw    b'10100000'    ; povolit p°eruÜenφ
  486.     movwf    INTCON        ; od p°eteΦenφ TMR0
  487.     return
  488. ;*************************************************************
  489. DIS_TMR    bcf    INTCON,GIE    ; zakßzat vÜechna p°eruÜenφ
  490.     btfsc    INTCON,GIE    ; jeÜt∞ se o tom p°esv∞dΦit
  491.     goto    DIS_TMR
  492.     clrf    INTCON
  493.     return
  494. ;*************************************************************
  495.     end
  496.