AVR Vstupy a výstupy v C: Rozdiel medzi revíziami
Z SensorWiki
(Nová stránka: Category:AVRCategory:CAD_RS) |
|||
Riadok 1: | Riadok 1: | ||
+ | == Vstupy a výstupy na MiniMEXLE doske. == | ||
+ | |||
+ | |||
+ | Obvykle sa pri programovaní jednočipových mikropočítačov začína programom | ||
+ | na ovládanie jedného vstupu a výstupu, napr. tlačítko a LED. Je to taký | ||
+ | "Hello, World!" program pre vnorené systémy. | ||
+ | |||
+ | |||
+ | Na doske MiniMEXLE máme dve LED diódy a štryi tlačítka. | ||
+ | |||
+ | [[Image:MiniMexleIO.png|center|thumb|350px|Connection of the LED and pushbutton on the MiniMEXLE board.]] | ||
+ | |||
+ | Tlačítka S1 až S4 sú pripojené k pinom PC0 až PC3 a sú aktívne v nule, žltá LED je pripojená k PB2 a je tiež aktívna v nule (t.j. LED svieti, keď je na výstupe log. 0). Druhá, červená LED dióda je aktívna v jednotke a je pripojená na pin PC5. | ||
+ | |||
+ | |||
+ | Nasledovný C-program demonštruje možnosti prístupu k binárnym vstupom a výstupom | ||
+ | rôznymi prostriedkami jazyka avr-gcc. | ||
+ | |||
+ | <source lang="c"> | ||
+ | /* ************************************************************************** */ | ||
+ | /* */ | ||
+ | /* Monoliticke mikropocitace - Priklad 1.1 */ | ||
+ | /* */ | ||
+ | /* Program zasvieti/zhasne LED na PB2 podla stavu prepinaca na PC0 */ | ||
+ | /* */ | ||
+ | /* Autor: Richard Balogh <balogh@elf.stuba.sk> */ | ||
+ | /* Historia: */ | ||
+ | /* 19.02.2006 prva pokusna verzia */ | ||
+ | /* 05.11.2008 uprava pre MiniMEXLE na cviko ZSAR */ | ||
+ | /* Prenositelnost: */ | ||
+ | /* */ | ||
+ | /* ************************************************************************** */ | ||
+ | |||
+ | #include <avr\io.h> // spolu s -mmcu=atmega88 nahra spravny .h subor | ||
+ | // ktory potrebujeme kvoli PORTx, PINx a DDRx | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | |||
+ | /* ***************** Initialization ************************ */ | ||
+ | |||
+ | /* Port settings for LED *********************************** */ | ||
+ | |||
+ | DDRB = 0b00000100; // bin: 0000 0100 1 = out, 0 = in | ||
+ | PORTB = 0xFF; // bin: 1111 1111 1 = LED off | ||
+ | |||
+ | /* Port settings for Switch ******************************** */ | ||
+ | |||
+ | DDRC = 0b00000000; // bin: 0000 0000 1 = out, 0 = in | ||
+ | PORTC = 0xFF; // bin: 1111 1111 1 = pull-up active | ||
+ | |||
+ | |||
+ | |||
+ | /* ***************** Main Endless Loop ********************** */ | ||
+ | |||
+ | |||
+ | while (1) { // toto rob stale dokola | ||
+ | |||
+ | if (PINC & 0b00000001) // bin: PINC & 0000 0001 = sw1 OFF? | ||
+ | PORTB = 0x04; // Lepsie takto | ||
+ | // PORTB |= 0xff; // bin PORTD + 0010 0000 = nastav PD5, LED OFF | ||
+ | else // t.j. ak sw1 ON: | ||
+ | // PORTD &= 0xff; // bin: PORTD & 1101 1111 = vynuluj PD5, LED ON | ||
+ | PORTB = 0x00; | ||
+ | |||
+ | } | ||
+ | return (0); // formalita, nikdy sem neprideme | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
+ | Task: | ||
+ | |||
+ | The task is to control the on and off state of the LED with a | ||
+ | single button. First press of the button will set LED on, second | ||
+ | press off. Hint: You will need a memory to store the actual LED | ||
+ | state to change it. | ||
[[Category:AVR]][[Category:CAD_RS]] | [[Category:AVR]][[Category:CAD_RS]] |
Verzia zo dňa a času 11:39, 26. november 2008
Vstupy a výstupy na MiniMEXLE doske.
Obvykle sa pri programovaní jednočipových mikropočítačov začína programom na ovládanie jedného vstupu a výstupu, napr. tlačítko a LED. Je to taký "Hello, World!" program pre vnorené systémy.
Na doske MiniMEXLE máme dve LED diódy a štryi tlačítka.
Tlačítka S1 až S4 sú pripojené k pinom PC0 až PC3 a sú aktívne v nule, žltá LED je pripojená k PB2 a je tiež aktívna v nule (t.j. LED svieti, keď je na výstupe log. 0). Druhá, červená LED dióda je aktívna v jednotke a je pripojená na pin PC5.
Nasledovný C-program demonštruje možnosti prístupu k binárnym vstupom a výstupom
rôznymi prostriedkami jazyka avr-gcc.
/* ************************************************************************** */
/* */
/* Monoliticke mikropocitace - Priklad 1.1 */
/* */
/* Program zasvieti/zhasne LED na PB2 podla stavu prepinaca na PC0 */
/* */
/* Autor: Richard Balogh <balogh@elf.stuba.sk> */
/* Historia: */
/* 19.02.2006 prva pokusna verzia */
/* 05.11.2008 uprava pre MiniMEXLE na cviko ZSAR */
/* Prenositelnost: */
/* */
/* ************************************************************************** */
#include <avr\io.h> // spolu s -mmcu=atmega88 nahra spravny .h subor
// ktory potrebujeme kvoli PORTx, PINx a DDRx
int main()
{
/* ***************** Initialization ************************ */
/* Port settings for LED *********************************** */
DDRB = 0b00000100; // bin: 0000 0100 1 = out, 0 = in
PORTB = 0xFF; // bin: 1111 1111 1 = LED off
/* Port settings for Switch ******************************** */
DDRC = 0b00000000; // bin: 0000 0000 1 = out, 0 = in
PORTC = 0xFF; // bin: 1111 1111 1 = pull-up active
/* ***************** Main Endless Loop ********************** */
while (1) { // toto rob stale dokola
if (PINC & 0b00000001) // bin: PINC & 0000 0001 = sw1 OFF?
PORTB = 0x04; // Lepsie takto
// PORTB |= 0xff; // bin PORTD + 0010 0000 = nastav PD5, LED OFF
else // t.j. ak sw1 ON:
// PORTD &= 0xff; // bin: PORTD & 1101 1111 = vynuluj PD5, LED ON
PORTB = 0x00;
}
return (0); // formalita, nikdy sem neprideme
}
Task:
The task is to control the on and off state of the LED with a single button. First press of the button will set LED on, second press off. Hint: You will need a memory to store the actual LED state to change it.