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

📄 ad.asm

📁 PIC AD转换小程序 用于PIC芯片带AD转换的各种IC
💻 ASM
字号:
#include <P16F73.INC> 
lIST P=16F73


;-------------变量定义-----------------------------;        
TIME1                 EQU   20H             ;采样延时计时器
CABLE_AD              EQU   21H             ;电缆温度采样AD
CABLE_BC_AD           EQU   22H             ;补偿电缆温度采样AD
FLAG                  EQU   23H             ;AD采样标志
LED_FLAG              EQU   24H             ;
ISR_COUNT1            EQU   25H
        
;-----------------常数定义-----------------------;
RP0          EQU   5
ADIF         EQU   6
ADIE         EQU   6
PEIE         EQU   6
GIE          EQU   7
W            EQU   0
GO           EQU   2
        	
        org	    0x00000	                ;复位地址
	      goto	  Start

	      org	    0x00008	                ;中断地址
	      goto	  ISR	                    ;中断处理程序
	      
	      
	      org	    0x00020
Start
	      BSF     STATUS,RP0              ;设置数据寄存器体1
        MOVLW   B'00000000'
        MOVWF   TRISA                   ;设置RA端口全部为输出
        MOVWF   TRISC                   ;设置RC端口全部位输出
        BCF     STATUS,RP0              ;恢复数据寄存器体0
	      
	      clrf	  PORTA		                ;清端口PORTA	
	      clrf	  PORTC		                ;清端口PORTC
	      call	  InitializeAD 	          ;AD初始化
	      call	  SetupDelay	            ;采样延时
	      bsf	    ADCON0,GO	              ;开始AD转换
	      
Main	  
        
        BTFSC   FLAG,7                  ;判断两组AD转换是否都完成
        GOTO    Main                    ;未完
        
        MOVF    CABLE_AD,W              ;取电缆温度值
        BTFSC   STATUS,2
        GOTO    ERROR_ACT               ;故障
        SUBLW   200                     ;200-W  发生借位则为0  不发生借位则为1
        BTFSS   STATUS,0
        GOTO    RUN_OK                  ;电缆温度大于E0,则系统正常运行
        CLRF    LED_FLAG
        BSF     LED_FLAG,1              ;火警
        GOTO    Main
RUN_OK
        CLRF    LED_FLAG
        BSF     LED_FLAG,0              ;正常运行标志
        goto	  Main		                ;主程序空循环
ERROR_ACT   
        CLRF    LED_FLAG
        BSF     LED_FLAG,2              ;故障
        GOTO    Main
;--------------------子函数-------------------;

;--------------------AD初始化配置子函数---------;
InitializeAD
	      bcf	    PIR1,ADIF	              ;清中断标志
	      BCF     INTCON,2                ;清TMR0溢出标志
	      
        BSF     STATUS,RP0              ;设置数据寄存器体1
	      movlw	  B'00000100'	            ;定义模拟输入端口
	      movwf	  ADCON1                  
	      bsf	    PIE1,ADIE	              ;中断使能
	      MOVLW   B'10000111'             ;设定:RB口不用上拉,分频器配给TMR0,256分频
        MOVWF   OPTION_REG
        BCF     STATUS,RP0              ;恢复数据寄存器体0
                                        
	      movlw	  B'11000001'	            ;选择RC内部时钟,选择AN0通道
	      movwf	  ADCON0		              ;A/D转换模块使能 
        MOVLW   130                     ;125*64=8ms中断一次
        MOVWF   TMR0                                
        MOVLW   60
        MOVWF   ISR_COUNT1              ;480MS置标志
	              
	      bsf	    INTCON,PEIE	            ;本地中断使能
	      BSF     INTCON,5                ;TMR0中断使能
	      bsf	    INTCON,GIE	            ;全局中断使能
        
	      return	     
;--------------------采样延时子函数---------------;
SetupDelay                              ;延时子函数
	      movlw	  3		                  
	      movwf	  TIME1
SD
	      decfsz	TIME1		     
	      goto	  SD
	      return

;-----------------AD中断服务程序------------------;
ISR     
        btfss	  PIR1,ADIF	              ;判断AD转换结束了吗?
	      goto	  TMR0_JUDGE              ;判断时钟溢出
	                                      
	      bcf	    PIR1,ADIF	              ;清中断产生标志
	      movf	  ADRES,W	              ;获得AD转换值
	      
	      MOVWF   CABLE_AD               ;获得电缆温度
	      call	  SetupDelay	            ;延时15个指令周期,采样时间
	      bsf	    ADCON0,GO	              ;开始AD转换        
	      GOTO    EndISR
TMR0_JUDGE
        BTFSS   INTCON,2                ;判断有无时钟溢出中断产生
        GOTO    EndISR                  ;没有则返回	 
        BCF     INTCON,2                ;清溢出标志
        
        DECFSZ  ISR_COUNT1
        GOTO    EndISR
        MOVLW   60
        MOVWF   ISR_COUNT1
        
        BTFSC   LED_FLAG,0
        GOTO    LED_GREEN
        BTFSC   LED_FLAG,1
        GOTO    LED_RED
        BTFSC   LED_FLAG,2
        GOTO    LED_YELLOW
        RETURN
LED_GREEN
        BCF     PORTA,2
        BCF     PORTC,6                 ;清其他灯
        MOVLW   B'00100000'
        XORWF   PORTA                   ;绿灯闪亮
        GOTO    EndISR
LED_RED
        MOVLW   B'00000000'
        MOVWF   PORTA
        BSF      PORTC,6                 ;火警报警,红灯亮
        GOTO    EndISR
LED_YELLOW
        BCF     PORTA,5     
        BCF     PORTC,6
        MOVLW   B'00000100'             ;故障,黄灯闪亮
        XORWF   PORTA
        GOTO    EndISR
        
EndISR    
        retfie		                      ;中断返回
	      END

	      
	     







⌨️ 快捷键说明

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