AVR Vstupy a výstupy v C: Rozdiel medzi revíziami
Zo stránky SensorWiki
|  Nová stránka:   Category:AVRCategory:CAD_RS | Bez shrnutí editace | ||
| 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 z 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.