All pastes #593045 Raw Edit

Anonymous

public text v1 · immutable
#593045 ·published 2007-06-28 02:54 UTC
rendered paste body
; avra -I ~/.avr pot15.asm
; avrdude -p t15 -c STK500v2 -P /dev/ttyS0 -U pot15.hex

.include "tn15def.inc"

.def LEDS = r16 ; temporary register
.def Delay = r17 ; Delay variable 1
.def Delay2 = r18 ; Delay variable 2

.def ADCSET = r19 ; for ADC setup

; ** init

SETUP:
    ser LEDS
    cbr LEDS, 1      ; PB5 is for ADC
    out DDRB, LEDS   ; set portb to output

    ldi ADCSET, 0x80 ; load ADMUX: REFS = 10, PB5, LAR=0
    out ADMUX, ADCSET

    ldi ADCSET, 0xE0 ; load ADCSR: Enable, Start and Free run
    out ADCSR, ADCSET
    

LOOP:

    ; read ADC value (low first, then high)
    mov ZL, ADCL
    mov ZH, ADCH

    rcall FiveOf400 ; translate to LED mapping

;    sbr LEDS, 1
    ser LEDS
    rcall UPDATE
    rcall REST

;    cbr LEDS, 1
    clr LEDS
    rcall UPDATE
    rcall REST

    rjmp LOOP ; repeat loop forever

FiveOf400:
    ; {80, 160, 240, 320, 400} to {1, 3, 7, 15, 31}

    ; divide by two    
    lsr zh ; carries over to...
    ror zl
    ;     0   1    2    3    4
    ; {40, 80, 120, 160, 200}
    
    cpi zl, 120     ; compare with 120
    brlo under120   ; < 120


under120:

    
    
    
;23:48 < zauslande> (1) Is it < or >= to the {2,3} boundary, branch accordingly 
;                   to the next comparison.
;23:49 < zauslande> if < then (2) Is it < or >= to the {0,1} boundary, map < to 
;                   0, map >= to 1
;23:49 < zauslande> if >= then (2) Is it < or >= to the {3,4} bondary, map < to 
;                   3, map >= to 4


UPDATE:
    out PORTB, LEDS ; update LEDs    
    ret


REST:
    dec Delay
    brne REST
    dec Delay2
    brne REST

    clr Delay
    clr Delay2

    ret