/
main.c
57 lines (43 loc) · 974 Bytes
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <avr/io.h>
#include "usitwislave.h"
#define STATE_PINA0 (PINA&(1<<PA0))
#define STATE_PINA1 (PINA&(1<<PA1))
static void twi_callback_2(uint8_t input_buffer_length, const uint8_t *input_buffer, uint8_t *output_buffer_length, uint8_t *output_buffer){
if(input_buffer_length > 0){
if(input_buffer[0]&0x01){ // Read address!
PORTB |= (1<<PB0);
}else{
PORTB &= ~(1<<PB0);
}
if(input_buffer[0]&0x02){
PORTB |=(1<<PB1);
}else{
PORTB &= ~(1<<PB1);
}
}
uint8_t stte=0x00;
if(PINA&(1<<PA0)){
stte |= (1<<0);
}
if(PINA&(1<<PA1)){
stte |= (1<<1);
}
if(PINA&(1<<PA2)){
stte |= (1<<2);
}
if(PINA&(1<<PA3)){
stte |= (1<<3);
}
output_buffer[0]= stte;
*output_buffer_length=1;
}
int main(){
DDRB |= ((1<<PB0) | (1<<PB1));
PORTB &= ~((1<<PB0)| (1<<PB1));
DDRA &= ~((1<<PA0)|(1<<PA1)|(1<<PA2)|(1<<PA3));
PORTA |= ((1<<PA0)|(1<<PA1)|(1<<PA2)|(1<<PA3));
usi_twi_slave(0x36, 0, twi_callback_2,0);
while(1){
//test
}
}