📄 uvb_sensor.asm
字号:
;******************程序说明***************
LIST P=16F873
INCLUDE P16F873.INC
;******************片内RAM常用资源,变量和相应说明**********
N EQU 20H
M EQU 21H
ACCALO EQU 22H
ACCAHI EQU 23H
ACCBLO EQU 24H
ACCBHI EQU 25H
ACCCLO EQU 26H
ACCCHI EQU 27H
ACCDLO EQU 28H
ACCDHI EQU 29H
TEMP EQU 2AH
SHI EQU 2BH
GE EQU 2CH
XIAO EQU 2DH
M_TEMP EQU 2EH
TEMPL EQU 2FH
TEMPH EQU 30H
DD EQU 31H
PAGEADD EQU 32H
PAGENUM EQU 33H
CLMADD EQU 34H
CLMSUM EQU 35H
FLAGE EQU 36H
TH1 EQU 37H
TL1 EQU 38H
TH2 EQU 39H
TL2 EQU 3AH
JI EQU 3BH
COUNT EQU 3CH
MAXH EQU 3EH
MAXL EQU 3FH
MINH EQU 40H
MINL EQU 41H
TEH EQU 42H
TEL EQU 43H
FLAGE1 EQU 44H
in_l equ 45h
in_h equ 46h
index equ 47h
TMR00 EQU 48H
;******************芯片复位矢量****************************
ORG 0X0000
NOP
START
GOTO MAIN
;******************中断矢量********************************
ORG 0X0004
;AD中断
BCF PIR1,ADIF
WAIT
BANKSEL ADRESL
MOVF ADRESL,W
BANKSEL ACCBLO
ADDWF ACCBLO,F
BTFSS STATUS,C
GOTO AD_ADD
INCF ACCBHI,F
AD_ADD
MOVF ADRESH,W
ADDWF ACCBHI,F
RETFIE
;******************主程序***********************************
ORG 0X0040
MAIN
;初始化
CLRF FLAGE1
MOVLW 80H
MOVWF MINL
MOVWF MAXL
CLRF MAXH
CLRF MINH
CLRF TEMPL
CLRF TEMPH
BANKSEL TRISA ;BANK1
MOVLW B'00000111' ;RA0-RA2为输入其中0-1为AD输入
MOVWF TRISA
; CLRF TRISB
;OR
BCF TRISB,4
BCF TRISB,3 ;RB口为输出口
BCF TRISB,2 ;但RB7,RB6为调试器所用
BCF TRISB,1
BCF TRISB,0
;OR END
CLRF TRISC
BSF PIE1,ADIE
MOVLW B'10000100'
MOVWF ADCON1
BANKSEL PORTA
BSF PORTB,4
CALL TIME2MS
BCF PORTB,4
CLRF DD
CLRF in_h
CLRF in_l
;以下为固定显示
;2和3区00H开始显示电流
;0和1区00H到08H为十位数,09H到11H为个位数,12H和13H为小数点,14H到1DH为小数,1EHA
;先显示固定
CALL INTITM
shouming
CALL QIANWAN
MOVLW B'10111010'
CALL OUTMI
CALL OUTSI
MOVLW .55
MOVWF TEMP
clrf GE
s1
movf GE,w
CALL OUTMI
movf in_l,w ;get low byte of pointer
movwf index ;set to index buffer
movf in_h ,w ;get high byte of pointer
movwf index+1 ;set to index+1 buffer
pagesel LTABLE ;make sure page is set correctly
call LTABLE ;call table look-up
pagesel $
CALL OUTMD
MOVLW .1
ADDWF in_l
BTFSC STATUS,C
incf in_h,f
incf GE,f
DECFSZ TEMP,F
GOTO s1
MOVLW .1
ADDWF in_l
BTFSC STATUS,C
incf in_h,f
MOVLW .55
MOVWF TEMP
clrf GE
s2
movf GE,w
CALL OUTSI
movf in_l,w ;get low byte of pointer
movwf index ;set to index buffer
movf in_h,w ;get high byte of pointer
movwf index+1 ;set to index+1 buffer
pagesel LTABLE ;make sure page is set correctly
call LTABLE ;call table look-up
pagesel $
CALL OUTSD
MOVLW .1
ADDWF in_l
btfsc STATUS,C
incf in_h,f
incf GE,f
DECFSZ TEMP,F
GOTO s2
MOVLW .1
ADDWF in_l
BTFSC STATUS,C
incf in_h,f
MOVLW B'10111011'
CALL OUTMI
CALL OUTSI
MOVLW .55
MOVWF TEMP
clrf GE
s3
movf GE,w
CALL OUTMI
movf in_l,w ;get low byte of pointer
movwf index ;set to index buffer
movf in_h ,w ;get high byte of pointer
movwf index+1 ;set to index+1 buffer
pagesel LTABLE ;make sure page is set correctly
call LTABLE ;call table look-up
pagesel $
CALL OUTMD
MOVLW .1
ADDWF in_l
btfsc STATUS,C
incf in_h,f
incf GE,f
DECFSZ TEMP,F
GOTO s3
MOVLW .1
ADDWF in_l
BTFSC STATUS,C
incf in_h,f
MOVLW .55
MOVWF TEMP
clrf GE
s4
movf GE,w
CALL OUTSI
movf in_l,w ;get low byte of pointer
movwf index ;set to index buffer
movf in_h,w ;get high byte of pointer
movwf index+1 ;set to index+1 buffer
pagesel LTABLE ;make sure page is set correctly
call LTABLE ;call table look-up
pagesel $
CALL OUTSD
MOVLW .1
ADDWF in_l
btfsc STATUS,C
incf in_h,f
incf GE,f
DECFSZ TEMP,F
GOTO s4
MOVLW .1
ADDWF in_l
BTFSC STATUS,C
incf in_h,f
MOVLW B'10111000'
CALL OUTMI
CALL OUTSI
MOVLW .55
MOVWF TEMP
clrf GE
s5
movf GE,w
CALL OUTMI
movf in_l,w ;get low byte of pointer
movwf index ;set to index buffer
movf in_h ,w ;get high byte of pointer
movwf index+1 ;set to index+1 buffer
pagesel LTABLE ;make sure page is set correctly
call LTABLE ;call table look-up
pagesel $
CALL OUTMD
MOVLW .1
ADDWF in_l
btfsc STATUS,C
incf in_h,f
incf GE,f
DECFSZ TEMP,F
GOTO s5
MOVLW .1
ADDWF in_l
BTFSC STATUS,C
incf in_h,F
MOVLW .55
MOVWF TEMP
clrf GE
s6
movf GE,w
CALL OUTSI
movf in_l,w ;get low byte of pointer
movwf index ;set to index buffer
movf in_h,w ;get high byte of pointer
movwf index+1 ;set to index+1 buffer
pagesel LTABLE ;make sure page is set correctly
call LTABLE ;call table look-up
pagesel $
CALL OUTSD
MOVLW .1
ADDWF in_l
btfsc STATUS,C
incf in_h,F
incf GE,F
DECFSZ TEMP,F
GOTO s6
MOVLW .1
ADDWF in_l
BTFSC STATUS,C
incf in_h,f
MOVLW B'10111001'
CALL OUTMI
CALL OUTSI
MOVLW .55
MOVWF TEMP
clrf GE
s7
movf GE,w
CALL OUTMI
movf in_l,w ;get low byte of pointer
movwf index ;set to index buffer
movf in_h ,w ;get high byte of pointer
movwf index+1 ;set to index+1 buffer
pagesel LTABLE ;make sure page is set correctly
call LTABLE ;call table look-up
pagesel $
CALL OUTMD
MOVLW .1
ADDWF in_l,F
btfsc STATUS,C
incf in_h,F
incf GE,F
DECFSZ TEMP,F
GOTO s7
MOVLW .1
ADDWF in_l,F
BTFSC STATUS,C
incf in_h,F
MOVLW .55
MOVWF TEMP
clrf GE
s8
movf GE,w
CALL OUTSI
movf in_l,w ;get low byte of pointer
movwf index ;set to index buffer
movf in_h,w ;get high byte of pointer
movwf index+1 ;set to index+1 buffer
pagesel LTABLE ;make sure page is set correctly
call LTABLE ;call table look-up
pagesel $
CALL OUTSD
MOVLW .1
ADDWF in_l,F
btfsc STATUS,C
incf in_h,F
incf GE,F
DECFSZ TEMP,F
GOTO s8
MOVLW .1
ADDWF in_l,F
BTFSC STATUS,C
incf in_h,F
CALL DELAY2S
MOVF in_l,W
MOVWF TL1
MOVF in_h,W
MOVWF TH1
MOVLW .6
MOVWF TH2
MOVLW 0FBH
MOVWF TL2
CALL BI
BTFSC FLAGE,0
GOTO shouming
CLRF in_l
CLRF in_h
CALL QIANWAN
;电上半部 2区
MOVLW B'10111010'
CALL OUTMI
CALL OUTSI
MOVLW .0
CALL OUTMI
MOVLW .16
MOVWF N
MOVLW .1
MOVWF M
MOVWF M_TEMP
CALL WORD_NEXT_M
;电下半部分 3区
MOVLW B'10111011'
CALL OUTMI
CALL OUTSI
MOVLW .0
CALL OUTMI
MOVLW .16
MOVWF N
MOVLW .2
MOVWF M
MOVWF M_TEMP
CALL WORD_NEXT_M
;流上半部分 2区
MOVLW B'10111010'
CALL OUTMI
CALL OUTSI
MOVLW .17
CALL OUTMI
MOVLW .16
MOVWF N
MOVLW .9
MOVWF M
MOVWF M_TEMP
CALL WORD_NEXT_M
;流下半部分 3区
MOVLW B'10111011'
CALL OUTMI
CALL OUTSI
MOVLW .17
CALL OUTMI
MOVLW .16
MOVWF N
MOVLW .10
MOVWF M
MOVWF M_TEMP
CALL WORD_NEXT_M
;小数点
MOVLW B'10111000'
CALL OUTMI
CALL OUTSI
MOVLW .17
CALL OUTMI
MOVLW 00H
CALL OUTMD
MOVLW B'10111001'
CALL OUTMI
CALL OUTSI
MOVLW .18
CALL OUTMI
MOVLW 60H
CALL OUTMD
MOVLW B'10111000'
CALL OUTMI
CALL OUTSI
MOVLW .17
CALL OUTMI
MOVLW 00H
CALL OUTMD
MOVLW B'10111001'
CALL OUTMI
CALL OUTSI
MOVLW .18
CALL OUTMI
MOVLW 60H
CALL OUTMD
;A
MOVLW B'10111000'
CALL OUTMI
CALL OUTSI
MOVLW .27
CALL OUTMI
MOVLW .8
MOVWF N
MOVLW .21
MOVWF M
MOVWF M_TEMP
CALL WORD_NEXT_W_M
MOVLW B'10111001'
CALL OUTMI
CALL OUTSI
MOVLW .27
CALL OUTMI
MOVLW .8
MOVWF N
MOVLW .22
MOVWF M
MOVWF M_TEMP
CALL WORD_NEXT_W_M
;初始化结束
;以下为电源监控
BANKSEL PORTA ;BANK0
BSF INTCON,PEIE
BSF INTCON,GIE
BS_NEXT
CLRF N
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -