summaryrefslogtreecommitdiff
path: root/main.c
blob: 481757bf4800fdcd2621e99b95cc130ba521f8b7 (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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#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=~(1 << ((temp>>9)%6));
		_delay_ms(1);
		asm volatile(
		BIT0
		BIT1
		BIT0
		BIT0

		BIT0
		BIT0
		BIT0
		BIT0

		BIT0
		BIT0
		BIT0
		BIT0

		BIT0
		BIT0
		BIT1
		BIT1

		BIT0
		BIT0
		BIT0
		BIT0

		BIT0
		BIT0
		BIT1
		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
}