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