home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2000 December
/
Chip_2000-12_cd1.bin
/
internet
/
pic
/
hvezda
/
hvezda10.asm
< prev
next >
Wrap
Assembly Source File
|
2000-09-28
|
12KB
|
496 lines
;*****************************************************************
;* Vanocni hvezda 2000 14.07.2000 28.09.2000 *
;* opakovaci frekvence 100Hz, 32kroku *
;*****************************************************************
;* http://www.mujweb.cz/pocitace/doveda *
;*****************************************************************
;* *
;* -----\/----- *
;* LED ruda -|RA2 RA1|- LED zluta *
;* -|RA3 RA0|- LED zelena *
;* -|RA4ck osc1|- \ Crystal 3,2768MHz *
;* Vdd -|MCLR osc2|- / *
;* ground -|Vss Vdd|- +5V *
;* -|RB0int RB7|- *
;* -|RB1 RB6|- *
;* -|RB2 RB5|- *
;* -|RB3 RB4|- *
;* ------------ *
;* DOVEDA BOYS c 1997-2000 *
;*****************************************************************
list p=16f84
include "p16f84.inc"
TIMER equ 0x0C ; pomocn² ΦitaΦ pro vytvß°enφ zpo₧d∞nφ
PERIODA equ 0x0D
STRIDA1 equ 0x0F
STRIDA2 equ 0x10
STRIDA3 equ 0x11
MAX equ 0x12
BAK_W equ 0x14
BAK_S equ 0x15
TMP0 equ 17h
TMP1 equ 18h
TMP2 equ 19h
TMP3 equ 1Ah
TMP4 equ 1Bh
#define ZELENA PORTA,0 ; zelena LED 1=sviti
#define ZLUTA PORTA,1 ; zluta LED 1=sviti
#define CERVENA PORTA,2 ; cervena LED 1=sviti
org 0x2007 ; adresa konfigurace PIC16F84
dw _XT_OSC & _PWRTE_OFF & _WDT_OFF & _CP_OFF
org 0 ; zacatek programu
goto INIT ; skok na poΦßteΦnφ inicalizaci
org 4 ; vektor p°eruÜenφ
movwf BAK_W ; ulozi W
movf STATUS,W ; ulozi STATUS
movwf BAK_S
movlw 0x7F
movwf TMR0
bcf INTCON,T0IF ; vynulovat p°φznak
movf PERIODA,W
btfss STATUS,Z ; perioda > 0 -> goto INT1
goto INT1
;-------------------------------
movf STRIDA1,W
btfss STATUS,Z ; strida > 0 -> zapne LED
bsf CERVENA
movf STRIDA2,W
btfss STATUS,Z ; strida > 0 -> zapne LED
bsf ZLUTA
movf STRIDA3,W
btfss STATUS,Z ; strida > 0 -> zapne LED
bsf ZELENA
goto INT2
;-------------------------------
INT1 movf STRIDA1,W
subwf PERIODA,W ; PERIODA - STRIDA1
btfsc STATUS,Z ; perioda = strida -> vypne LED
bcf CERVENA
movf STRIDA2,W
subwf PERIODA,W ; PERIODA - STRIDA2
btfsc STATUS,Z ; perioda = strida -> vypne LED
bcf ZLUTA
movf STRIDA3,W
subwf PERIODA,W ; PERIODA - STRIDA3
btfsc STATUS,Z ; perioda = strida -> vypne LED
bcf ZELENA
;-------------------------------
INT2 incf PERIODA,F
movf PERIODA,W
sublw 0x20 ; 0x20 - PERIODA
btfsc STATUS,Z
clrf PERIODA ; perioda = 0x20 -> perioda = 0
movf BAK_S,W
movwf STATUS ; obnova STATUS
swapf BAK_W,F
swapf BAK_W,W ; obnova W
retfie ; navrat z preruseni
;*************************************************************
INIT movlw b'00000' ; prednastaveni PORTU A
movwf PORTA
bsf STATUS,RP0 ; nastaveni BANKY 1
movlw b'11010000' ; PULL-UPy vypnuty
movwf OPTION_REG ; p°edd∞liΦ 1:2 u TMR0
movlw b'11000' ; portA 4-0 vystupy
movwf TRISA ;
movlw b'11111111' ; portB 7-0, 8vstupy
movwf TRISB ;
bcf STATUS,RP0 ; nastaveni BANKY 0
;*************************************************************
MAIN movlw 0x20
movwf MAX
clrf PERIODA
call SET_TMR
;-------------------------------
call LIGHT1A ; rozsviti 1
call LIGHT1B ; zhasne 1
call LIGHT2A ; rozsviti 2
call LIGHT2B ; zhasne 2
call LIGHT3A ; rozsviti 3
call LIGHT3B ; zhasne 3
call LIGHT2A ; rozsviti 2
call LIGHT2B ; zhasne 2
call LIGHT1A ; rozsviti 1
call LIGHT1B ; zhasne 1
call LIGHT2A ; rozsviti 2
call LIGHT2B ; zhasne 2
call LIGHT3A ; rozsviti 3
call LIGHT3B ; zhasne 3
call LIGHT2A ; rozsviti 2
call LIGHT2B ; zhasne 2
;-------------------------------
call LIGHT1A ; rozsviti 1
call LIGHT1B_2A ; zhasne 1, rozsviti 2
call LIGHT2B_3A ; zhasne 2, rozsviti 3
call LIGHT3B_2A ; zhasne 3, rozsviti 2
call LIGHT2B_1A ; zhasne 2, rozsviti 1
call LIGHT1B_2A ; zhasne 1, rozsviti 2
call LIGHT2B_3A ; zhasne 2, rozsviti 3
call LIGHT3B_2A ; zhasne 3, rozsviti 2
call LIGHT2B_1A ; zhasne 2, rozsviti 1
call LIGHT1B ; zhasne 1
;-------------------------------
call LIGHT1A ; rozsviti 1
call LIGHT2A ; rozsviti 2
call LIGHT3A ; rozsviti 3
;-------------------------------
call LIGHT1B_2B_3B ; zhasne 1, zhasne 2, zhasne 3
call LIGHT1A_2A_3A ; rozsviti 1, rozsviti 2, rozsviti 3
call LIGHT1B_2B_3B ; zhasne 1, zhasne 2, zhasne 3
;-------------------------------
call DIS_TMR
call PGM100
call PGM101
call PGM102
goto MAIN
;*************************************************************
LIGHT1A movf MAX,W ; rozsviti 1
movwf TMP3
clrf STRIDA1
clrf STRIDA2
clrf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
incf STRIDA1,F
goto $-5
;-------------------------------
LIGHT1B movf MAX,W ; zhasne 1
movwf TMP3
movlw 0x1f
movwf STRIDA1
clrf STRIDA2
clrf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
decf STRIDA1,F
goto $-5
;*************************************************************
LIGHT2A movf MAX,W ; rozsviti 2
movwf TMP3
clrf STRIDA1
clrf STRIDA2
clrf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
incf STRIDA2,F
goto $-5
;-------------------------------
LIGHT2B movf MAX,W ; zhasne 2
movwf TMP3
clrf STRIDA1
movlw 0x1f
movwf STRIDA2
clrf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
decf STRIDA2,F
goto $-5
;*************************************************************
LIGHT3A movf MAX,W ; rozsviti 3
movwf TMP3
clrf STRIDA1
clrf STRIDA2
clrf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
incf STRIDA3,F
goto $-5
;-------------------------------
LIGHT3B movf MAX,W ; zhasne 3
movwf TMP3
clrf STRIDA1
clrf STRIDA2
movlw 0x1f
movwf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
decf STRIDA3,F
goto $-5
;*************************************************************
LIGHT1B_2A
movf MAX,W ; zhasne 1 a rozsviti 2
movwf TMP3
movlw 0x1f
movwf STRIDA1
clrf STRIDA2
clrf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
incf STRIDA2,F
decf STRIDA1,F
goto $-6
;-------------------------------
LIGHT2B_3A
movf MAX,W ; zhasne 2 a rozsviti 3
movwf TMP3
clrf STRIDA1
movlw 0x1f
movwf STRIDA2
clrf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
incf STRIDA3,F
decf STRIDA2,F
goto $-6
;-------------------------------
LIGHT3B_1A
movf MAX,W ; zhasne 3 a rozsviti 1
movwf TMP3
clrf STRIDA1
clrf STRIDA2
movlw 0x1f
movwf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
incf STRIDA1,F
decf STRIDA3,F
goto $-6
;-------------------------------
LIGHT3B_2A
movf MAX,W ; zhasne 3 a rozsviti 2
movwf TMP3
clrf STRIDA1
clrf STRIDA2
movlw 0x1f
movwf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
incf STRIDA2,F
decf STRIDA3,F
goto $-6
;-------------------------------
LIGHT2B_1A
movf MAX,W ; zhasne 2 a rozsviti 1
movwf TMP3
clrf STRIDA1
movlw 0x1f
movwf STRIDA2
clrf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
incf STRIDA1,F
decf STRIDA2,F
goto $-6
;*************************************************************
LIGHT1A_2A_3A
movf MAX,W ; 1, 2 a 3 barva pomalu rozsviti
movwf TMP3
clrf STRIDA1
clrf STRIDA2
clrf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
incf STRIDA1,F
incf STRIDA2,F
incf STRIDA3,F
goto $-7
;-------------------------------
LIGHT1B_2B_3B
movf MAX,W ; 1, 2 a 3 barva pomalu zhasne
movwf TMP3
movlw 0x1f
movwf STRIDA1
movwf STRIDA2
movwf STRIDA3
call CEK50m ; cekej 50ms sekundu
decf TMP3,F
btfsc STATUS,Z
return
decf STRIDA1,F
decf STRIDA2,F
decf STRIDA3,F
goto $-7
;*************************************************************
PGM100 bsf CERVENA
call CEK1s ; cekej 1 sekundu
bcf CERVENA
bsf ZLUTA
call CEK1s ; cekej 1 sekundu
bcf ZLUTA
bsf ZELENA
call CEK1s ; cekej 1 sekundu
bcf ZELENA
bsf ZLUTA
call CEK1s ; cekej 1 sekundu
bcf ZLUTA
return
;-------------------------------
PGM101 bsf CERVENA
call CEK500m ; cekej 0,5 sekundu
bcf CERVENA
bsf ZLUTA
call CEK500m ; cekej 0,5 sekundu
bcf ZLUTA
bsf ZELENA
call CEK500m ; cekej 0,5 sekundu
bcf ZELENA
bsf ZLUTA
call CEK500m ; cekej 0,5 sekundu
bcf ZLUTA
bsf CERVENA
call CEK500m ; cekej 0,5 sekundu
bcf CERVENA
bsf ZLUTA
call CEK500m ; cekej 0,5 sekundu
bcf ZLUTA
bsf ZELENA
call CEK500m ; cekej 0,5 sekundu
bcf ZELENA
bsf ZLUTA
call CEK500m ; cekej 0,5 sekundu
bcf ZLUTA
return
;-------------------------------
PGM102 bsf CERVENA
call CEK500m ; cekej 0,5 sekundu
bsf ZLUTA
call CEK500m ; cekej 0,5 sekundu
bsf ZELENA
call CEK500m ; cekej 0,5 sekundu
call C_123
call CEK500m ; cekej 0,5 sekundu
call S_123
call CEK500m ; cekej 0,5 sekundu
call C_123
call CEK500m ; cekej 0,5 sekundu
call S_123
call CEK500m ; cekej 0,5 sekundu
call C_123
call CEK500m ; cekej 0,5 sekundu
return
;*************************************************************
S_123 bsf CERVENA
bsf ZLUTA
bsf ZELENA
return
;-------------------------------
C_123 bcf CERVENA
bcf ZLUTA
bcf ZELENA
return
;*************************************************************
CEK1s movlw .10 ; TMP2 = 10 cekej 1 sekundu
movwf TMP2
goto LOOP1
;-------------------------------
CEK500m movlw .5 ; TMP2 = 5 cekej 500 milisekund
movwf TMP2
goto LOOP1
;-------------------------------
CEK100m movlw .1 ; TMP2 = 1 cekej 100 milisekund
movwf TMP2
goto LOOP1
;-------------------------------
CEK50m movlw 30h ; 30h ; vice nez xx,xxx ms - inicializace LCD
movwf TMP1
movlw 66h
movwf TMP0
goto CEKEJ
;-------------------------------
LOOP1 movlw .123 ; vloz do TMP1
movwf TMP1
LOOP2 movlw .221 ; vloz do TMP0
movwf TMP0
LOOP3 decfsz TMP0,F
goto LOOP3
decfsz TMP1,F
goto LOOP2
decfsz TMP2,F
goto LOOP1
return
;-------------------------------
CEKEJ decfsz TMP0,F
goto CEKEJ
movfw TMP1
btfsc STATUS,Z
return
decf TMP1,F
goto CEKEJ
;*************************************************************
SET_TMR clrf TMR0 ; nulovat TMR0 (i jeho p°edd∞liΦ)
; movwf TIMER ; p°ednastavit TIMER
movlw b'10100000' ; povolit p°eruÜenφ
movwf INTCON ; od p°eteΦenφ TMR0
return
;*************************************************************
DIS_TMR bcf INTCON,GIE ; zakßzat vÜechna p°eruÜenφ
btfsc INTCON,GIE ; jeÜt∞ se o tom p°esv∞dΦit
goto DIS_TMR
clrf INTCON
return
;*************************************************************
end