This is an old revision of the document!
Demoplaadil ‚Basic’ on kolm valgusdioodi (LED) ja kolm mikrolülitit. Valgusdioodid on ühendatud porti PORTC[3..5] ja lülitid PORTC[0..2]. Harjutuse eesmärgiks on luua C kood, kus vastava lüliti vajutamisel süttib vastav LED. Ühendusskeem:
Programmi kood:
/* Labor 1 näide Harjutus töötab laborikaardiga Basic v3 Vajutades nupule S1 süttib LED 1 vajutades nupule S2 süttib LED 2 vajutades nupule S3 süttib LED 3 Raivo Sell 2008 LED = 0 (põleb) LED = 1 (kustunud) S = 0 (lülitui sees) S = 1 (lüliti väljas) PORDI suuna konfigureerimine: 1-väljund 0-sisend */ #include <avr\io.h> //defineeritakse kõrge bit pordis x #define SET(x) |= (1<<x) //defineeritakse madal bit pordis x #define CLR(x) &=~(1<<x) int main(void) { DDRC = 0x38; // DDRC 0bXX111000 PORTC = 0x3F; // PORTC 0bXX111111 //Lõputu tsükkel while(1) { // Kui toimub nupule vajutus if (bit_is_clear(PINC, 0)) //Nupp S1 PORTC CLR(3); //LED 1 sisse else if (bit_is_clear(PINC, 1))//Nupp S2 PORTC CLR(4); //LED 2 sisse else if (bit_is_clear(PINC, 2))//Nupp S3 PORTC CLR(5); //LED 3 sisse else //Kui pole midagi vajutatud PORTC=0xFF; //LED lülitatakse välja (LED=1) } }
Kompileeritud näide HEX
Algallikas: Micah Carrick tutorial
#define BUTTON_PORT PORTC /* PORTx - nupu register */ #define BUTTON_PIN PINC /* PINx - nupu sisendi register */ #define BUTTON_BIT PC0 /* nupu sisend/väljund bit */ #include <avr/io.h>; #include <util/delay.h>; int nupuvajutus() { /* nupp on all kui BIT on madal (0) */ if (bit_is_clear(BUTTON_PIN, BUTTON_BIT)) { _delay_ms(25); /* nupu sädeluse ooteaeg "de-bouncing" */ if (bit_is_clear(BUTTON_PIN, BUTTON_BIT)) return 1; } return 0; } int main (void){ /* lülitab sisse sisemised 'pull-up' takistid */ BUTTON_PORT |= _BV(BUTTON_BIT) if (button_is_pressed()){ // tee midagi // oota kui vaja } }