📄 adc_measure.asm
字号:
;***********************************************************
;INPUT: SENSOR RTD AND SR
;OUTPUT: BODY ADC VALUE BY: STEELJIN 2008-02-01
;***********************************************************
GET_BODY_ADC:
clr SampleTimes
clr AD_Temp1
clr AD_Temp2
clr AD_Temp3
call adc_am0_set
call adcwait
call get_adc_cycle
movff AD_Temp2,RTD_OZH
movff AD_Temp1,RTD_OZL
clr SampleTimes
clr AD_Temp1
clr AD_Temp2
clr AD_Temp3
call adc_am1_set
call adcwait
call get_adc_cycle
movff AD_Temp2,RTD_VH
movff AD_Temp1,RTD_VL
clr SampleTimes
clr AD_Temp1
clr AD_Temp2
clr AD_Temp3
call adc_ob0_set
call adcwait
call get_adc_cycle
movff AD_Temp2,SR_OZH
movff AD_Temp1,SR_OZL
clr SampleTimes
clr AD_Temp1
clr AD_Temp2
clr AD_Temp3
call adc_ob1_set
call adcwait
call get_adc_cycle
movff AD_Temp2,Temp_SRH
movff AD_Temp1,Temp_SRL
ret
;----------------------------------------------
adc_am0_set:
INIT_CPR TurnOnCpr,2.4 ;set CPR as auto mode and AVE+=2.4
AVEON
INIT_PGIA Short,1 ;Select Ai Differential input and PGIA Gain is 1
INIT_ADC OutsideRef,50 ;Selection ADC Reference voltage = V(R+, R-),
Mov A,#120
call Delay
call adcwait
call adcwait
ret
adc_am1_set:
INIT_CPR TurnOnCpr,2.4
AVEON
INIT_PGIA ai1-,1
INIT_ADC OutsideRef,50
Mov A,#10
call Delay
call adcwait
ret
adc_ob0_set:
INIT_PGIA short,50
INIT_ADC InsideRefH,50
Mov A,#10
call Delay
call adcwait
ret
adc_ob1_set:
INIT_PGIA ai1+,50
Mov A,#10
call Delay
call adcwait
ret
;-----------------------------------------------
adcwait:
xb0bclr fdrdy
adc_wait:
xb0bts1 fdrdy ;1:end of adc 0:doing adc
jmp adc_wait
ret
;-----------------------------------------------
get_adc_cycle:
call adcwait
xb0mov a,adcdh
mov wk01,a ;h
xb0mov a,adcdl
mov wk00,a ;l
mov a,#12h
add wk00,a
mov a,#7ah
adc wk01,a
mov a,wk00
add AD_Temp1,a
mov a,wk01
adc AD_Temp2,a
mov a,#0
adc AD_Temp3,a
incms SampleTimes
mov a,#4
cmprs a,SampleTimes
jmp get_adc_cycle
b0bclr fc
rrcm AD_Temp3
rrcm AD_Temp2
rrcm AD_Temp1
b0bclr fc
rrcm AD_Temp3
rrcm AD_Temp2
rrcm AD_Temp1
ret
;************************************************
;input: ADCBankH,ADCBankL; RTD_OZH,RTD_OZL;25C Resistance
;Output: TEMP_RTDH,TEMP_RTDL
;************************************************
GetTemp_RTD:
movff RTD_VH,wk03
movff RTD_VL,wk02
movff RTD_OZH,wk01
movff RTD_OZL,wk00
Call sub_hex2b
movff wk01,wk05
movff wk00,wk04
mov a,#24h
b0mov addr,a
Read_24C02 addr,wk03,wk02
movff wk03,wk01
movff wk02,wk00
Call mul_hex2b
clr wk07
clr wk06
movff RTD_GH,wk05
movff RTD_GL,wk04
Call div_hex4b
movff wk01,RTD_VH
movff wk00,RTD_VL
call ScanRTb
ret
;.................................
;input: RTD_VH,RTD_VL
;output: TEMP_RTDH,TEMP_RTDL
; TEMP_RTD1H,TEMP_RTD1L
; RTD_TOutFlag
;.................................
ScanRTb:
;bcf INTE,GIE
mov a,#0f0h
b0mov addr,a ;40 C
B0BCLR RTD_TOutFlag
Read_24C02 addr,wk03,wk02
movff RTD_VH,wk01
movff RTD_VL,wk00
Call sub_hex2b
b0bts0 fc
jmp RTDOutRange
mov a,#0a0h ;0
b0mov addr,a
Read_24C02 addr,wk03,wk02
movff RTD_VH,wk01
movff RTD_VL,wk00
Call sub_hex2b
b0bts1 fc
jmp RTDOutRange
ScanRTbLoop:
incms addr
incms addr
Read_24C02 addr,wk03,wk02
movff wk03,ScanTempH
movff wk02,ScanTempL
movff RTD_VH,wk01
movff RTD_VL,wk00
Call sub_hex2b
b0bts1 fc
jmp ExitScanRTb
movff ScanTempH,ScanBufferH
movff ScanTempL,ScanBufferL
jmp ScanRTbLoop
ExitScanRTb: ;ScanTemp,RTD_V,ScanBuffer
mov a,addr
sub a,#0a2h
mov TEMP_RTDH,a
mov a,ScanBufferL
sub a,ScanTempL
mov wk00,a
mov a,ScanBufferH
sbc a,ScanTempH
mov wk01,a
clr wk02
clr wk03
clr wk05
clr wk06
clr wk07
mov a,#10
mov wk04,a
call div_hex4b
movff wk01,ScanTempH
movff wk00,ScanTempL
mov a,ScanBufferL
sub a,RTD_VL
mov wk04,a
mov a,ScanBufferH
sbc a,RTD_VH
mov wk05,a
clr wk01
mov a,#10
mov wk00,a
call mul_hex2b
clr wk06
clr wk07
movff ScanTempH,wk05
movff ScanTempL,wk04
call div_hex4b
movff wk00,TEMP_RTDL
mov a,TEMP_RTDL
sub a,#100
b0bts1 fc
jmp ExitScanRTb1
clr TEMP_RTDL
incms TEMP_RTDH
nop
incms TEMP_RTDH
nop
ExitScanRTb1:
clr wk01
clr wk05
b0bclr fc
rrcm TEMP_RTDH
mov a,#100
mov wk00,a
movff TEMP_RTDH,wk04
call mul_hex2b
movff wk01,TEMP_RTD1H
movff TEMP_RTDL,TEMP_RTD1L
mov a,wk00
add TEMP_RTD1L,a
nop
mov a,#0
adc TEMP_RTD1H,a
ret
;..............................
RTDOutRange:
B0BSET RTD_TOutFlag
ret
;++++++++++++++++++++++++++++++++++++++++++++++++
;.......................................
;input:TEMP_RTDH,TEMP_RTDL
;output:SR_VH,SR_VL
;......................................
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -