» Advertenties

Zo 5 Februari 2012, 12:50

Voorgaande
- De AVR
- 8 x leds

Inhoud
#1: Monostabiel
#2: Bistabiel

Hardware
File #127
Zolang de drukknop word ingedrukt is de led aan, in rust is de led uit.

C code -
  1. #define F_CPU 8000000
  2.  
  3. #include "s/g.h"
  4. #include "util/delay.h"
  5.  
  6.  
  7. //! main functie, start programma, moet altijd aanwezich zijn
  8. int main(void){
  9.   outb(PORTC, 0xFF); ///< Alle uitgangen hoog
  10.   outb(DDRC, 0xFF); ///< PORTC volledig als uitgang
  11.   outb(PORTD, 0x0C); ///< PD2..3 hoog (interne pullup)
  12.   outb(DDRD, 0x0); ///< PORTD volledig als ingang
  13.  
  14.   while(1){
  15.     // PD2 ingedrukt? (actief lage drukknop)
  16.     if(!rbi(PIND, 2)){
  17.       cbi(PORTC, 0);
  18.     }  
  19.     // led ook weer uit doen
  20.     // annder blijft deze branden
  21.     else{
  22.       sbi(PORTC, 0);
  23.     }  
  24.  
  25.     // PC1 led reageerd op PD3
  26.     if(!rbi(PIND, 3)){
  27.       cbi(PORTC, 1);
  28.     }  
  29.     else{
  30.       sbi(PORTC, 1);
  31.     }
  32.  
  33.     // als beide drukknoppen zijn ingedrukt, PC2 aan
  34.     if(!rbi(PIND, 2) && !rbi(PIND, 3)){
  35.       cbi(PORTC, 2);
  36.     }  
  37.     else{
  38.       sbi(PORTC, 2);
  39.     }
  40.  
  41.     _delay_ms(10); ///< even wachten
  42.   }
  43.  
  44.   return 0;
  45. }
Bij de eerste druk op de knop gaat de led op PC0 uit, bij start is deze aan. Bij de volgende druk gaat de led weer aan.

C code -
  1. #define F_CPU 8000000
  2.  
  3. #include "s/g.h"
  4. #include "util/delay.h"
  5.  
  6.  
  7. //! main functie, start programma, moet altijd aanwezich zijn
  8. int main(void){
  9.   outb(PORTC, 0xFF); ///< alle uitgangen hoog
  10.   outb(DDRC, 0xFF); ///< PORTC volledig als uitgang
  11.   outb(PORTD, 0x0C); ///< PD2..3 hoog (interne pullup)
  12.   outb(DDRD, 0x0); ///< PORTD volledig als uitgang
  13.  
  14.   u08 pa2 = 0; ///< variabele voor stand van PA2
  15.   while(1){
  16.     if(!rbi(PIND, 2)){ ///< PA2 ingedrukt?
  17.       pa2 = ~pa2; ///< toggle var pa2
  18.       // do{ ... }while(): minstens 1 maal 15ms wachten
  19.       do{
  20.         _delay_ms(10);  
  21.       }while(!rbi(PIND, 2));   ///< zolang PA2 hoog wordt
  22.     }
  23.  
  24.     // uitgang pas sturen als PA2 los gelaten is
  25.     if(pa2 == 0){
  26.       cbi(PORTC, 0);
  27.     }
  28.     else{
  29.       sbi(PORTC, 0);
  30.     }
  31.   }
  32.  
  33.   return 0;
  34. }
Nog geen reacties.
Naam
a-z A-Z 0-9 _

 
E-mail
Wordt niet getoont.
  (niet verplicht)
 
Mail sturen als
(optie)
Smoerijf reageerd
Eender wie reageaard
Nooit
 
Mail sturen
(optie)
Enkel mailen bij eerste reactie
Bij elke reactie mailen
 
Reactie
Laatste wijziging: Zo 18 Oktober 2009, 17:38