gavrasm Gerd's AVR assembler version 2.1 (C)2006 by DG4FAC
----------------------------------------------------------
Source file: hello.button.45.asm
Hex file:    hello.button.45.hex
Eeprom file: hello.button.45.eep
Compiled:    23.10.2008, 01:49:57
Pass:        2
     1: ;
     2: ; hello.button.45.asm
     3: ;
     4: ; button hello-world program
     5: ;
     6: ; Neil Gershenfeld
     7: ; CBA MIT 10/22/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: 
    14: .include "tn45def.inc"
 -> Warning 009: Include defs not necessary, using internal values!
   File: hello.button.45.asm, Line: 14
   Source line: .include "tn45def.inc"
    15: .equ tx_pin = PB2; transmit pin
    16: .equ button_pin = PB4; button pin
    17: .def bit_count = R16; bit counter
    18: .def temp = R17; temporary storage
    19: .def temp1 = R18; temporary storage
    20: .def txbyte = R19; data byte
    21: 
    22: ;
    23: ; print
    24: ; 
    25: .macro print
    26:    ldi zl,low(@0*2)
    27:    ldi zh,high(@0*2)
    28:    rcall print_db
    29:    .endmacro
    30: 
    31: .cseg
    32: .org 0
    33: 000000   C01A  rjmp reset
    34: 
    35: ;
    36: ; bit delay
    37: ; serial bit delay
    38: ;
    39: .equ b = 13 ; 9600 baud (8 MHz clock /8)
    40: bit_delay:
    41: 000001   E01D  ldi temp, b
    42:    bitloop:
    43: 000002   951A  dec temp
    44: 000003   F7F1  brne bitloop
    45: 000004   9508  ret
    46: ;
    47: ; putchar
    48: ; assumes no line driver (doesn't invert bits)
    49: ;
    50: .equ sb = 1; number of stop bits
    51: putchar:
    52: 000005   E00A  ldi bit_count, 9+sb; 1+8+sb
    53: 000006   9530  com txbyte; invert everything
    54: 000007   9408  sec; set start bit
    55:    putchar0:
    56: 000008   F410  brcc putchar1; if carry set
    57: 000009   9AC2  sbi PORTB, tx_pin; send a '0'
    58: 00000A   C002  rjmp putchar2; else	
    59:    putchar1:
    60: 00000B   98C2  cbi PORTB, tx_pin	; send a '1'
    61: 00000C   0000  nop ; even out timing
    62:    putchar2:
    63: 00000D   DFF3  rcall bit_delay; one bit delay
    64: 00000E   DFF2  rcall bit_delay
    65: 00000F   9536  lsr txbyte; get next bit
    66: 000010   950A  dec bit_count; if not all bits sent
    67: 000011   F7B1  brne putchar0; send next bit
    68: 000012   9508  ret;
    69: ;
    70: ; print_db
    71: ; prints a null-terminated .db string
    72: ;
    73: print_db:
    74:    print_loop:
    75: 000013   95C8  lpm
    76: 000014   2D30  mov txbyte,R0
    77: 000015   3030  cpi txbyte,0
    78: 000016   F019  breq return
    79: 000017   DFED  rcall putchar
    80: 000018   9631  adiw zl, 1
    81: 000019   CFF9  rjmp print_loop
    82:    return:
    83: 00001A   9508  ret
    84: ;
    85: ; main program
    86: ;
    87: reset:
    88:    ;
    89:    ; set stack pointer to top of RAM
    90:    ;
    91: 00001B   E011  ldi temp, high(RAMEND)
    92: 00001C   BF1E  out SPH, temp
    93: 00001D   E51F  ldi temp, low(RAMEND)
    94: 00001E   BF1D  out SPL, temp
    95:    ;
    96:    ; init button pin for input with pull-up
    97:    ;
    98: 00001F   9AC4  sbi PORTB, button_pin
    99: 000020   98BC  cbi DDRB, button_pin
   100:    ;
   101:    ; init comm pin for output
   102:    ;
   103: 000021   9AC2  sbi PORTB, tx_pin
   104: 000022   9ABA  sbi DDRB, tx_pin
   105:    main_loop:
   106:       button_down_loop:
   107: 000023   99B4  sbic PINB, button_pin
   108: 000024   CFFE  rjmp button_down_loop
   109:       print button_down_message
   110:          button_down_message: .db "button pressed",10,0
        000028 7562 7474 6E6F 7020
        00002C 6572 7373 6465 000A
   111:       button_up_loop:
   112: 000030   9BB4  sbis PINB, button_pin
   113: 000031   CFFE  rjmp button_up_loop
   114:       print button_up_message
   115:          button_up_message: .db "button released",10,0
 -> Warning 004: Number of bytes on line is odd, added 00 to fit program memory!
   File: hello.button.45.asm, Line: 115
   Source line:          button_up_message: .db "button released",10,0
        000035 7562 7474 6E6F 7220
        000039 6C65 6165 6573 0A64
        00003D 0000
   116: 00003E   CFE4  rjmp main_loop
 -> Warning 001: 1 symbol(s) defined, but not used!

Program             :       46 words.
Constants           :       17 words.
Total program memory:       63 words.
Eeprom space        :        0 bytes.
Data segment        :        0 bytes.
Compilation completed, no errors.
Compilation endet 23.10.2008, 01:49:57
