; ==PROJEKT DODAWANIE 1 bedzie polegal na testowaniu flagi H== ; ****zastosuj polecenie Step Into w trakcie debuggowania .include "m32def.inc" ; plik naglowkowy ; **KONFIGURACJA PRZESTRZENI I_O** ser R16 ; laduj do rejestru R16 wartość FF (wartości 11111111) out DDRA, R16 ; port A ustawiony w tryb wyjsciowy out PORTB, R16 ; port B ustawiony w tryb wejsciowy z pull-upami Start: ; etykieta początku programu glownego ldi R16, 15 ; ładuj do rejestru R16 wartosc15 ldi R17, 35 ; ładuj do rejestru R17 wartosc 35 add R16, R17 ; dodaj wartości R16+R17, wynik będzie umieszczony w R16 out PORTA, R16 ; wyswietl na diodach rezultat dodawania (wartość 50) binarnie ;(00110010), aktualizacja SREG - w rejestrze ustawiono ;znacznik przeniesienia połówkowego H Koniec: ; etykieta konca programu rjmp Koniec ; praca uC w petli ; ******** KONIEC ******* ; ==PROJEKT DODAWANIE 2 będzie polegał na testowaniu flag H, S i N== ; ****zastosuj polecenie Step Into w trakcie debuggowania .include "m32def.inc" ; plik naglowkowy ; **KONFIGURACJA PRZESTRZENI I_O** ldi R16, 0xFF ; ładuj do rejestru R16 wartość FF (wartości 11111111) out DDRA, R16 ; port A ustawiony w tryb wyjściowy Start: ; etykieta początku programu głównego ldi R16, 10 ; ładuj do rejestru R16 wartość 10 ldi R17, 200 ; ładuj do rejestru R17 wartość 200 add R16, R17 ; dodaj wartości R16+R17, instrukcja add wynik umieszcza w ; R16, po zrealizowaniu instrukcji zaobserwuj SREG Petla: ; etykieta konca programu rjmp Petla ; praca uC w petli ; ******** KONIEC ******* ; ==PROJEKT DODAWANIE 3 bedzie polegał na testowaniu flag C i H== ; **** zastosuj polecenie Step Into w trakcie debuggowania .include "m32def.inc" ; plik naglowkowy ; **KONFIGURACJA PRZESTRZENI I_O** ldi R16, 0xFF ; laduj do rejestru R16 wartosc FF (wartości 11111111) out DDRA, R16 ; port A ustawiony w tryb wyjściowy mov R5, R16 ; utworz kopie w R5, Start: ; etykieta początku programu głównego ldi R16, 200 ; laduj do rejestru R16 wartosc 200 ldi R17, 60 ; laduj do rejestru R17 wartosc 60 add R16, R17 ; dodajemy wartości w R16 i R17, wynik będzie umieszczony w ;R16, ustawiony znacznik C informuje, ; ze w wyniku dodawania ;przekroczono wartość ponad pojemność 256. Wynik obliczen ;nie zawiera ;wartosci przeniesienia sygnalizowanego ;znacznikiem C. brcs Petla ; **** po dodawaniu testowanie flagi C za pomoca Branch if Carry Set ; **** jesli jest set (1) to przejdź do etykiety Petla rjmp Start Petla: ; etykieta konca programu out PORTA, R5 ; wyświetl na diodach R5 rjmp Petla ; praca uC w pętli ; ******** KONIEC ******* ; ==PROJEKT ODEJMOWANIE 1== ; **** zastosuj polecenie Step Into w trakcie debuggowania .include "m32def.inc" ; plik naglowkowy ; **KONFIGURACJA PRZESTRZENI I_O** ldi R16, 0xFF ; ładuj do rejestru R16 wartość FF (wartości 11111111) out DDRA, R16 ; port A ustawiony w tryb wyjściowy Start: ; etykieta początku programu głównego ldi R16, 20 ; ładuj do rejestru R16 wartość 20 ldi R17, 15 ; ładuj do rejestru R17 wartość 15 sub R16, R17 ; odejmij wartości: R16-R17, wynik będzie umieszczony w R16 Petla: ; etykieta końca programu rjmp Petla ; praca uC w pętli ; ******** KONIEC ******* ; **** PROJEKT TRANSOPTOR SZCZELINOWY z testowaniem flag: C, Z, V, T **** ; **** zastosuj polecenie Step Into/Continue w trakcie pierwszego debuggowania .include "m32def.inc" ; plik nagłówkowy ; ZESTAW PODLACZEN: ; PA4 = D0 (JP22) ; PA5 = D1 (JP22) ; PA6 = D2 (JP22) ; PA7 = D3 (JP22) ; PB4 = W1 (JP23) ; PB5 = W2 (JP23) ; PB6 = W3 (JP23) ; PB7 = W4 (JP23) ; PD3 = przewod zolty TRANSOPTOR ; VCC = przewod czerwony TRANSOPTOR w ZASILANIE VCC + ; GND = przewod granatowy TRANSOPTOR w ZASILANIE GND - ; definicje stalych w programie .equ flagaZ = 0b1111_0000 .equ flagaZ1 = 0b0001_0000 .equ flagaZ2 = 0b0010_0000 .equ PD3_test = 0b1111_0111 .equ transoptor = 0b0000_0001 .equ transoptor_LV = 0b1111_0111 .org 0x0000 .cseg ; **** ustalenie kierunku pracy portow I/O **** I_O: ldi R16, 0xFF out DDRA, R16 ; port A ustawiony w tryb wyjściowy DIODY ldi R16, 0x0F out DDRB, R16 ; mlodsza czesc B w tryb wyjsciowy, starsza z pull-up ldi R16, 0xF0 out PORTB, R16 ; pull-up na odczyt klawiszy W1-W4 w starszej czesci portu ldi R17, PD3_test out PORTD, R17 ; w porcie D PD3 wejsciowy, reszta piny wyjsciowe ; test zabezpieczenia z zastosowaniem TRANSOPTORA PROTECTION: ; petla zabezpieczenia komory roboczej urzadzenia out PORTA, R16 ; sygnalizacja stanu urzadzenia ;[*][*][*][*] brak zamkniecia komory roboczej, ;[ ][*][*][*] komora zamknieta - URUCHOMIONE ZASILANIE, LV 1, WYBIERZ TRYB PRACY ;[ ][ ][*][*] LV2 - uruchomienie napedu (kierunek 1) ;[ ][ ][ ][*] LV2 - uruchomienie napedu (kierunek 2) ;[ ][*][*][ ] LV3 - sekwencja nr 1 napedu (dla kierunek 1) ;[*][ ][ ][*] LV3 - sekwencja nr 2 napedu (dla kierunek 1) ; WYJSCIE Z LV1-3 ZA POMOCA PRZYCISKU ********RESET******** ldi R18, transoptor ; stala 1 do testowania zamkniecia komory (transoptor) in R8, PIND ; kopia rejestru PIND nop add R8, R18 ; test zamkniecia do warunku wyjscia z petli (URUCHOMIENIE ZASILANIA) nop brcs test_LV1 ; instrukcja testujaca flage C rjmp PROTECTION ; ponizej uruchomienie urzadzenia ; wejscie mozliwe jedynie przez sygnal potwierdzajacy zamkniecie komory z TRANSOPTORA ; BRAK SYGNALU Z TRANSOPTORA = NATYCHMIASTOWE WYLACZENIE URZADZENIA TEST_LV1: in R18, PIND ; kopia rejestru PIND nop cpi R18, transoptor_LV ; porowanie ze stala breq PROTECTION ; jesli komora nie zostala otwarta to jedziemy dalej ldi R20, 0b1110_0000 ; [ ][*][*][*] komora zamknieta - URUCHOMIONE ZASILANIE, LV 1, WYBIERZ TRYB PRACY out PortA, R20 nop ldi R20, flagaZ ; stala do odejmowania in R19, PINB ; jesli jest wcisniety W1 (S1) to wybrano TRYB nr1 nop ; jesli jest wcisniety W2 (S5) to wybrano TRYB nr2 mov R9, R19 ; kopia R19 do R9 dla dalszych testow wcisnietych switchow sub R20, R19 ; odejmowanie i aktywacja flag SREG nop cpi R20, flagaZ1 ; porownanie ze stala i aktywacja flag SREG nop breq TEST_LV2A ; instrukcja branch - jesli rowne 0 to skok na wyzszy level 2A nop ldi R20, flagaZ ; przywracanie stalej do odejmowania nop sub R20, R9 ; odejmowanie i aktywacja flag SREG nop cpi R20, flagaZ2 ; porownanie ze stala i aktywacja flag SREG nop breq TEST_LV2B ; instrukcja branch - jesli rowne 0 to skok na wyzszy level 2B nop rjmp TEST_LV1 ; koniec programu glownego na level 1 ; **** ; **** WCHODZIMY NA LEVEL 2 TEST_LV2A: in R18, PIND ; kopia rejestru PIND nop cpi R18, transoptor_LV ; jesli komora nie zostala otwarta to jedziemy dalej breq PROTECTION ldi R20, 0b1100_0000 ; [ ][ ][*][*] LV2 - uruchomienie napedu (kierunek 1) out PortA, R20 nop ldi R22, 0b0010_1111 in R19, PINB ; jesli jest wcisniety W3 (S9) to wybrano SEKWENCJE nr1 nop ; jesli jest wcisniety W4 (S13) to wybrano SEKWENCJE nr2 bst R19, PB6 ; kopia stanu PB6 (S9) w R19 do flagi T w SREG nop add R19, R22 nop brtc TEST_LV3A1 ; test flagi T w SREG: byl wcisniety W3 (S9) SEKWENCJA nr1 na LV3 brvs TEST_LV3A2 ; test flagi V w SREG: byl wcisniety W4 (S13) SEKWENCJA nr2 na LV3 nop rjmp TEST_LV2A ; **** pocztek TRYB 2 TEST_LV2B: in R18, PIND nop cpi R18, transoptor_LV ; test BEZPIECZENSTWA, jesli komora nie zostala otwarta to jedziemy dalej breq PROTECTION ldi R20, 0b1000_0000 ; [ ][ ][ ][*] LV2 - uruchomienie napedu (kierunek 2) out PortA, R20 nop rjmp TEST_LV2B ; ; POCZATEK SEKWENCJI 1 na LEVEL 3 TEST_LV3A1: ldi R20, 0b0110_0000 ; [ ][*][*][ ] LV3 - sekwencja nr 1 napedu (dla kierunek 1) out PortA, R20 ; wprowadz procedure powtoru do petli TEST_LV1 rjmp TEST_LV3A1 ; ; POCZATEK SEKWENCJI 2 naLEVEL 3 TEST_LV3A2: ldi R20, 0b1001_0000 ; [*][ ][ ][*] LV3 - sekwencja nr 2 napedu (dla kierunek 1) out PortA, R20 ; wprowadz procedure powtoru do petli TEST_LV1 rjmp TEST_LV3A2 ; WYJSCIE Z LV1-3 ZA POMOCA PRZYCISKU RESET ; **** KONIEC ****