diff options
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 60 |
1 files changed, 60 insertions, 0 deletions
@@ -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 +} |