;Program to read in an analog voltage from pin PE1 of the
;EVBU (pin #45) and display result, in volts (decimal) to
;the screen. Uses MULT=0, and SCAN=0.
option .cequ $1039
adctl .cequ $1030
adr1 .cequ $1031
outa .cequ $FFB8 ;addr. of Buffalo .outa routine
outst0 .cequ $FFCA ; " " .outst0 routine
.org $0000
jmp $0100
temp .rs 2 ;temporary variable storage area
.org $0100
main: ldx #option
bset 0,X,$80 ;set the ADPU bit
loop: jsr delay ;do a one second delay
ldaa #b'00000001 ;choose PE1 input
staa adctl ;SCAN=MULT=0/clear CCF flag
ldx #adctl ;to start conversion.
brclr 0,X,$80,* ;Wait till CCF sets
ldaa #10
ldab adr1 ;read in result
mul ;AxB-->D 1st mult. by 10, so we can
;find ones and tenths voltage digits
ldx #510 ;divide D by 51*10 to get 1's digit
idiv ;D/IX --> IX, REM-->D
std temp ;save remainder
pshx ;quick way to transfer IXL to Acc. A
pula
pula ;quotient now in Acc. A
adda #48 ;convert to ASCII
jsr outa ;send out to screen
ldaa #'.' ;write a decimal point
jsr outa
ldd temp ;retrieve remainder-divide by 51
ldx #51 ;to get 10'ths digit
idiv
pshx
pula
pula ;IXL --> Acc. A
adda #48 ;convert decimal digit to ASCII
jsr outa
ldx #term
jsr outst0 ;send termination string
bra loop
term: .db " Volts",CR,LF,EOT ;termination string
CR .cequ $0D ;carriage return ASCII code
LF .cequ $0A ;line feed ASCII code
EOT .cequ $04 ;End of Transmission ASCII code
delay: ldx #0000 ;Subroutine to delay ~1 sec
l1: mul ;used to waste time (10 E-cycles)
mul ;(10 E-cycles)
subd #0 ;(4 E-cycles)
dex ;(3 E-cycles)
bne l1 ;(3 E-cycles)
rts
.end