Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <P16F877A.INC> ; definicje specyficzne dla mikrokontrolera
- __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF
- UDATA
- l1 RES 1
- l2 RES 1
- l3 RES 1
- sekundy_d RES 1
- sekundy_j RES 1
- minuty_d RES 1
- minuty_j RES 1
- sekundy_d_left RES 1
- sekundy_j_left RES 1
- minuty_d_left RES 1
- minuty_j_left RES 1
- licznik RES 1
- temp RES 1
- RST CODE 0x000 ; wektor resetu procesora
- pagesel main ; wybór strony pamięci programu
- goto main ; skok do początku programu
- PGM CODE
- main
- ; Inicjalizacja niezbędnych komponentów
- bcf STATUS, RP0 ; wybór banku 0
- bcf STATUS, RP1
- clrf PORTA ; inicjalizacja PORTA przez zerowanie zatrzasków wyjściowych
- bsf STATUS, RP0
- movlw B'00000110' ; przełączenie wejść na cyfrowe
- movwf ADCON1 ; poprzez odłączenie przetwornika A/C
- clrf TRISA ; ustawienie wyprowadzeń PORTA na wyjścia
- clrf TRISB ; ustawienie wyprowadzeń PORTB na wyjścia
- bcf STATUS, RP0
- ; Rozwiązanie zadania
- ;tutaj ustawia sie czas to co ma pokazac sie na liczniku +1
- movlw d'1'
- movwf minuty_d
- movlw d'1'
- movwf minuty_j
- movlw d'6'
- movwf sekundy_d
- movlw d'6'
- movwf sekundy_j
- ;tutaj ustawia sie ile czasu do konca okresu przykladowo w sekundach jest jednosci 9 sek czyli 0 sekund do konca, dodaj 1 i wpisz
- movlw d'1'
- movwf minuty_j_left
- movlw d'6'
- movwf sekundy_d_left
- movlw d'6'
- movwf sekundy_j_left
- start
- call disp
- decfsz sekundy_j_left, f
- goto sec_j_handle
- movlw d'10'
- movwf sekundy_j
- movlw d'10'
- movwf sekundy_j_left
- decfsz sekundy_d_left, f
- goto sec_d_handle
- movlw d'6'
- movwf sekundy_d
- movlw d'6'
- movwf sekundy_d_left
- decfsz minuty_j_left, f
- goto min_0_handle
- movlw d'1'
- movwf minuty_j
- movlw d'6'
- movwf sekundy_d
- movlw d'1'
- movwf sekundy_j
- movlw d'6'
- movwf sekundy_d_left
- movlw d'1'
- movwf sekundy_j_left
- ; jezeli usuniesz dwie instrukcje pod spodem to po doliczeniu do 0 zacznie odliczac z powrotem od 2:30 w dol
- movlw d'1'
- movwf minuty_j
- movlw d'1'
- movwf sekundy_d
- call disp
- goto $-1
- goto end_min_0_handle
- min_0_handle
- decf minuty_j, f
- end_min_0_handle
- goto zero_sec_d
- sec_d_handle
- decf sekundy_d, f
- zero_sec_d
- goto end_sec_j_handle
- sec_j_handle
- decf sekundy_j, f
- end_sec_j_handle
- goto start
- disp
- movlw d'50'
- movwf licznik
- cnt_delay
- decfsz licznik, f
- goto update
- goto finish
- update
- call refresh
- goto cnt_delay
- finish
- return
- refresh
- movf minuty_d, w
- call convert ; wywołaj procedurę konwersji
- movwf PORTB ; wysłanie na port PORTB
- movlw B'00000001' ; włączenie wyświetlacza DS1
- movwf PORTA
- call delay_20ms ; odczekaj kilka ms
- movf minuty_j, w
- call convert ; wywołaj procedurę konwersji
- movwf temp ;ZAPALENIE KROPKI PRZY DZIESIETNYCH MINUTY
- bsf temp, 7
- movf temp, w
- movwf PORTB ; wysłanie na port PORTB
- movlw B'00000010' ; włączenie wyświetlacza DS2
- movwf PORTA
- call delay_20ms ; odczekaj kilka ms
- movf sekundy_d, w
- call convert ; wywołaj procedurę konwersji
- movwf PORTB ; wysłanie na port PORTB
- movlw B'00000100' ; włączenie wyświetlacza DS3
- movwf PORTA
- call delay_20ms ; odczekaj kilka ms
- movf sekundy_j, w
- call convert ; wywołaj procedurę konwersji
- movwf PORTB ; wysłanie na port PORTB
- movlw B'00001000' ; włączenie wyświetlacza DS4
- movwf PORTA
- call delay_20ms ; odczekaj kilka ms
- return
- convert
- addwf PCL, f
- dt B'00000000' ; xxx
- dt B'00111111' ; 0
- dt B'00000110' ; 1
- dt B'01011011' ; 2
- dt B'01001111' ; 3
- dt B'01100110' ; 4
- dt B'01101101' ; 5
- dt B'01111101' ; 6
- dt B'00000111' ; 7
- dt B'01111111' ; 8
- dt B'01101111' ; 9
- delay_20ms ;20ms
- movlw D'2' ; załaduj liczbę powtórzeń pętli l3
- movwf l3 ; do zmiennej l3
- l2_pocz2
- movlw D'20' ; załaduj liczbę powtórzeń pętli l2
- movwf l2 ; do zmiennej l2
- goto $+1
- goto $+1
- goto $+1
- goto $+1
- l1_pocz2
- movlw D'40' ; załaduj liczbę powtórzeń pętli l1
- movwf l1 ; do zmiennej l1
- decfsz l1, f ; zmniejsz zmienną l1
- goto $-1 ; wróć do poprzedniej instrukcji (decfsz)
- decfsz l2, f ; zmniejsz zmienną l2
- goto l1_pocz2 ; wróć do miejsca ładowania zmiennej l1
- decfsz l3, f ; zmniejsz zmienną l3
- goto l2_pocz2 ; wróć do miejsca ładowania zmiennej l2
- return
- END ; dyrektywa END kończy treść programu
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement