Piotr Kalus PWSZ Racibórz 10.05.2008 r. Opis procedur asemblera AVR init_lcd Plik: lcd4pro.hvr Procedura inicjuje pracę alfanumerycznego wyświetlacza LCD za sterownikiem HD44780. Wyświetlacz działa w trybie 4-bitowym bez odczytu (r/w=0). Połączenia: D4 >PC2, D5 >PC3, D6 >PC4, D7 >PC5, rs >PC6, e >PC7. init_lcd wywołaj procedurę inicjującą LCD Wykorzystane rejestry: r16, r17, r24, r30, r31 Plik: lcd4pro.hvr Dane wejściowe: r24 Dane wyjściowe: ---- Wpisuje do sterownika wyświetlacza LCD komendę. Procedura najczęściej używana do ustawienia pozycji kursowa na LCD. r24,line1 ustawia kursor w pierwszej linii LCD Wykorzystane rejestry: r24 r24,line2+4 ustawia kursor w linii drugiej, w 4-tej kolumnie Opracował: Piotr Kalus, PWSZ Racibórz -1- Opis procedur asemblera AVR
wr_data Plik: lcd4pro.hvr Dane wejściowe: r24 Dane wyjściowe: ---- znak do wyświetlenia Wypisuje na wyświetlaczu LCD znak ASCII. Znak wypisuje w miejscu kursora. r24,65 wr_data r24,'b' wr_data Wykorzystane rejestry: r24 wypisz dużą literę A (kod ascii A=65) wypisz dużą literę B wyp_text Plik: lcd4pro.hvr Dane wejściowe: Z Wypisuje na wyświetlaczu LCD łańcuch znaków umieszczonych w pamięci programu FLASH zakończonych liczbą 0. W rejestrze Z (r31,r30) powinien znajdować się adres łańcucha. Tekst będzie wypisywany w miejscu kursora na wyświetlaczu LCD. ldz tekst1*2 wyp_text zapisz do rej. Z adres łańcucha wypisz tekst tekst1:.db Witaj student!,0 Wykorzystane rejestry: r24, r30, r31 Opracował: Piotr Kalus, PWSZ Racibórz -2- Opis procedur asemblera AVR
wyp_hex Plik: lcd4pro.hvr Dane wejściowe: r24 Dane wyjściowe: ---- liczba do wyświetlenia Wypisuje na wyświetlaczu LCD zawartość rejestru r24 w postaci szesnastkowej. Rejestr wypisuje w miejscu kursora. r24,165 wyp_hex liczba 165 wyświetli A5 (=165) Wykorzystane rejestry: r24 ld_znaki Plik: lcdznaki.hvr Ładuje do pamięci wyświetlacza LCD czcionki 8-miu programowalnych znaków. Znaki dostępne są jako kody ASCII od 8 do 15. ld_znaki załaduj 8 znaków do LCD Wykorzystane rejestry: r24, r17 Opracował: Piotr Kalus, PWSZ Racibórz -3- Opis procedur asemblera AVR
bin8bcd Plik: bin8bcd.hvr Dane wejściowe: r16 Dane wyjściowe: r15, r14, r13 liczba do zamiany na kod BCD setki, dziesiątki, jednostki Zamienia liczbę 8-bitową zawartą w rejestrze r16 na kod BCD. Wynik działania zapisywany jest w rejestrach: r5 setki, r6 dziesiątki, r7 jednostki. r16,239 bin8bcd Wykorzystane rejestry: r16, r15, r14, r13 wpisz liczbę do zamiany na BCD wywołaj procedurę zamiany na BCD r15=2, r14=3, r13=9 wyp_8b Plik: bin8bcd.hvr Dane wejściowe: r16 Wypisuje na wyświetlaczu LCD w postaci dziesiętnej liczbę 8-bitową zawartą w rejestrze r16. Wcześniej powinien być ustawiony kursor LCD w miejscu, gdzie ma być wyświetlona liczba. Procedura wykorzystuje bin8bcd, lecz nie niszczy zawartości rejestrów r15, r14, r13. r24,line1 r16,178 wyp_8b Wykorzystane rejestry: r16, r24 ustawia kursor w pierwszej linii LCD zapisz jako instrukcję dla LCD wpisz liczbę do wyświetlenia na LCD wyświetl tę liczbę Opracował: Piotr Kalus, PWSZ Racibórz -4- Opis procedur asemblera AVR
bin16bcd Plik: bin16bcd.hvr Dane wejściowe: r17,r16 Dane wyjściowe: r15, r14, r13 liczba 16-bitowa (r17 bity starsze, r16 bity młodsze) liczba BCD spakowana Zamienia liczbę 16-bitową zawartą w rejestrze r17 i r16 na spakowany kod BCD. Wynik działania zapisywany jest w rejestrach: r15 dziesiątki tysięcy, r14 tysiące i setki, r13 dziesiątki i jednostki. r16,41239 bin8bcd Wykorzystane rejestry: r16, r15, r14, r13 wpisz liczbę do zamiany na BCD wywołaj procedurę zamiany na BCD r15=00000100, r14=00010010, r13=00111001 wyp_16b Plik: bin16bcd.hvr Dane wejściowe: r17,r16 liczba 16-bitowa (r17 bity starsze, r16 bity młodsze) Wypisuje na wyświetlaczu LCD w postaci dziesiętnej liczbę 16-bitową. Wcześniej powinien być ustawiony kursor LCD w miejscu, gdzie ma być wyświetlona liczba. Procedura wykorzystuje bin16bcd, lecz nie niszczy zawartości rejestrów r15, r14, r13. r24,line1 r16,low(35178) r17,high(35178) wyp_16b Wykorzystane rejestry: r16, r17, r24 ustawia kursor w pierwszej linii LCD zapisz jako instrukcję dla LCD wpisz liczbę do wyświetlenia na LCD wyświetli 35178 Opracował: Piotr Kalus, PWSZ Racibórz -5- Opis procedur asemblera AVR
bin24bcd Plik: bin24bcd.hvr Dane wejściowe: r18, r17, r16 Dane wyjściowe: r15, r14, r13, r12 liczba 24-bitowa do zamiany na BCD liczba spakowana BCD Zamienia liczbę 8-bitową zawartą w rejestrze r16 na kod BCD. Wynik działania zapisywany jest w rejestrach: r15 dziesiątki milionów i miliony, r14 setki tysięcy i dziesiątki tysięcy, r13 tysiące i setki, r12 dziesiątki i jednostki. r16,$af r17,$29 r18,$e0 bin24bcd Wykorzystane rejestry: r16, r17, r18, r15, r14, r13, r12 wpisz liczbę do zamiany na BCD E029AF = 14690735 wywołaj procedurę zamiany na BCD r15=00010100, r14=01101001, r13=00000111, r12=00110101 wyp_24b Plik: bin24bcd.hvr Dane wejściowe: r18, r17, r16 liczba 24-bitowa do wypisania na LCD Wypisuje na wyświetlaczu LCD liczbę 24-bitową w postaci dziesiętnej. Wcześniej powinien być ustawiony kursor LCD w miejscu, gdzie ma być wyświetlona liczba. Procedura wykorzystuje bin24bcd, lecz nie niszczy zawartości rejestrów r15, r14, r13, r12. r16,$af r17,$29 r18,$e0 wyp_24b Wykorzystane rejestry: r16, r24 wpisz liczbę do zamiany na BCD E029AF = 14690735 wyświetli liczbę 14690735 Opracował: Piotr Kalus, PWSZ Racibórz -6- Opis procedur asemblera AVR
init_i2c Plik: i2c_pc01.hvr Inicjuje programowy interfejs i2c. init_i2c zainicjuj interfejs i2c Wykorzystane rejestry: rd_i2c Plik: i2c_pc01.hvr Dane wejściowe: i2csub (r17) Dane wyjściowe: i2cdata (r16) subadres komórki układu i2c zawartość tej komórki Procedura odczytuje zawartość komórki o adresie wpisanym do rejestru subadres układu i2c, którego adres zawarty jest w pamięci SRAM AVR pod nazwą adr_i2c. I2csub i i2cdata są predefiniowanymi nazwami rejestrów r17 i r16 i można je używać zamiennie. Uwaga! Jeżeli w systemie występuje tylko jeden układ i2c (np. DS1307), jego adres ($D0) należy tylko raz wpisać do komórki adr_i2c i nie ma potrzeby wpisywania go przed każdym wywołaniem procedury. sts r16,$d0 adr_i2c,r16 r17,5 rd_i2c wpisz adres układu ($d0 adres DS1307) zapamiętaj w SRAM subadres =5 komórki układu i2c odczytaj i zapisz zawartość w r16 (i2cdata) Wykorzystane rejestry: r16, r17, r18 Opracował: Piotr Kalus, PWSZ Racibórz -7- Opis procedur asemblera AVR
wr_i2c Plik: i2c_pc01.hvr Dane wejściowe: i2csub (r17), i2cdata (r16) subadres komórki układu i2c i dana do zapisania Procedura zapisuje zawartość rejestru r16 do komórki o adresie wpisanym do rejestru subadres układu i2c. Adres układu powinien być wpisany w pamięci SRAM AVR pod nazwą adr_i2c. I2csub i i2cdata są predefiniowanymi nazwami rejestrów r17 i r16 i można je używać zamiennie. Uwaga! Jeżeli w systemie występuje tylko jeden układ i2c (np. DS1307), jego adres ($D0) należy tylko raz wpisać do komórki adr_i2c i nie ma potrzeby wpisywania go przed każdym wywołaniem procedury. i2cdata,100 i2csub,5 wr_i2c dana do zapisania (w rej. r16) subadres =5 pod który będzie wpisana (w rej. r17) wpisz do układu i2c Wykorzystane rejestry: r16, r17, r18 rd_czas Plik: ds1307.hvr Dane wyjściowe: sek, min, godz, dz_tyg, dzien, mies, rok. Procedura odczytuje zegar i kalendarz układu DS1307 i zapisuje w pamięci SRAM AVR w komórkach o nazwach: sek, min, godz, dz_tyg, dzien, mies, rok. Nazwy komórek powinny być zarezerwowane w segmencie dseg programu głównego. Procedura zapisuje czas zamieniony na postać binarną. Uwaga! Jeżeli w systemie występuje tylko jeden układ i2c (np. DS1307), jego adres ($D0) należy tylko raz wpisać do komórki adr_i2c i nie ma potrzeby wpisywania go przed każdym wywołaniem procedury. sts r16,$d0 adr_i2c,r16 rd_i2c wpisz adres układu ($d0 adres DS1307) zapamiętaj w SRAM odczytaj czas i datę i zapisz w komórkach SRAM Wykorzystane rejestry: r16, r17, r18 Opracował: Piotr Kalus, PWSZ Racibórz -8- Opis procedur asemblera AVR
wyp_rtc Plik: ds1307.hvr Procedura wypisuje na wyświetlaczu LCD czas w postaci: godziny:minuty:sekundy. Procedura pobiera dane z komórek pamięci: godz, min, sek. Pozycja kursora powinna być ustawiona przed wywołaniem procedury. r24,line1 wyp_rtc ustaw kursor na wyświetlaczu LCD wypisuje czas np.: 18:25:58 Wykorzystane rejestry: r16, r24 wyp_rtc2 Plik: ds1307.hvr Procedura wypisuje na wyświetlaczu LCD czas w postaci: dzień tygodnia godziny:minuty:sekundy. Procedura pobiera dane z komórek pamięci: dz_tyg, godz, min, sek. Pozycja kursora powinna być ustawiona przed wywołaniem procedury. r24,line1 wyp_rtc2 ustaw kursor na wyświetlaczu LCD wypisuje czas np.: Pn 18:25:58 Wykorzystane rejestry: r16, r24 Opracował: Piotr Kalus, PWSZ Racibórz -9- Opis procedur asemblera AVR
wyp_date Plik: ds1307.hvr Procedura wypisuje na wyświetlaczu LCD datę w postaci: dzień/miesiąc/rok. Procedura pobiera dane z komórek pamięci: dzien, mies, rok. Pozycja kursora powinna być ustawiona przed wywołaniem procedury. r24,line1 wyp_date ustaw kursor na wyświetlaczu LCD wypisuje datę np.: 21/04/2008 Wykorzystane rejestry: r16, r24 wyp_date2 Plik: ds1307.hvr Procedura wypisuje na wyświetlaczu LCD datę w postaci: dzień tygodnia dzień/miesiąc/rok. Procedura pobiera dane z komórek pamięci: dz_tyg, dzien, mies, rok. Pozycja kursora powinna być ustawiona przed wywołaniem procedury. r24,line1 wyp_date2 ustaw kursor na wyświetlaczu LCD wypisuje datę np.: Pn 21/04/2008 Wykorzystane rejestry: r16, r24 Opracował: Piotr Kalus, PWSZ Racibórz -10- Opis procedur asemblera AVR
rtc Plik: ds1307.hvr Procedura zegara czasu rzeczywistego. Powinna być wywoływana raz na sekundę zwiększa sekundy, sprawdza czy nie są równe 60. Jeżeli tak, to zeruje sekundy i zwiększa minuty itd. Procedura wykonuje te operacje na komórkach pamięci: dz_tyg, godz, min, sek. rtc wywołaj procedurę, zwiększ sekundy itd. Wykorzystane rejestry: r16 bin7seg Plik: wysw7seg.hvr Dane wejściowe: r16 Dane wyjściowe: r16 cyfra do zamiany kod wskaźnika 7-segmentowego Procedura zamienia wartość binarną na kod wskaźnika 7-segmentowego wspólna anoda. Segmenty wskaźnika: najmłodszy bit segment a, najstarszy - h (dp). Procedura wyświetla również cyfry kodu szesnastkowego A-F (10-15). r16,1 bin7seg cyfra 1 rejestr r16=11111001 (hgfedcba) świeci b i c Wykorzystane rejestry: r16 Opracował: Piotr Kalus, PWSZ Racibórz -11- Opis procedur asemblera AVR
rd_temp Plik: przetw_ac.hvr Dane wejściowe: r16 Dane wyjściowe: r17, r16 numer kanału 0-7 (PA0-PA7) temperatura (wart. całkowita, 2 bity po przecinku) Procedura odczytuje wartość temperatury na czujniku LM35. Wynik całkowitych stopni Celsjusza zawarty jest w r17, natomiast w r16 jest wartość dwóch bitów po przecinku. Uwaga! Przed pomiarem odpowiednia końcówka PA powinna być ustawiona jako wejście w stanie wysokiej impedancji. r16,0 rd_temp czujnik LM35 podłączony do PA0 odczytaj temperaturę Wykorzystane rejestry: r16, r17 wyp_temp Plik: przetw_ac.hvr Dane wejściowe: r17, r16 wynik pomiaru temperatury (rd_temp) Procedura wyświetla na wyświetlaczu LCD temperaturę czujnika LM35 z dokładnością do 0,5 C. Pozycja kursora powinna być ustawiona przed wywołaniem procedury. Procedura wykorzystuje procedury z pliku bin8bcd.hvr r16,0 rd_temp wyp_temp czujnik LM35 podłączony do PA0 odczytaj temperaturę wyświetli temperaturę np.: 26,5 C Wykorzystane rejestry: r16, r17, r24 Opracował: Piotr Kalus, PWSZ Racibórz -12- Opis procedur asemblera AVR
init_rs Plik: usart.hvr Procedura inicjalizuje układ transmisji szeregowej USART. Parametry: tryb asynchroniczny, prędkość 19200 [bit/sek] (dla Focs=16MHz), 8 bitów danych, bez bitu parzystości 1 bit stopu, nadajnik działa bez przerwań a odbiornik generuje przerwania po odebraniu bajtu. Procedura wyłącza przerwania i należy je włączyć po inicjalizacji. init_rs USART gotowy do pracy Wykorzystane rejestry: r16 send_char Plik: usart.hvr Dane wejściowe: r16 Dane wyjściowe: bajt do wysłania przez port szeregowy Procedura wysyła jeden bajt zawarty w rejestrze r16 przez port szeregowy USART. r16,'a' send_char wyślij kod ascii litery 'A' przez USART Wykorzystane rejestry: r16 Opracował: Piotr Kalus, PWSZ Racibórz -13- Opis procedur asemblera AVR
send_str Plik: usart.hvr Dane wejściowe: Z Dane wyjściowe: Z wskazuje łańcuch do wysłania Procedura wysyła łańcuch zakończony znakiem 0 (null) przez USART. Przed wywołaniem adres łańcucha musi być załadowany do rejestru Z. ldz tekst1*2 send_str załaduj adres łańcucha do rejestru Z wyślij przez port szeregowy tekst1:.db Witaj student!,0 Wykorzystane rejestry: r16, Z send_char Plik: usart.hvr Dane wejściowe: r16 bajt do wysłania przez port szeregowy Procedura wysyła jeden bajt zawarty w rejestrze r16 przez port szeregowy USART. r16,'a' send_char wyślij kod ascii litery 'A' przez USART Wykorzystane rejestry: r16, r17, r24 Opracował: Piotr Kalus, PWSZ Racibórz -14- Opis procedur asemblera AVR