Skip to content

Instantly share code, notes, and snippets.

@MrTrick
Created April 26, 2013 10:28
Show Gist options
  • Save MrTrick/5466338 to your computer and use it in GitHub Desktop.
Save MrTrick/5466338 to your computer and use it in GitHub Desktop.
/*
* Created: 26/04/2013 2:57:59 PM
*/
#include <avr/io.h>
#include <inttypes.h>
#include <util/delay.h>
#define FCPU 8000000UL
#define CHA 1<<0
#define CHB 1<<1
#define CHC 1<<2
#define CHD 1<<3
static uint8_t leds[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
static uint8_t masks[12];
int main(void)
{
unsigned char counter=0, head=0, tail=0;
while(1)
{
masks[1] = leds[1]?CHA:0;
masks[2] = leds[2]?CHC:0;
masks[3] = leds[3]?CHB:0;
masks[4] = leds[4]?CHA:0;
masks[5] = leds[5]?CHB:0;
masks[6] = leds[6]?CHB:0;
masks[7] = leds[7]?CHC:0;
masks[8] = leds[8]?CHA:0;
masks[9] = leds[9]?CHD:0;
masks[10] = leds[10]?CHC:0;
masks[11] = leds[11]?CHD:0;
masks[0] = leds[0]?CHD:0;
//A
DDRC = 0;
PORTC = CHA;
DDRC = CHA | masks[3] | masks[2] | masks[0];
_delay_ms(2);
//B
DDRC = 0;
PORTC = CHB;
DDRC = masks[4] | CHB | masks[7] | masks[11];
_delay_ms(2);
//C
DDRC = 0;
PORTC = CHC;
DDRC = masks[8] | masks[6] | CHC | masks[9];
_delay_ms(2);
//D
DDRC = 0;
PORTC = CHD;
DDRC = masks[1] | masks[5] | masks[10] | CHD;
_delay_ms(2);
//Simple snake growing/shrinking pattern
if (++counter&0x10) { counter=0;
if (++head>11) head=0;
else if(++tail>11) tail=0;
leds[head]=1;
leds[tail]=0;
}
}
}
00000000 JMP 0x00000034 Jump
00000002 JMP 0x00000051 Jump
00000004 JMP 0x00000051 Jump
00000006 JMP 0x00000051 Jump
00000008 JMP 0x00000051 Jump
0000000A JMP 0x00000051 Jump
0000000C JMP 0x00000051 Jump
0000000E JMP 0x00000051 Jump
00000010 JMP 0x00000051 Jump
00000012 JMP 0x00000051 Jump
00000014 JMP 0x00000051 Jump
00000016 JMP 0x00000051 Jump
00000018 JMP 0x00000051 Jump
0000001A JMP 0x00000051 Jump
0000001C JMP 0x00000051 Jump
0000001E JMP 0x00000051 Jump
00000020 JMP 0x00000051 Jump
00000022 JMP 0x00000051 Jump
00000024 JMP 0x00000051 Jump
00000026 JMP 0x00000051 Jump
00000028 JMP 0x00000051 Jump
0000002A JMP 0x00000051 Jump
0000002C JMP 0x00000051 Jump
0000002E JMP 0x00000051 Jump
00000030 JMP 0x00000051 Jump
00000032 JMP 0x00000051 Jump
00000034 CLR R1 Clear Register
00000035 OUT 0x3F,R1 Out to I/O location
00000036 SER R28 Set Register
00000037 LDI R29,0x08 Load immediate
00000038 OUT 0x3E,R29 Out to I/O location
00000039 OUT 0x3D,R28 Out to I/O location
--- P:\home\tools\hudson\workspace\avr8-gnu-toolchain\src\gcc\gcc\config\avr\libgcc.S
0000003A LDI R17,0x01 Load immediate
0000003B LDI R26,0x00 Load immediate
0000003C LDI R27,0x01 Load immediate
0000003D LDI R30,0xF4 Load immediate
0000003E LDI R31,0x02 Load immediate
0000003F RJMP PC+0x0003 Relative jump
00000040 LPM R0,Z+ Load program memory and postincrement
00000041 ST X+,R0 Store indirect and postincrement
00000042 CPI R26,0x00 Compare with immediate
00000043 CPC R27,R17 Compare with carry
00000044 BRNE PC-0x04 Branch if not equal
00000045 LDI R17,0x01 Load immediate
00000046 LDI R26,0x00 Load immediate
00000047 LDI R27,0x01 Load immediate
00000048 RJMP PC+0x0002 Relative jump
00000049 ST X+,R1 Store indirect and postincrement
--- P:\home\tools\hudson\workspace\avr8-gnu-toolchain\src\gcc\gcc\config\avr\libgcc.S
0000004A CPI R26,0x18 Compare with immediate
0000004B CPC R27,R17 Compare with carry
0000004C BRNE PC-0x03 Branch if not equal
--- No source file -------------------------------------------------------------
0000004D CALL 0x00000053 Call subroutine
0000004F JMP 0x00000178 Jump
00000051 JMP 0x00000000 Jump
--- p:\Projects\test\Debug/.././test.c
{
00000053 PUSH R28 Push register on stack
00000054 PUSH R29 Push register on stack
00000055 RCALL PC+0x0001 Relative call subroutine
00000056 IN R28,0x3D In from I/O location
00000057 IN R29,0x3E In from I/O location
unsigned char counter=0, head=0, tail=0;
00000058 STD Y+2,R1 Store indirect with displacement
00000059 STD Y+1,R1 Store indirect with displacement
masks[3] = leds[3]?CHB:0;
0000005A MOV R0,R31 Copy register
0000005B LDI R31,0x0F Load immediate
0000005C MOV R2,R31 Copy register
0000005D LDI R31,0x01 Load immediate
0000005E MOV R3,R31 Copy register
0000005F MOV R31,R0 Copy register
masks[0] = leds[0]?CHD:0;
00000060 LDI R26,0x0C Load immediate
00000061 LDI R27,0x01 Load immediate
unsigned char counter=0, head=0, tail=0;
00000062 LDI R24,0x00 Load immediate
masks[7] = leds[7]?CHC:0;
00000063 LDI R20,0x07 Load immediate
00000064 LDI R21,0x01 Load immediate
masks[8] = leds[8]?CHA:0;
00000065 LDI R22,0x08 Load immediate
00000066 LDI R23,0x01 Load immediate
masks[9] = leds[9]?CHD:0;
00000067 LDI R16,0x09 Load immediate
00000068 LDI R17,0x01 Load immediate
00000069 MOV R0,R31 Copy register
0000006A LDI R31,0x15 Load immediate
--- p:\Projects\test\Debug/.././test.c
0000006B MOV R14,R31 Copy register
0000006C LDI R31,0x01 Load immediate
0000006D MOV R15,R31 Copy register
0000006E MOV R31,R0 Copy register
masks[10] = leds[10]?CHC:0;
0000006F MOV R0,R31 Copy register
00000070 LDI R31,0x0A Load immediate
00000071 MOV R12,R31 Copy register
00000072 LDI R31,0x01 Load immediate
00000073 MOV R13,R31 Copy register
00000074 MOV R31,R0 Copy register
00000075 MOV R0,R31 Copy register
00000076 LDI R31,0x16 Load immediate
00000077 MOV R10,R31 Copy register
00000078 LDI R31,0x01 Load immediate
00000079 MOV R11,R31 Copy register
0000007A MOV R31,R0 Copy register
masks[11] = leds[11]?CHD:0;
0000007B MOV R0,R31 Copy register
0000007C LDI R31,0x0B Load immediate
0000007D MOV R8,R31 Copy register
--- p:\Projects\test\Debug/.././test.c
0000007E LDI R31,0x01 Load immediate
0000007F MOV R9,R31 Copy register
00000080 MOV R31,R0 Copy register
00000081 MOV R0,R31 Copy register
00000082 LDI R31,0x17 Load immediate
00000083 MOV R6,R31 Copy register
00000084 LDI R31,0x01 Load immediate
00000085 MOV R7,R31 Copy register
00000086 MOV R31,R0 Copy register
masks[0] = leds[0]?CHD:0;
00000087 MOV R0,R31 Copy register
00000088 LDI R31,0x00 Load immediate
00000089 MOV R4,R31 Copy register
0000008A LDI R31,0x01 Load immediate
0000008B MOV R5,R31 Copy register
0000008C MOV R31,R0 Copy register
masks[1] = leds[1]?CHA:0;
0000008D LDI R25,0x01 Load immediate
0000008E LDI R30,0x01 Load immediate
0000008F LDI R31,0x01 Load immediate
00000090 LDD R18,Z+0 Load indirect with displacement
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment