?? adc.asm
字號:
;/////////////////////////////////////////////////////////////////////
;此子程序將進行AD轉換和AD處理,處理后的12位AD值中低八位存放在
;adc_buffer_low中,高四位存放在adc_buffer_hi寄存器的低四位
;/////////////////////////////////////////////////////////////////////
@@adc:
clr adc_buffer_hi
clr adc_buffer_low
call @@adc_converting
call @@adc_converting
call @@adc_converting
call @@adc_converting
call @@adc_converting
call @@adc_converting
call @@adc_converting
call @@adc_converting
@@division_eight:
b0bclr fc
rrcm adc_buffer_low
b0bclr fc
rrcm adc_buffer_low
b0bclr fc
rrcm adc_buffer_low ;將低位向右依三位除八
b0bclr fc
rrcm adc_buffer_hi ;將高位向右移一位然后判斷溢出的數是否為1
b0bts0 fc
b0bset adc_buffer_low.5 ;如果為1則將低位第5位置1
b0bclr fc
rrcm adc_buffer_hi
b0bts0 fc
b0bset adc_buffer_low.6
b0bclr fc
rrcm adc_buffer_hi
b0bts0 fc
b0bset adc_buffer_low.7
ret
;/////////////////////////////////////////////////////////////////////
;循環5次進行AD轉換,每次的值分別連續放在ADC_BUFFER中
;/////////////////////////////////////////////////////////////////////
@@adc_converting:
b0bset fgchs
mov a #05h
mov temp1 a ;單次循環轉換次數重裝載
clr y
b0mov z #adc_buffer$l ;取adc_buffer的低位地址
@@cycle_converting:
b0bset fads ;開始轉換
@@endconverting:
b0bts1 feoc
jmp @@endconverting
mov a adb
mov @yz a
incms z
nop
mov a adr
and a #0fh
mov @yz a
incms z
nop
decms temp1
jmp @@cycle_converting
;/////////////////////////////////////////////////////////////////////
;將ADC_BUFFER中的數據依大小排序,將最小的數放在ADC_BUFFER中最前面
;/////////////////////////////////////////////////////////////////////
@@sequence_arrange_initialization:
mov a #04h
mov temp2 a
@@sequence_arrange:
mov a #04h
mov temp1 a
clr y
b0mov z #adc_buffer$l ;送adc_bufer的地址到z
@@start_sequence_arrange:
; call @@getdata
@@getdata1:
b0mov a @yz ;將當前YZ的數據送往temp3
mov temp3 a
mov a #2h ;
add z a
mov a @yz ;將后兩個地址數據送A
decms z
nop
decms z
nop
cmprs a temp3 ;判斷第一數高8位與第二數的高8位大小
jmp @@check_fc1
@@check_adc_buffer_low:
incms z ;將地址切換到第1位數據的低8位
nop
; call @@getdata
@@getdata2:
b0mov a @yz ;將當前YZ的數據送往temp3
mov temp3 a
mov a #2h ;
add z a
mov a @yz ;將后兩個地址數據送A
decms z
nop
decms z
nop
; ret
cmprs a temp3 ;比較兩數大小
jmp @@check_fc2
incms z ;將地址切換到第二位數據的高8位
nop
jmp @@next_cycel
@@check_fc1:
b0bts0 fc ;判斷第一數高8位與第二數的高8位大小
jmp @@change_add1
; call @@change_adc_buffer_place;交換第一數高8位與第二數的高8位的數據
@@change_adc_buffer_place1:
mov a @yz
mov temp3 a ;將當前高位地址yz數據送往temp3
mov a #2h
add z a ;將地址切到yz+2
mov a @yz ;讀取YZ+2地址中的數據送往a
b0xch a temp3 ;將YZ地址中的數據與YZ+2地址中的數據進行交換
mov @yz a
decms z ;將地址切回到yz。
nop
decms z
nop
b0xch a temp3
mov @yz a ;將YZ+2地址中的數據送往yz
; ret
incms z ;將地址切換到第1位數據的低8位
nop
; call @@change_adc_buffer_place;交換第一數低8位與第二數的低8位的數據
@@change_adc_buffer_place2:
mov a @yz
mov temp3 a ;將當前高位地址yz數據送往temp3
mov a #2h
add z a ;將地址切到yz+2
mov a @yz ;讀取YZ+2地址中的數據送往a
b0xch a temp3 ;將YZ地址中的數據與YZ+2地址中的數據進行交換
mov @yz a
decms z ;將地址切回到yz。
nop
decms z
nop
b0xch a temp3
mov @yz a ;將YZ+2地址中的數據送往yz
; ret
incms z ;將地址切換到第二位數據的高8位
nop
jmp @@next_cycel
@@change_add1:
mov a #2h ;將地址切換到第二位數據的高8位
add z a
jmp @@next_cycel
@@check_fc2:
b0bts0 fc ;判斷第一數低8位與第二數的低8位大小
jmp @@change_add2
; call @@change_adc_buffer_place;交換第一數低8位與第二數的低8位的數據
@@change_adc_buffer_place3:
mov a @yz
mov temp3 a ;將當前高位地址yz數據送往temp3
mov a #2h
add z a ;將地址切到yz+2
mov a @yz ;讀取YZ+2地址中的數據送往a
b0xch a temp3 ;將YZ地址中的數據與YZ+2地址中的數據進行交換
mov @yz a
decms z ;將地址切回到yz。
nop
decms z
nop
b0xch a temp3
mov @yz a ;將YZ+2地址中的數據送往yz
; ret
decms z ;將地址切換到第1位數據的高8位
nop
; call @@change_adc_buffer_place;交換第一數高8位與第二數的高8位的數據
@@change_adc_buffer_place4:
mov a @yz
mov temp3 a ;將當前高位地址yz數據送往temp3
mov a #2h
add z a ;將地址切到yz+2
mov a @yz ;讀取YZ+2地址中的數據送往a
b0xch a temp3 ;將YZ地址中的數據與YZ+2地址中的數據進行交換
mov @yz a
decms z ;將地址切回到yz。
nop
decms z
nop
b0xch a temp3
mov @yz a ;將YZ+2地址中的數據送往yz
; ret
mov a #2h
add z a ;將地址切換到第二位數據的高8位
jmp @@next_cycel
@@change_add2:
incms z ;將地址切換到第二位數據的高8位
nop
jmp @@next_cycel
@@next_cycel:
decms temp1
jmp @@start_sequence_arrange
decms temp2
jmp @@sequence_arrange
jmp @@exit_sequence_arrange
;/////////////////////////////////////////////////////////////////////
;獲取當前YZ地址和YZ+2地址中的數據,分別存在TEMP3和A中
;/////////////////////////////////////////////////////////////////////
;@@getdata:
; b0mov a @yz ;將當前YZ的數據送往temp3
; mov temp3 a
; mov a #2h ;
; add z a
; mov a @yz ;將后兩個地址數據送A
; decms z
; nop
; decms z
; nop
; ret
;/////////////////////////////////////////////////////////////////////
;將YZ地址和YZ+2地址中的數據進行交換
;/////////////////////////////////////////////////////////////////////
;@@change_adc_buffer_place:
; mov a @yz
; mov temp3 a ;將當前高位地址yz數據送往temp3
; mov a #2h
; add z a ;將地址切到yz+2
; mov a @yz ;讀取YZ+2地址中的數據送往a
; b0xch a temp3 ;將YZ地址中的數據與YZ+2地址中的數據進行交換
; mov @yz a
; decms z ;將地址切回到yz。
; nop
; decms z
; nop
; b0xch a temp3
; mov @yz a ;將YZ+2地址中的數據送往yz
; ret
@@exit_sequence_arrange:
clr y
clr z
@@sum_adc_data:
b0mov z #adc_buffer$l
mov a #4h ;取出AD中間值
add z a
swapm @yz ;將高八位的低四位與高四位交換后送A
mov a @yz
and a #0f0h
incms z
nop
add @yz a ;將原高八位中的低四位與adc值的低四位疊加
mov a @yz ;將AD值的低8位與adc_buffer_low中的數據累加
add adc_buffer_low a
b0bts1 fc ;如果發生進位則將adc_buffer_hi中的值加一
jmp @@sum_adc_buffer_hi
incms adc_buffer_hi
nop
@@sum_adc_buffer_hi:
decms z
nop
mov a #0fh
and @yz a ;將高四位值清0
mov a @yz ;將ADC的高位值與adc_buffer_hi中的值累加
add adc_buffer_hi a
@@ret_adc:
ret
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -