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

📄 adcon.inc

📁 三菱3850单片机温度采集A/D程序,采集256次温度取平均值,再进行查表得温度值
💻 INC
字号:
;*********************************************************
; Rewriter in 2000,5,20
; AD Converter Program
;    Room Pipe Temp     AN7
;    Room_Temp          AN6
;    Result Temp        AN5
;    Defrost Temp       AN4
;    Out SIde Temp      AN3
;---------------------------------------------------------
AD_Convert:
         ;[p3dir] = Initp3dir
         LDM     #00H,AD1
         LDM     #00H,AD2         ; bit7=0 10bit A_D
                                  ; bit7=1 8bit A_D    
         [ADCON] =   RoomADCon    ; 2000.5.12
         do
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
                NOP
         while [ADcomp] == 0
         ;[AD2_buffer] =[AD2] & 00000011B
         CLC
         [mRoomLow]  =[mRoomLow] + [AD1]            
         [mRoomHigh] =[mRoomHigh] + 00h  with_C
         [ADcomp] = 0

Pipe_Temp:
         LDM     #00H,AD1
         LDM     #00H,AD2
         [ADCON] = PipeADCon
         do
                NOP
                NOP
                NOP
                NOP
         while [ADcomp] == 0
         CLC
         [mPipeLow]  =[mPipeLow] + [AD1]		;
         [mPipeHigh]=[mPipeHigh] + 00h with_C		;
         [ADcomp] = 0					;
         INC     AD_Count
                                 			;
ADCon_End:						;AD_Count是完成AD采样255次的计数器,此计数器为0时,
         if   [AD_Count] == 0				;255次采样的累计加完成,采样的平均值就是高位所存的
               [m_RoomADval] = [mRoomHigh]		;值加上低位的近似值,低位大于等于128时,高位所存值
               if [mRoomLow] >= 80H			;加1。小于则不加。然后查表比较。
                        inc     m_RoomADval		;
               endif					;
               [M_PipeTemp]   = [mPipeHigh]		;
               if [mPipeLow] >= 80H			;
                        INC     M_PipeTemp
               endif
;               LDM     #00h,AD_Count
               LDM     #00h,mRoomHigh
               ldm     #00h,mRoomLow
               Ldm     #00h,mPipeHigh
               Ldm     #00h,mPipeLow
               jsr     AD_RoomTemp
               jsr     AD_PipeTemp
               SEB     ADconend_flag
       endif
       RTS
;****************************************************
; AD_RoomTemp Program For tempture M_RoomTemp
;                     For Display  roomtem
;
;****************************************************
AD_RoomTemp:
       if [m_RoomADval] < 0Dh || [m_RoomADval] > 0DAh			;0f0h		;041202用于室内感温包故障检测
            if  [m_30sIndoorerror] > 10;30				;连续30秒检测到不在范围内就报故障
                	[m_30sIndoorerror]=0															;ldm   #00h, m_30sIndoorerror			;
                SEB   b_RoomTempError 				;
            endif						;
       else 							;
                [m_30sIndoorerror]=0																									;ldm   #00h, m_30sIndoorerror			;							;
                clb   b_RoomTempError				; 
       endif							;
       if [m_RoomADval] <= 20 && [m_RoomADval] >=  0Dh		;
                [M_RoomTemp] = 00h
                jmp     outroom
       endif
       if [m_RoomADval] <=  0DAh && [m_RoomADval] >=  209		;
                [M_RoomTemp] = 100
                jmp     outroom
       endif
       ldx      #00h
macher:							;当采样值处在表中两数之间的时候,采取比较法取
        if [TempAD_Tab,x] < [m_RoomADval]		;表中靠近采样值的那个值。
                [A_D]=[m_RoomADval]-[TempAD_Tab,x]	;
                inx					;
                jmp     macher				;
        endif						;
        [A_D]= [A_D] + [m_RoomADval]			;
        if [TempAD_Tab,x] >= [A_D]  &&  x >= 1
             dex
        endif
        stx     M_RoomTemp
outroom:
        RTS
;****************************************************
; AD_pipeTemp Program For tempture Val to M_PipeTemp
;                     For defrost  roomtem
;
;****************************************************
AD_PipeTemp:
       if [M_PipeTemp] < 0Bh || [M_PipeTemp] >  0f0h	        ;041202用于室内感温包故障检测
           if  [m_30sIntipeerror] > 10;30				;
                ldm   #00h, m_30sIntipeerror			;
                SEB   b_TipeTempError 				;连续30秒检测到不在范围内就报故障
           endif						;
       else  	   						;
                ldm   #00h, m_30sIntipeerror   			;
                clb   b_TipeTempError				; 
       endif							;
       if [M_PipeTemp] < 3CH && [M_PipeTemp] >= 0Bh		;
                [m_Tpipetemp] = 00h
                RTS
       endif
       ldx      #00h
Pipecher:
        if [PipeAD_Tab,x] < [M_PipeTemp]
                [A_D]=[M_PipeTemp]-[PipeAD_Tab,x]
                inx
                jmp     Pipecher
        endif
        [A_D]= [A_D] + [M_PipeTemp]
        if [PipeAD_Tab,x] >= [A_D]  &&  x >= 1
             dex
        endif
        stx     m_Tpipetemp
        RTS


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -