⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc_measure.asm

📁 本代码是采用台湾松翰单片机sn1919
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;***********************************************************
;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 + -