summaryrefslogtreecommitdiff
path: root/main.c
blob: a067777ac31f2856bb227e4ccee5401c75298a42 (plain)
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
57
58
59
60
#include <avr/io.h>
#include <avr/delay.h>
 
int main (void)
{
	DDRC=0x00;
	PORTC=0x00;

	DDRB=0xFF;
	PORTB=0x55;

#define OUT0 "sbi %0, 5 \n"  /* pull line to GND */
#define OUT1 "cbi %0, 5 \n"  /* tristate the line */
#define NOP "nop \n"
#define NOP10 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP
#define NOP12 NOP10 NOP NOP

#define WAIT10 "ldi r16, 1 \n rcall loop \n"
#define WAIT34 "ldi r16, 9 \n rcall loop \n"

//#define BIT0 OUT0 NOP10 NOP12 NOP12 OUT1 NOP10
//#define BIT1 OUT0 NOP10 OUT1 NOP10 NOP12 NOP12

#define BIT0 OUT0 WAIT34 OUT1 WAIT10
#define BIT1 OUT0 WAIT10 OUT1 WAIT34

	PORTB=0x55;

	int temp=0;

	while(1)
	{
		temp++;
		PORTB=temp;
		_delay_ms(1);
		asm volatile(
		BIT0
		BIT0
		BIT0
		BIT0
		BIT0
		BIT0
		BIT0
		BIT0
		BIT1
		"rjmp done \n"
		"loop:\n"
		"dec r16\n"
		"brne loop\n"
		"ret\n"
		"done: \n"
		: 
		: "I" (_SFR_IO_ADDR(DDRC)),  "I" (_SFR_IO_ADDR(PINC)) 
		: "r16"
		);
	}


	return 0; // never reached
}