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

📄 uvb_sensor.asm

📁 磁场测量仪器的源代码 包括:1.传感器AD转换程序 2.LCD汉显使用说明 基于16F873单片机。 12232LCD 在MPLAB里调试成功
💻 ASM
📖 第 1 页 / 共 4 页
字号:
  
;******************程序说明***************
  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 + -