PTM materiały 3


2014-12-04
Budowa portów mikrokontrolerów AVR
Podstawy techniki
mikroprocesorowej
Część 3. Porty mikrokontrolera.
Operacje wejścia-wyjścia.
Procedury opóznienia.
dr inż. Marcin Pawlak
Kontakt:
Pokój 320 bud. A10
Tel. 320 3253
marcin.pawlak@pwr.wroc.pl
Rejestry związane z portami I/O Port jako wyjście
Rejestry sterujące pracą portów umieszczone są w najniższej
przestrzeni adresowej wejścia-wyjścia (0x00-0x1F)
Wyjście portu odłączone
Wyjście portu: PORTx (np. PORTA, PORTD...)
+5V
Wejście portu: PINx (np. PINA, PINC...)
Kierunek portu: DDRx (np. DDRB, DDRD...)
OFF
Px
Możliwe ustawienia n-tej linii wejścia-wyjścia portu x-tego:
układ
sterujący
PORTxn DDRxn PUD Kierunek portu Komentarz
OFF
0 0 X wejście stan wysokiej impedancji
GND
1 0 1 wejście stan wysokiej impedancji
1 0 0 wejście wewnętrzne podciąganie do zasilania (20...50kW)
0 1 X wyjście wyjście w stanie L
DDRx = 0, PORTx = 0
1 1 X wyjście wyjście w stanie H
Port jako wyjście Port jako wyjście
Wyjście portu w stanie  H Wyjście portu w stanie  L
+5V +5V
ON OFF
Px Px
układ układ
sterujący sterujący
OFF ON
GND GND
DDRx = 1, PORTx = 1 DDRx = 1, PORTx = 0
1
2014-12-04
Port jako wejście Port jako wejście
Zewnętrzny rezystor podciągający Wewnętrzny rezystor podciągający
+5V +5V
PORTx = 0 PORTx = 1
Rw Rw
OFF Rz ON
Px Px
GND GND
DDRx = 0, PORTx = 0 DDRx = 0, PORTx = 1
PINx = 0  Przycisk zwarty PINx = 0  Przycisk zwarty
PINx = 1  Przycisk rozwarty PINx = 1  Przycisk rozwarty
Wybrane instrukcje sterowania portami Przykładowa konfiguracja portów I/O
PORTA = 0x00;
PORTA = 0b10101010;
GND
PORTA |= 0x0F; // OR
PORTA &= 0b01111110; // AND
7 6 5 4 3 2 1 0
PORTA ^= 0x01; // XOR
PORTB
PORTA &= ~1; // AND (~1 = 0b11111110)
PORTA
PORTA = (1 << 3) | (1 << 5); // 0b00101000
7 6 5 4 3 2 1 0
PORTA = _BV(1); // makro Bit Value
unsigned char a = 1;
PORTA = a;
+5V
a <<= 1;
PORTA = a;
Program #1  sterowanie portów Program #2  sterowanie portów
#include
#include
int main(void)
{
int main(void)
DDRA = 0xFF; //Port A jako wyjście
{
PORTA = 0xFF; //Wszystkie diody zgaszone
DDRA = 0xFF; //Port A jako wyjście
DDRB = 0x00; //PORTB jako wejście
PORTB = 0xFF; //Pull-UP na PORTB
DDRB = 0x00; //PORTB jako wejście
PORTB = 0xFF; //Pull-UP na PORTB
while (1)
{
while (1)
if (PINB == 0b11111110) PORTA = 0xFC;
{
PORTA = PINB; if (PINB == 0b11111101) PORTA = 0xF3;
if (PINB == 0b11111011) PORTA = 0xF0;
}
}
}
}
2
2014-12-04
Program #3  sterowanie portów PORTA jako wejście / wyjście
DDRA = 0x0F; //
PORTA = 0xFF; //
DDRA = 0b00001111
PORTA
while (1)
7 6 5 4 3 2 1 0
{
PORTA = 0b11111111
if ((PINA & 0b00010000)==0)
{
PORTA |= 0b00001010
PORTA &= 0b11110011;
+5V
PORTA |= 0b00000011;
PORTA &= 0b11111010
}
GND
if ((PINA & 0b00100000)==0)
{
if ((PINA & 0b00010000) == 0)...
PORTA &= 0b11111100;
PORTA |= 0b00001100;
lub:
}
if (!(PINA & 0b00010000)) ...
}
Procedury opóznienia Program #3  wykorzystanie opóznień
W bibliotece avr-libc dostępne są podstawowe funkcje
#define F_CPU 16000000L
opóznienia, zawarte w pliku  util / delay.h :
#include
#include
" _delay_us ( double _us )  opóznienie o _us;
" _delay_ms ( double _ms )  opóznienie o _ms.
int main(void)
{
DDRA = 0xFF; //port A jako wyjście
Korzystając z funkcji opóznienia należy przestrzegać poniższych
zasad:
while (1)
{
" Należy zdefiniować stałą F_CPU
PORTA = 0x0F;
_delay_ms(300); //opóznienie 300ms
( np. #define F_CPU = 16 000 000 )
PORTA = 0xF0;
_delay_ms(1000); //opóznienie 1s
" Należy włączyć optymalizację kompilatora (-Os)
}
" Jako parametr wejściowy funkcji należy stosować stałe }
wartości, znane podczas kompilacji (nie zmienne)
Zadania do realizacji Zadanie końcowe
Opracować program realizujący funkcję licznika dwukierunkowego, o
Wykorzystując konstrukcję pętli  for oraz funkcji opóznień
zakresie zliczania 0...8.
napisać następujące programy:
Program powinien umożliwiać sterowanie pracą licznika za pomocą
1. 1 dioda zapalona, przesuwa się w lewo: trzech przycisków (UP, DOWN, RESET).
00000001, 00000010, 00000100 & 01000000, 10000000, 00000001 &
Stan licznika powinien być prezentowany za pomocą linijki diodowej:
2. Dioda przesuwa się cyklicznie lewo-prawo-lewo&
0: 0 0 0 0 0 0 0 0
00000001, 00000010 & 01000000, 10000000, 01000000, 00100000 &
1: 0 0 0 0 0 0 0 1
2: 0 0 0 0 0 0 1 1
3. Wąż świetlny
00000001, 00000011, 00000111 & 01111111, 11111111, 11111110, 11111100 &
....
7: 0 1 1 1 1 1 1 1
4. Przycisk włącza i wyłącza mruganie diod
8: 1 1 1 1 1 1 1 1
5. Napisać program dla 4 przycisków, dowolne reakcje diod
gdzie 0  dioda wygaszona, 1  dioda zapalona.
3


Wyszukiwarka

Podobne podstrony:
PTM materiały 5
PTM materiały 2
PTM materiały 4
PTM materiały 6
PTM materiały 1
CHEMIA materiały dodatkowe
Analiza samobójstw w materiale sekcyjnym Zakładu Medycyny Sądowej AMB w latach 1990 2003
1 Materiały tymczasowe
Materiały pomocnicze Krzysztof Żywicki
MaterialyWyklad6,7Geologia
materials
notatek pl dr in Jaros aw Chmiel, Nauka o materia ?h, Przemiany podczas odpuszczania
Nauka o materiałach 2 VI
12 Wykonywanie sterylizacji instrumentów, materiałów
exams materials?emstr tb05
material

więcej podobnych podstron