summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..a067777
--- /dev/null
+++ b/main.c
@@ -0,0 +1,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
+}