📄 162a.asm
字号:
;FastAVR Basic Compiler, ver.4.2.0, by MicroDesign
;Created 20:44:35, 09-12-2006
;
.include "C:\FastAVR\inc\m16def.inc"
;
.DSEG
n: .byte 1
volts: .byte 2
voltraw: .byte 2
voltav: .byte 2
.CSEG
.ORG 0x0000
_Reset:
ldi yl,byte1(RAMEND)
out SPL,yl
ldi yh,byte2(RAMEND)
out SPL+1,yh
sbiw yl,32
call LcdIni
;****** USERS BASIC CODE **********************
;-Line--0012----Start Adc,Vref=Int--
ldi zl,0xC0
out ADMUX,zl
ldi zl,0x86
out ADCSR,zl
;-Line--0013----Cursor Off--
ldi r24,0xC
call _LCtr
;-Line--0020----Do--
L0000:
;-Line--0021----For n = 1 To 40 ' sample the adc 40 times for--
ldi zl,byte1(1)
sts n,zl
ldi zl,byte1(40)
push r5
inc zl
mov r5,zl
L0002:
;-Line--0022---- WaitUs 10 '--
ldi zl,byte1(10)
call _Wus
;-Line--0023---- voltraw = Adc(1)--
ldi zl,byte1(1)
in zh,ADMUX
andi zh,0xe0
or zl,zh
out ADMUX,zl
call _Adc
sts voltraw,zl
sts voltraw+1,zh
;-Line--0024---- Locate 1,1: Lcd "Raw Input "; voltraw; " "--
ldi r24,0x7F
push r24
ldi zl,byte1(1)
pop r24
add r24,zl
call _LCtr
ldi zl,byte1(S000*2)
ldi zh,byte2(S000*2)
call _LSc
lds zl,voltraw
lds zh,voltraw+1
call _W2Str
call _LBW
ldi zl,byte1(S001*2)
ldi zh,byte2(S001*2)
call _LSc
;-Line--0025---- voltav = voltav + voltraw--
lds r24,voltav
lds r25,voltav+1
lds zl,voltraw
lds zh,voltraw+1
add zl,r24
adc zh,r25
sts voltav,zl
sts voltav+1,zh
;-Line--0026----Next--
lds zl,n
inc zl
sts n,zl
cp zl,r5
brsh PC+0x02
rjmp L0002
pop r5
L0003:
;-Line--0027----voltav = voltav / 40 ' average the ADC samples--
lds r24,voltav
lds r25,voltav+1
ldi zl,byte1(40)
ldi zh,byte2(40)
call Di16u
sts voltav,zl
sts voltav+1,zh
;-Line--0028----Locate 2,1: Lcd "Filtered "; voltav; " "--
ldi r24,0xBF
push r24
ldi zl,byte1(1)
pop r24
add r24,zl
call _LCtr
ldi zl,byte1(S002*2)
ldi zh,byte2(S002*2)
call _LSc
lds zl,voltav
lds zh,voltav+1
call _W2Str
call _LBW
ldi zl,byte1(S001*2)
ldi zh,byte2(S001*2)
call _LSc
;-Line--0029----Loop--
rjmp L0000
L0001:
;****** END OF USER BASIC CODE ****************
; String constants:
S000: .db "Raw Input ", 0
S001: .db " ", 0
S002: .db "Filtered ", 0
;////// LcdInit ///////////////////////////
LcdIni: in zl,DDRA
ori zl,0xf0
out DDRA,zl
sbi DDRC,6
sbi DDRC,7
cbi PORTC,6
cbi PORTC,7
ldi zl,0x18
rcall _Wms
ldi r24,0x03
rcall _LOut
ldi zl,0x08
rcall _Wms
rcall _LEN
ldi zl,0x0d
rcall _Wus
rcall _LEN
cbi PORTA,4
rcall _LEN
ldi r24,0x28
rcall _LCtr
ldi r24,0x06
rcall _LCtr
ldi r24,0x0c
rcall _LCtr
ldi r24,0x01
rcall _LCtr
ldi zl,0x04
rcall _Wms
ret
_Lch: sbi PORTC,6
rjmp _LNib
_LCtr: cbi PORTC,6
_LNib: mov r21,r24
swap r24
rcall _LOut
mov r24,r21
_LOut: in r23,PORTA
andi r23,0x0f
swap r24
andi r24,0xf0
or r24,r23
out PORTA,r24
rcall _LEN
ret
;////// LcdEN /////////////////////////////
_LEN: sbi PORTC,7
nop
nop
nop
nop
cbi PORTC,7
push zl
ldi zl,0x04
rcall _Wus
pop zl
ret
;////// LCD Byte & Word ///////////////////
_LBW: ld r24,Z+
tst r24
breq _LBW1
rcall _Lch
rjmp _LBW
_LBW1: ret
;////// LCD string constants //////////////
_LSc: elpm r0,Z+
tst r0
breq _LSc1
mov r24,r0
rcall _Lch
rjmp _LSc
_Lsc1: ret
;////// ADC ///////////////////////////////
_Adc: sbi ADCSRA,0x06
_Adc1: sbic ADCSRA,0x04
rjmp _Adc1
in zl,ADCL
in zh,ADCH
sbi ADCSRA,0x04
ret
;////// IntToStr //////////////////////////
_B2str: clr zh
clt
rjmp _W2st4
_W2str: clt
rjmp _W2st4
_I2str: clt
sbrs zh,0x07
rjmp _W2st4
com zl
com zh
subi zl,-0x01
sbci zh,-0x01
set
_W2st4: push yl
push yh
push r6
clr r6
st -Y,r6
_N2str: ldi r21,0x10
sub r22,r22
_N2st1: lsr r6
rol zl
rol zh
rol r22
rol r6
cpi r22,0x0a
brcs _N2st2
sbci r22,0x0a
inc zl
_N2st2: dec r21
brne _N2st1
subi r22,-0x30
st -Y,r22
mov r22,zl
or r22,zh
brne _N2str
_N2st5: brtc _N2st3
ldi zl,0x2d
st -Y,zl
_N2st3: mov zl,yl
pop r6
mov zh,yh
pop yh
pop yl
ret
;////// _Waitms ///////////////////////////
_Wms: ldi r20,0x14
_Wms1: ldi r21,0x7A
_Wms2: dec r21
brne _Wms2
dec r20
brne _Wms1
dec zl
brne _Wms
ret
;////// _waitus ///////////////////////////
_wus: ldi r22,23
_wus1: dec r22
brne _wus1
dec zl
brne _wus
ret
;////// 16/16 unsigned division ///////////
Di16u: mov r22,zl
mov r23,zh
mov zl,r24
mov zh,r25
clr r24
sub r25,r25
ldi r20,0x11
d16u1: rol zl
rol zh
dec r20
brne d16u2
ret
d16u2: rol r24
rol r25
sub r24,r22
sbc r25,r23
brcc d16u3
add r24,r22
adc r25,r23
clc
rjmp d16u1
d16u3: sec
rjmp d16u1
;System Global Variables: 0 bytes
;User Global Variables: 7 bytes
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -