processor 16f84 list f=inhx8m include "p16f84.inc" __CONFIG _CP_OFF & _WDT_ON & _HS_OSC ; SISTEMINIAI KINTAMIEJI PCL equ 0x02 status equ 0x03 c equ 0 z equ 2 ; LAISVAI NAUDOJAMA ATMINTIS arba KINTAMIEJI digit equ 0x0c ; dig1 equ 0x0d dig2 equ 0x0e dig3 equ 0x0f dig4 equ 0x10 delaycnt equ 0x11 myg1 equ 0x12 myg2 equ 0x13 myg3 equ 0x14 myg4 equ 0x15 adresas equ 0x16 duomen equ 0x17 ; which port to use port equ PORTB ; ^ atavizmas is seno source. m_input equ b'00000000' ; input mask, which bits are input n_input equ b'11101000' ; 0,1- output, kiti input. XXXOIOOO org 0x00 ; reset vector goto main reinitialise: ; WARM BOOT, arba po WDT clrf TMR0 ; set up ports bsf STATUS,RP0 ; select register bank 1 clrwdt movlw b'11111100' ; assign 1:16 prescaler to WDT movwf OPTION_REG bsf STATUS,RP0 movlw m_input movwf TRISB movlw n_input movwf TRISA bcf STATUS,RP0 retlw 0 initialise: ; COLD BOOT movlw 0x00 ; ivairus nereikalingi dalykai movwf dig1 movlw 0x00 movwf dig2 movlw 0x00 movwf dig3 movlw 0x00 movwf dig4 clrf myg1 clrf myg2 clrf myg3 clrf myg4 ; movlw 0x0b ; uzprogram RTC. Poke 0B,63 (RTFM RTC) ; movwf adresas ; reikia tik karta ta daryti. ; movlw 0x63 ; movwf duomen ; call write retlw 0 alive: ; PAGRINDINIS SKAITLIUS ; IR IVAIRIOS EKSPERIMENTINES PROGRAMOS. SIAIP TAI DALIS KURI ; ISKVIECIA WDT ; movlw 0x0b ; uzprogram RTC. Poke 0B,63 (RTFM RTC) ; movwf adresas ; movlw 0x63 ; movwf duomen ; call write ; movlw 0x20 ; bandymas i bat.back up mem. Poke 20,63 ; movwf adresas ; movlw 0x63 ; movwf duomen ; call write ; movlw 0x04 ;#### movf dig3,w ; duomenys is 3 perkeliami i adresu reg. movwf adresas call read movf duomen,w movwf dig1 movf dig1,w ; parodom duomenys (1) per indik 1 ir 2 movwf dig2 swapf dig2,f ; movlw 0x08 ;#### ; movwf adresas ; call read ; movf duomen,w ; movwf dig2 ; movlw 0x09 ;#### ; movwf adresas ; call read ; movf duomen,w ; movwf dig3 ; movlw 0x0a ;#### ; movwf adresas ; call read ; movf duomen,w ; movwf dig4 ; movf myg1,w ; addwf dig1,f ; movf myg2,w ; addwf dig2,f movf myg3,w ; mygtuko #3 pridedam prie 3 addwf dig3,f movf myg4,w ; o mygtuko #4 atimam is 3 subwf dig3,f movf dig3,w ; parodom 3 turini per 3 ir 4 indikatoriu movwf dig4 swapf dig4,f clrf myg1 ; mygtuku issivalymas clrf myg2 clrf myg3 clrf myg4 ; ; incf dig1,f ; movf dig1,w ; sublw 9 ; btfsc status,c ; retlw 0 ; clrf dig1 ; incf dig2,f ; movf dig2,w ; sublw 9 ; btfsc status,c ; retlw 0 ; clrf dig2 ; incf dig3,f ; movf dig3,w ; sublw 9 ; btfsc status,c ; retlw 0 ; clrf dig3 ; incf dig4,f ; movf dig4,w ; sublw 9 ; btfsc status,c ; retlw 0 ; clrf dig1 ; clrf dig2 ; clrf dig3 ; clrf dig4 retlw 0 main: bsf STATUS, RP0 btfsc STATUS,NOT_TO ; if this is a reset or power-up ... call initialise ; ... clear random number seed call reinitialise ; set port drivers and WDT prescaler main_1: call alive ; skaitlius loop: call levo goto loop goto main_1 levo: ; INDIKACIJA ; clrf digit movlw b'11111000' movwf digit movlw 0xFF ; off movwf PORTA movf dig1,w call segtab movwf port movf digit,w ; pirmas movwf PORTA call delay incf digit,f movlw 0xFF ; off movwf PORTA movf dig2,w call segtab movwf port movf digit,w ; antras movwf PORTA call delay incf digit,f movlw 0xFF ; off movwf PORTA movf dig3,w call segtab movwf port movf digit,w ; trecias movwf PORTA call delay incf digit,f movlw 0xff ; off movwf PORTA movf dig4,w call segtab movwf port movf digit,w ; ketvirtas movwf PORTA ; call delay ; retlw 0 ; O KAM TOS 2 KOMANDOS, JEI GALIMA SUPAPRASTINTI? delay: ; DO NOTHING vietele. Cia reikia ideti mygtuku skanavima? btfsc PORTA,3 ;nuspaustas? 0123 goto delay1 ; btfsc PORTA,3 ;nuspaustas? 0123 ; goto delay1 movf digit,w ; ??? andlw b'00000111' ; addlw 2 sublw 2 btfsc status,c goto nu1 movlw 1 movwf myg4 goto delay1 nu1: movf digit,w andlw b'00000111' addlw 2 sublw 3 btfsc status,c goto nu2 movlw 1 movwf myg3 goto delay1 nu2: movf digit,w andlw b'00000111' addlw 2 sublw 2 btfsc status,c goto nu3 movlw 1 movwf myg2 goto delay1 nu3: movf digit,w andlw b'00000111' addlw 2 sublw 1 btfsc status,c goto delay1 movlw 1 movwf myg1 delay1: movlw 0xff movwf delaycnt loodel: decfsz delaycnt, f goto loodel retlw 0 ; ################ ; write byte for RTC ; Nemanau, kad reikia taip komplikuotai, bet 'who cares'! ; CAIWD ; SSNRS ; 76543210 write: bsf STATUS,RP0 ; select register bank 1 movlw b'11100000' ; A portas visi bitai output movwf TRISA ; B portas output movlw m_input movwf TRISB bcf STATUS,RP0 movlw b'11110100' ; CS=1 AS=0 DS=0 WR=0 movwf PORTA movlw b'11110111' ; CS=1 AS=0 DS=1 WR=1 movwf PORTA movlw b'11111111' ; CS=1 AS=1 DS=1 WR=1 movwf PORTA movf adresas,w ; ADRESAS "ISSTATYTAS" movwf PORTB movlw b'11101111' ; CS=0 AS=1 DS=1 WR=1 movwf PORTA movlw b'11100111' ; CS=0 AS=0 DS=1 WR=1 movwf PORTA movlw b'11100101' ; CS=0 AS=0 DS=1 WR=0 movwf PORTA movf duomen,w ; DUOMENYS "ISSTATYTI" movwf PORTB movlw b'11100111' ; CS=0 AS=0 DS=1 WR=1 movwf PORTA movlw b'11110111' ; CS=1 AS=0 DS=1 WR=1 movwf PORTA ; perprogramuojam porta B for WRITE bsf STATUS,RP0 ; select register bank 1 movlw m_input movwf TRISB movlw n_input movwf TRISA bcf STATUS,RP0 retlw 0 ; read byte for RTC ; CAIWD ; SSNRS ; 76543210 read: clrf duomen ; perprogramuojam bsf STATUS,RP0 ; select register bank 1 movlw b'11100000' ; A portas visi bitai output movwf TRISA ; B portas output movlw m_input movwf TRISB bcf STATUS,RP0 ; end perprogramuojam movlw b'11110100' ; CS=1 AS=0 DS=0 WR=0 movwf PORTA movlw b'11110111' ; CS=1 AS=0 DS=1 WR=1 movwf PORTA movlw b'11111111' ; CS=1 AS=1 DS=1 WR=1 movwf PORTA movf adresas,w ; ADRESAS "ISSTATYTAS" movwf PORTB movlw b'11101111' ; CS=0 AS=1 DS=1 WR=1 movwf PORTA movlw b'11100111' ; CS=0 AS=0 DS=1 WR=1 movwf PORTA ; perprogramuojam porta B for READ bsf STATUS,RP0 ; select register bank 1 movlw b'11111111' movwf TRISB bcf STATUS,RP0 ; end of perprogr. movlw b'11100110' ; CS=0 AS=0 DS=0 WR=1 IND=1 movwf PORTA movf PORTB,w ; SKAITOM DUOMENYS movwf duomen movlw b'11111111' ; CS=1 AS=1 DS=1 WR=1 IND=1 movwf PORTA ; perprogramuojam porta B for WRITE bsf STATUS,RP0 ; select register bank 1 movlw m_input movwf TRISB movlw n_input movwf TRISA bcf STATUS,RP0 retlw 0 ; SITOS PROGRAMOS DALIES NESUPRANTU. segtab: andlw 0x0f addwf PCL,f dt 0x84,0xfc,0xc1,0xd0,0xb8,0x92,0x82,0xdc,0x80,0x90,0x88,0xa2,0x87,0xe0,0x83,0x8b ; simboliai: 0 1 2 3 4 5 6 7 8 9 A B C D E F ; Symbol table- reprogram according your LED connection schematics. dt 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f ; simboliai: tuscia.... end