gavrasm Gerd's AVR assembler version 2.1 (C)2006 by DG4FAC
----------------------------------------------------------
Source file: hello.array.44.asm
Hex file:    hello.array.44.hex
Eeprom file: hello.array.44.eep
Compiled:    17.11.2008, 03:24:52
Pass:        2
     1: ;
     2: ; hello.array.44.asm
     3: ;
     4: ; Charlieplex LED array hello-world
     5: ;
     6: ; Neil Gershenfeld
     7: ; CBA MIT 11/16/08
     8: ;
     9: ; (c) Massachusetts Institute of Technology 2008
    10: ; Permission granted for experimental and personal use;
    11: ; license for commercial sale available from MIT.
    12: ;
    13: .include "tn44def.inc"
 -> Warning 009: Include defs not necessary, using internal values!
   File: hello.array.44.asm, Line: 13
   Source line: .include "tn44def.inc"
    14: ;
    15: ; definitions
    16: ;
    17: .equ A = PA1 ; row 1
    18: .equ B = PA2 ; row 2
    19: .equ C = PA3 ; row 3
    20: .equ D = PA4 ; row 4
    21: .equ E = PA5 ; row 5
    22: ;
    23: ; registers
    24: ;
    25: .def temp0 = R16 ; temporary variable
    26: .def temp1 = R17 ; temporary variable
    27: .def temp2 = R18 ; temporary variable
    28: .def loop_count = R19 ; loop counter
    29: .def delay0 = R20 ; delay for loop 0
    30: .def delay1 = R21 ; delay for loop 1
    31: .def delay2 = R22 ; delay for loop 2
    32: ;
    33: ; macros
    34: ;
    35: .macro on
    36:    ;
    37:    ; source @0, sink @1
    38:    ;
    39:    sbi PORTA, @0
    40:    cbi PORTA, @1
    41:    sbi DDRA, @0
    42:    sbi DDRA, @1
    43:    .endmacro
    44: .macro off
    45:    ;
    46:    ; tri-state @0, @1
    47:    ;
    48:    cbi DDRA, @0
    49:    cbi DDRA, @1
    50:    .endmacro
    51: .macro flash
    52:    ;
    53:    ; flash from @0 to @1
    54:    ;
    55:    on @0,@1
    56:    rcall led_delay
    57:    off @0,@1
    58:    .endmacro
    59: .macro delay
    60:    ;
    61:    ; set delays
    62:    ;
    63:    ldi delay0, @0
    64:    ldi delay1, @1
    65:    ldi delay2, @2
    66:    .endmacro
    67: .macro led_loop
    68:    ;
    69:    ; loop through LEDs
    70:    ;
    71:    ldi loop_count,@0
    72:    led_loop_loop:
    73:       rcall led_cycle
    74:       dec loop_count
    75:       brne led_loop_loop
    76:    .endmacro
    77: ;
    78: ; code segment
    79: ;
    80: .cseg
    81: .org 0
    82: 000000   C097  rjmp reset
    83: ;
    84: ; led_delay
    85: ; LED multiplex delay
    86: ;
    87: led_delay:
    88: 000001   2F04  mov temp0, delay0
    89:    delay_loop0:
    90: 000002   2F15  mov temp1, delay1
    91:       delay_loop1:
    92: 000003   2F26  mov temp2, delay2
    93:          delay_loop2:
    94: 000004   952A  dec temp2
    95: 000005   F7F1  brne delay_loop2
    96: 000006   951A  dec temp1
    97: 000007   F7D9  brne delay_loop1
    98: 000008   950A  dec temp0
    99: 000009   F7C1  brne delay_loop0
   100: 00000A   9508  ret
   101: ;
   102: ; led_cycle
   103: ; cycle through LEDs
   104: ;
   105: led_cycle:
   106:    flash B,A
   107:    flash C,A
   108:    flash D,A
   109:    flash E,A
   110:    flash A,B
   111:    flash C,B
   112:    flash D,B
   113:    flash E,B
   114:    flash A,C
   115:    flash B,C
   116:    flash D,C
   117:    flash E,C
   118:    flash A,D
   119:    flash B,D
   120:    flash C,D
   121:    flash E,D
   122:    flash A,E
   123:    flash B,E
   124:    flash C,E
   125:    flash D,E
   126: 000097   9508  ret
   127: ;
   128: ; main program
   129: ;
   130: reset:
   131:    ;
   132:    ; set clock divider to /1
   133:    ;
   134: 000098   E800  ldi temp0, (1 << CLKPCE)
   135: 000099   E010  ldi temp1, (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0)
   136: 00009A   BD06  out CLKPR, temp0
   137: 00009B   BD16  out CLKPR, temp1
   138:    ;
   139:    ; set stack pointer to top of RAM
   140:    ;
   141: 00009C   E001  ldi temp0, high(RAMEND)
   142: 00009D   BF0E  out SPH, temp0
   143: 00009E   E50F  ldi temp0, low(RAMEND)
   144: 00009F   BF0D  out SPL, temp0
   145:    ;
   146:    ; start main loop
   147:    ;
   148:    loop:
   149:       delay 100,100,10
   150:       led_loop 1
   151:       delay 100,100,1
   152:       led_loop 10
   153:       delay 100,10,1
   154:       led_loop 100
   155: 0000B5   CFEA  rjmp loop

Program             :      182 words.
Constants           :        0 words.
Total program memory:      182 words.
Eeprom space        :        0 bytes.
Data segment        :        0 bytes.
Compilation completed, no errors.
Compilation endet 17.11.2008, 03:24:52
