gavrasm Gerd's AVR assembler version 2.1 (C)2006 by DG4FAC
----------------------------------------------------------
Source file: hello.step.hello.45.asm
Hex file:    hello.step.hello.45.hex
Eeprom file: hello.step.hello.45.eep
Compiled:    27.10.2007, 13:40:24
Pass:        2
     1: ;
     2: ; hello.step.hello.45.asm
     3: ;
     4: ; 9600 baud serial hello-world program
     5: ;
     6: ; Neil Gershenfeld
     7: ; CBA MIT 10/27/07
     8: ;
     9: ; (c) Massachusetts Institute of Technology 2007
    10: ; Permission granted for experimental and personal use;
    11: ; license for commercial sale available from MIT.
    12: ;
    13: 
    14: .include "tn45def.inc"
 -> Warning 009: Include defs not necessary, using internal values!
   File: hello.step.hello.45.asm, Line: 14
   Source line: .include "tn45def.inc"
    15: .equ tx_pin = PB2; transmit pin
    16: .def bit_count = R16; bit counter
    17: .def temp = R17; temporary storage
    18: .def temp1 = R18; temporary storage
    19: .def txbyte = R19; data byte
    20: 
    21: ;
    22: ; print
    23: ; 
    24: .macro print
    25:    ldi zl,low(@0*2)
    26:    ldi zh,high(@0*2)
    27:    rcall print_db
    28:    .endmacro
    29: 
    30: .cseg
    31: .org 0
    32: 000000   C01A  rjmp reset
    33: 
    34: ;
    35: ; bit delay
    36: ; serial bit delay
    37: ;
    38: ;.equ b = 13 ; 9600 baud (clock /8)
    39: .equ b = 130 ; 9600 baud (clock /1)
    40: ;.equ b = 8 ; 115200 baud (clock /1)
    41: bit_delay:
    42: 000001   E812  ldi temp, b
    43:    bitloop:
    44: 000002   951A  dec temp
    45: 000003   F7F1  brne bitloop
    46: 000004   9508  ret
    47: ;
    48: ; putchar
    49: ; assumes no line driver (doesn't invert bits)
    50: ;
    51: .equ sb = 1; number of stop bits
    52: putchar:
    53: 000005   E00A  ldi bit_count, 9+sb; 1+8+sb
    54: 000006   9530  com txbyte; invert everything
    55: 000007   9408  sec; set start bit
    56:    putchar0:
    57: 000008   F410  brcc putchar1; if carry set
    58: 000009   9AC2  sbi PORTB, tx_pin; send a '0'
    59: 00000A   C002  rjmp putchar2; else	
    60:    putchar1:
    61: 00000B   98C2  cbi PORTB, tx_pin	; send a '1'
    62: 00000C   0000  nop ; even out timing
    63:    putchar2:
    64: 00000D   DFF3  rcall bit_delay; one bit delay
    65: 00000E   DFF2  rcall bit_delay
    66: 00000F   9536  lsr txbyte; get next bit
    67: 000010   950A  dec bit_count; if not all bits sent
    68: 000011   F7B1  brne putchar0; send next bit
    69: 000012   9508  ret;
    70: ;
    71: ; print_db
    72: ; prints a null-terminated .db string
    73: ;
    74: print_db:
    75:    print_loop:
    76: 000013   95C8  lpm
    77: 000014   2D30  mov txbyte,R0
    78: 000015   3030  cpi txbyte,0
    79: 000016   F019  breq return
    80: 000017   DFED  rcall putchar
    81: 000018   9631  adiw zl, 1
    82: 000019   CFF9  rjmp print_loop
    83:    return:
    84: 00001A   9508  ret
    85: ;
    86: ; main program
    87: ;
    88: reset:
    89:    ;
    90:    ; set clock divider to /1
    91:    ;
    92: 00001B   E810  ldi temp, (1 << CLKPCE)
    93: 00001C   E020  ldi temp1, (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0)
    94: 00001D   BD16  out CLKPR, temp
    95: 00001E   BD26  out CLKPR, temp1
    96:    ;
    97:    ; set stack pointer to top of RAM
    98:    ;
    99: 00001F   E011  ldi temp, high(RAMEND)
   100: 000020   BF1E  out SPH, temp
   101: 000021   E51F  ldi temp, low(RAMEND)
   102: 000022   BF1D  out SPL, temp
   103:    ;
   104:    ; init comm pin for output
   105:    ;
   106: 000023   9AC2  sbi PORTB, tx_pin
   107: 000024   9ABA  sbi DDRB, tx_pin
   108:    loop:
   109:       print message
   110:          message: .db "Hello World!",10,0
        000028 6548 6C6C 206F 6F57
        00002C 6C72 2164 000A
   111: 00002F   CFF5  rjmp loop

Program             :       41 words.
Constants           :        7 words.
Total program memory:       48 words.
Eeprom space        :        0 bytes.
Data segment        :        0 bytes.
Compilation completed, no errors.
Compilation endet 27.10.2007, 13:40:24
