📄 ad.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 + -