Sunteți pe pagina 1din 18

Laborator 3 Introducere in mediul de lucru

Conectare stand de lucru la PC

Mediul de lucru

Creareproiectnou

Selectienumeproiectsicompilator

Selectieplatforma de lucru

Deschidereproiect existent

Configurariproiect

Componentele mediului de lucru

Start debug

Exemplu 1
#include <stdio.h>
#include <avr/io.h>
int main(){
for(;;){
}
}

Laborator 4 Operatii pe biti


X
0
X

X
0
X

X
1
1

X
0
X

X
0
X

X
0
X

X
0
X

X
0
X

SAU (|)
(1<<5)
SET

X
1

X
1

X
0

X
1

X
1

X
1

X
1

X
1

SI (&)
~(1<<
5)
RESET

X
0
0

X
0
0

1
1
1

X
0
0

X
0
0

X
0
0

X
0
0

X
0
0

SI(&)
(1<<5)
!= 0

X
0
0

X
0
0

0
1
1

X
0
0

X
0
0

X
0
0

X
0
0

X
0
0

SI(&)
(1<<5)
== 0

Exemplu 2
// set bit to 1
#include <stdio.h>
#include <avr/io.h>
int main(){
// init
int i;
unsigned char c;
// loop
for(;;){
i++;
// good
c = 0;
// = 0b00000000
c = c | 1 << 3;
// = 0b00001000
c = c | 1 << 5;
// = 0b00101000
c = c | 1 << 7;
// = 0b10101000
// ok
c = 0b00000000;
c = c | 0b00001000;
c = c | 0b00100000;
c = c | 0b10000000;
// not ok
c = c | 0;
c = c | 8;
c = c | 32;

c = c | 128;
// wrong!
c = 0b00000000;
c = 0b00001000;
c = 0b00101000;
c = 0b10101000;
// wrong!
c = 0;
c = 8;
c = 40;
c = 168;
}
}

// set bit to 0
#include <stdio.h>
#include <avr/io.h>
int main(){
// init
int i;
unsigned char c;
// loop
for(;;){
i++;
// good
c = 0xFF;
c = c &~(1 << 3);
c = c &~(1 << 5);
c = c &~(1 << 7);
// ok
c = 0b11111111;
c = c & 0b11110111;
c = c & 0b11011111;
c = c & 0b01111111;
// not ok
c = 255;
c = c & 247;
c = c & 223;
c = c & 127;
// wrong!
c = 255;
c = 247;
c = 215;
c = 87;
}
}

Breakpoints

// = 0b11111111

// verify bit if 1 or 0
#include <stdio.h>
#include <avr/io.h>
int main(){
// init
int i=0;
unsigned char c;
// loop
for(;;){
c = 123; // 0b01111011
if(c & (1<<i)){
// bit is 1
c = c &~(1<<i);
}
else{
// bit is 0
c = c | (1<<i);
}
i++;
if(i > 7) i=0;
}
}

Laborator5 Intrari/iesiridigitale

Schema placa(Proteus)

// digital I/O v1
#include <stdio.h>
#include <avr/io.h>
int main(){
// init
int i=0;
unsigned char c;
DDRA |= 1<<5;

// set bit as output

// loop
for(;;){
if(PINB & (1<<7))
{
PORTA &= ~(1<<5);
}
else
{
PORTA |= 1<<5;
}
}
}

// digital I/O ok
#include <stdio.h>
#include <avr/io.h>
int main(){
// init
int i=0;
unsigned char c;
DDRA |= 1<<5;
PORTB |= 1<<7;

// set bit as output


// set pull-up resistor

// loop
for(;;){
if(~PINB & (1<<7))
{
PORTA |= 1<<5;
}
else
{
PORTA &= ~(1<<5);
}
}
}

Display

// test.c
#include
#include
#include
#include

<stdio.h>
<avr/io.h>
"display.h"
<util/delay.h>

int main(){
// init
int i=0;
unsigned char c;
DDRA = 0b00111111;
// set bit as output
DDRB = 0b01111111;
// set bit as output
PORTB |= 1<<7; // set pull-up resistor
// loop
for(;;){
display(0,0);
_delay_ms(10);
}
}

// display.h
void display(int p, int c);
// display.c
#include <avr/io.h>
#include "display.h"
void display(int p, int c){
PORTA &= 0b11100000; // se oprestealimentareaanodului
PORTB |= 0b01111111; // se blocheazacatodulledurilor
switch(c){
case 0:
PORTB &= 0b11000000;
break;
}
switch(p){
case 0:
PORTA |= 0b00000001;
break;
}
}

Laborator6 Aplicatii
// test.c
#include
#include
#include
#include

<stdio.h>
<avr/io.h>
"display.h"
<util/delay.h>

#define button_init() PORTB |= 1<<7;


#define button_pressed() (~PINB & (1<<7))
int main(){
// init
int i=0, bp=0, val=0, cnt1=0;
unsigned char c;
DDRA = 0b00111111;
DDRB = 0b01111111;
button_init();

// set bit as output


// set bit as output

// loop
for(;;){
if(button_pressed()){
if(bp){
cnt1++;
}
else{
bp = 1;
}
}
else{
if(cnt1>0)val++;
bp = 0;
cnt1=0;
}
if(cnt1>20){
val++;
cnt1 = 0;
}
display(0,val%10);
_delay_ms(10);
display(1,(val/10)%10);
_delay_ms(10);
display(2,(val/100)%10);
_delay_ms(10);
display(3,(val/1000)%10);
_delay_ms(10);
}

S-ar putea să vă placă și