gavrasm Gerd's AVR assembler version 2.3 (C)2009 by DG4FAC
----------------------------------------------------------
Source file: hello.serial.45.asm
Hex file:    hello.serial.45.hex
Eeprom file: hello.serial.45.eep
Compiled:    06.11.2009, 18:20:11
Pass:        2
     1: ;
     2: ; hello.serial.45.asm
     3: ;
     4: ; 9600 baud serial hello-world program
     5: ;
     6: ; Neil Gershenfeld
     7: ; CBA MIT 7/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.serial.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 (8 MHz clock /8)
    39: bit_delay:
    40: 000001   E01D  ldi temp, b
    41:    bitloop:
    42: 000002   951A  dec temp
    43: 000003   F7F1  brne bitloop
    44: 000004   9508  ret
    45: ;
    46: ; putchar
    47: ; assumes no line driver (doesn't invert bits)
    48: ;
    49: .equ sb = 1; number of stop bits
    50: putchar:
    51: 000005   E00A  ldi bit_count, 9+sb; 1+8+sb
    52: 000006   9530  com txbyte; invert everything
    53: 000007   9408  sec; set start bit
    54:    putchar0:
    55: 000008   F410  brcc putchar1; if carry set
    56: 000009   9AC2  sbi PORTB, tx_pin; send a '0'
    57: 00000A   C002  rjmp putchar2; else	
    58:    putchar1:
    59: 00000B   98C2  cbi PORTB, tx_pin	; send a '1'
    60: 00000C   0000  nop ; even out timing
    61:    putchar2:
    62: 00000D   DFF3  rcall bit_delay; one bit delay
    63: 00000E   DFF2  rcall bit_delay
    64: 00000F   9536  lsr txbyte; get next bit
    65: 000010   950A  dec bit_count; if not all bits sent
    66: 000011   F7B1  brne putchar0; send next bit
    67: 000012   9508  ret;
    68: ;
    69: ; print_db
    70: ; prints a null-terminated .db string
    71: ;
    72: print_db:
    73:    print_loop:
    74: 000013   95C8  lpm
    75: 000014   2D30  mov txbyte,R0
    76: 000015   3030  cpi txbyte,0
    77: 000016   F019  breq return
    78: 000017   DFED  rcall putchar
    79: 000018   9631  adiw zl, 1
    80: 000019   CFF9  rjmp print_loop
    81:    return:
    82: 00001A   9508  ret
    83: ;
    84: ; main program
    85: ;
    86: reset:
    87:    ;
    88:    ; set stack pointer to top of RAM
    89:    ;
    90: 00001B   E011  ldi temp, high(RAMEND)
    91: 00001C   BF1E  out SPH, temp
    92: 00001D   E51F  ldi temp, low(RAMEND)
    93: 00001E   BF1D  out SPL, temp
    94:    ;
    95:    ; init comm pin for output
    96:    ;
    97: 00001F   9AC2  sbi PORTB, tx_pin
    98: 000020   9ABA  sbi DDRB, tx_pin
    99:    loop:
   100:       print message
   101:          message: .db "Hello World!",10,0
        000024 6548 6C6C 206F 6F57
        000028 6C72 2164 000A
   102: 00002B   CFF5  rjmp loop
 -> Warning 001: 1 symbol(s) defined, but not used!

Program             :       37 words.
Constants           :        7 words.
Total program memory:       44 words.
Eeprom space        :        0 bytes.
Data segment        :        0 bytes.
Compilation completed, no errors.
Compilation endet 06.11.2009, 18:20:11
