Komunikacja w mikrokontrolerach Podstawy programowania Wydział Elektroniki Mikrosystemów i Fotoniki dr inż. Piotr Markowski Na prawach rękopisu. Na podstawie dokumentacji ATmega8535, www.atmel.com.
AVR GCC AVR-GCC - kompilator języka C dla mikrokontrolerów serii AVR firmy ATMEL Dołączony do darmowego środowiska AVR Studio Umożliwia tworzenie projektów w C/C++ Licencja GNU Biblioteki dołączamy instrukcją #include
Biblioteki
Biblioteki <avr/io.h> - definicje rejestrów i bitów I/O (kompilator automatycznie dołącza właściwe dla wybranego MCU) <util/delay.h> - funkcje opóźnienia <avr/interrupt.h> - funkcje obsługi przerwań <avr/sleep.h> - funkcje zarządzania stanami uśpienia <ctype.h> - operacje na znakach <math.h> - funkcje matematyczne <string.h> - funkcje operujące na łańcuchach <stdlib.h> - funkcje standardowe <avr/eeprom.h> - funkcje dostępu do wewnętrznej pamięci EEPROM <avr/wdt.h> - funkcje obsługi Watchdoga <util/twi.h> - funkcje obsługi interfejsu TWI <alloca.h> - alokacja pamięci stosu <stdint.h> - definicje standardowych typów całkowitych
Biblioteki <assert.h> - diagnostyka <errno.h> - obsługa błędów <inttypes.h> - konwersje typów całkowitych <setjmp.h> - długie skoki <stdio.h> - standardowa biblioteka wejścia/wyjścia <avr/boot.h> - narzędzia wspierające funkcje bootloadera <avr/pgmspace.h> - funkcje dostępu do pamięci programu <avr/power.h> - funkcje zarządzania energią <avr/sfr_defs.h> - funkcje operujące na rejestrach funkcyjnych <avr/version.h> - marka wersji <util/crc16.h> - obliczanie sum CRC <util/delay_basic.h> - funkcje podstawowych opóźnień <util/parity.h> - generowanie bitu parzystości <compat/deprecated.h>- informacje o starszych funkcjach <compat/ina90.h> - funkcje kompatybilności z IAR EWB 3.x
<avr/io.h> Podstawowa biblioteka programów AVR GCC Definicje rejestrów i bitów dla wybranego MCU Zdefiniowane stałe właściwe dla danego MCU, np.: RAMEND adres ostatniej komórki pamięci RAM FLASHEND adres ostatniej komórki pamięci FLASH EEPROM E2END adres ostatniej komórki dodatkowej pamięci EEPROM
<util/delay.h> Zawiera funkcje opóźnień: _delay_ms() opóźnienie w ms _delay_us() opóźnienie w us Wymaga wcześniejszego zdefiniowania stałej F_CPU, np.: #define F_CPU 1000000L #include <util/delay.h>
<avr/interrupt.h> Zawiera funkcje obsługi przerwań: sei () globalne odblokowanie przerwań cli () globalne zablokowanie przerwań ISR (<vector>) funkcja obsługi przerwania Przerwania muszą zostać Konkretne przerwanie musi zostać CPU przejdzie do podprogramu
<vector>=... TIMER0_COMP_vect TIMER0_OVF_vect TIMER1_COMPA_vect TIMER1_COMPB_vect TIMER1_OVF_vect TIMER1_CAPT_vect TIMER2_COMP_vect TIMER2_OVF_vect INT0_vect INT1_vect SPI_STC_vect TWI_vect USART_RX_vect USART_TX_vect USART_UDRE_vect ADC_vect ANA_COMP_vect EE_RDY_vect SPM_RDY_vect INT2_vect
<avr/sleep.h> Zawiera funkcje obsługi stanów uśpienia: set_sleep_mode(<mode>) wybór stanu uśpienia sleep_mode() wejście w stan uśpienia <mode>: SLEEP_MODE_IDLE SLEEP_MODE_ADC SLEEP_MODE_PWR_ DOWN SLEEP_MODE_PWR_ SAVE
<ctype.h> Zawiera m.in. funkcje: spr. czy dana jest znakiem ASCII spr. czy dana jest znakiem alfanumerycznym spr. czy dana to spacja lub TAB konwersja danej do znaku ASCII zmiana wielkości litery
<math.h> Zawiera m.in. funkcje: sin cos arcsin zaokrąglanie liczby potęga pierwiastek
<stdlib.h> Zawiera m.in. funkcje: wartość bezwzględna sortowanie liczba pseudolosowa wyszukiwanie
Operacje bitowe
OR & AND ^ XOR << przesunięcie bitowe w L >> przesunięcie bitowe w P ~ negacja PORTA = 0xF0 => PORTA &= 0xF0 => PORTA ^= 0xF0 => PORTB >>= 2 => PORTB = (1<<3) (1<<5) (1<<7) => PORTB = (1<<3) (1<<5) (1<<7) => PORTC = 0b00011000 =>
Pętle warunkowe
IF(rejestr & maska) if(tccr0 & 0x08) => if(!(pina & 0x20)) => (zał.: przycisk na PA5, pull-up) WHILE(rejestr & maska) while(pina & 0x08) { } => (zał.: przycisk na PA3, pull-up) while(!(spsr & SPIF)) { } => (oczekiwanie na koniec transmisji SPI)