gavrasm Gerd's AVR assembler version 2.1 (C)2006 by DG4FAC
----------------------------------------------------------
Source file: hello.light.45.asm
Hex file:    hello.light.45.hex
Eeprom file: hello.light.45.eep
Compiled:    27.10.2007, 14:37:44
Pass:        2
     1: ;
     2: ; hello.light.45.asm
     3: ;
     4: ; read and send light level
     5: ;
     6: ; Neil Gershenfeld
     7: ; CBA MIT 10/24/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.light.45.asm, Line: 14
   Source line: .include "tn45def.inc"
    15: ;
    16: ; definitions
    17: ;
    18: .equ tx_pin = PB2; transmit pin
    19: ;
    20: ; registers
    21: ;
    22: .def bit_count = R16; bit counter
    23: .def temp = R17; temporary storage
    24: .def temp1 = R18; temporary storage
    25: .def txbyte = R19; data byte
    26: ;
    27: ; code segment
    28: ;
    29: .cseg
    30: .org 0
    31: 000000   C019  rjmp reset
    32: 
    33: ;
    34: ; bit delay
    35: ; serial bit delay
    36: ;
    37: .equ b = 13 ; 9600 baud (clock /8)
    38: ;.equ b = 8 ; 115200 baud (clock /1)
    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: ; char_delay
    70: ; delay between characters
    71: ;
    72: char_delay:
    73: 000013   EF1F  ldi temp, 255
    74: char_delay_loop:
    75: 000014   E02A  ldi temp1, 10
    76:    char_delay_loop1:
    77: 000015   952A  dec temp1
    78: 000016   F7F1  brne char_delay_loop1
    79: 000017   951A  dec temp
    80: 000018   F7D9  brne char_delay_loop
    81: 000019   9508  ret
    82: ;
    83: ; main program
    84: ;
    85: reset:
    86:    ;
    87:    ; set stack pointer to top of RAM
    88:    ;
    89: 00001A   E011  ldi temp, high(RAMEND)
    90: 00001B   BF1E  out SPH, temp
    91: 00001C   E51F  ldi temp, low(RAMEND)
    92: 00001D   BF1D  out SPL, temp
    93:    ;
    94:    ; init comm pin for output
    95:    ;
    96: 00001E   9AC2  sbi PORTB, tx_pin
    97: 00001F   9ABA  sbi DDRB, tx_pin
    98:    ;
    99:    ; init A/D
   100:    ;
   101: 000020   983C  cbi ADMUX, REFS2 ; use Vcc as reference
   102: 000021   983F  cbi ADMUX, REFS1 ; "
   103: 000022   983E  cbi ADMUX, REFS0 ; "
   104: 000023   983D  cbi ADMUX, ADLAR ; right-adjust result
   105: 000024   983B  cbi ADMUX, MUX3 ; set MUX to ADC3
   106: 000025   983A  cbi ADMUX, MUX2 ; "
   107: 000026   9A39  sbi ADMUX, MUX1 ; "
   108: 000027   9A38  sbi ADMUX, MUX0 ; "
   109: 000028   9A37  sbi ADCSRA, ADEN ; enable A/D
   110: 000029   9832  cbi ADCSRA, ADPS2 ; set prescaler to /2
   111: 00002A   9831  cbi ADCSRA, ADPS1 ; "
   112: 00002B   9830  cbi ADCSRA, ADPS0 ; "
   113:    ;
   114:    ; start main loop
   115:    ;
   116:    main_loop:
   117: 00002C   E031  ldi txbyte,1
   118: 00002D   DFD7  rcall putchar
   119: 00002E   DFE4  rcall char_delay
   120: 00002F   E032  ldi txbyte,2
   121: 000030   DFD4  rcall putchar
   122: 000031   DFE1  rcall char_delay
   123: 000032   E033  ldi txbyte,3
   124: 000033   DFD1  rcall putchar
   125: 000034   DFDE  rcall char_delay
   126: 000035   E034  ldi txbyte,4
   127: 000036   DFCE  rcall putchar
   128: 000037   DFDB  rcall char_delay
   129: 000038   9A36  sbi ADCSRA, ADSC ; start conversion
   130:       AD_loop:
   131: 000039   9936  sbic ADCSRA, ADSC ; loop until complete
   132: 00003A   CFFE  rjmp AD_loop
   133: 00003B   B134  in txbyte, ADCL ; low byte
   134: 00003C   DFC8  rcall putchar
   135: 00003D   DFD5  rcall char_delay
   136: 00003E   B135  in txbyte, ADCH ; hi byte
   137: 00003F   DFC5  rcall putchar
   138: 000040   DFD2  rcall char_delay
   139: 000041   CFEA  rjmp main_loop

Program             :       66 words.
Constants           :        0 words.
Total program memory:       66 words.
Eeprom space        :        0 bytes.
Data segment        :        0 bytes.
Compilation completed, no errors.
Compilation endet 27.10.2007, 14:37:44
