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

📄 pic12c671.asm

📁 PIC12C671做的多功能双电源检测器 主电压低时自动转换为备用电池
💻 ASM
字号:
     ORG      000
     GOTO     A1
;-------------------------------------------------------------------
;程序初始化
;-------------------------------------------------------------------
     ORG      005
A1   BSF      0X03,5                ;1区
     MOVLW    0X5F              ;定时256分
     MOVWF    0X01
     MOVLW    0x06              ;设模数输入
     MOVWF    0X1F
     MOVLW    0X00               ;关中断
     MOVWF    0X0B
     MOVLW    0X00               ;设输出
     MOVWF    0X05
     BCF      0X03,5                ;0区
     MOVLW    0X00               ;输出清零
     MOVWF    0X05
     MOVLW    0X3D               ;1.19V
     MOVWF    30
     MOVLW    0X60               ;1.79V
     MOVWF    31
     MOVLW    0X6B               ;2.1V
     MOVWF    32
     MOVLW    0X2B               ;0.85V
     MOVWF    33
     BTFSS    0X05,3             ;测输出设定    =1跳
     GOTO     D1
     CLRF     34
     GOTO     D2
D1   MOVLW    0XFF               ;GPI4=0
     MOVWF    34
D2   CALL     LD1                ;开机鉴定
     NOP
     NOP
     MOVF     0X1E,0             ;结果到W
     SUBWF    0X31,0             ;F减W
     BTFSC    0X3,0              ;C=0 即结果为负 就跳 >19V
     GOTO     LD12               ;12V电源
     GOTO     LD24               ;24V电源

;----------------------------------------------------------------------
;12V电源运行区
;---------------------------------------------------------------------
LD12  CALL     LD1                ;测试主电压
      NOP
      NOP
      MOVF     0X1E,0             ;结果到W
      SUBWF    0X30,0             ;F减W
      BTFSC    0X3,0              ;C=0 即结果为负 就跳 >12.5V
      GOTO     B1                 ;电压低
B2    BTFSC    0X34,3             ;测输出设定    =0跳
      GOTO     B9
      MOVLW    0X30               ;12V电压足够
      MOVWF    0X05               ;开主电源
      GOTO     B10
B9    MOVLW    0X20               ;12V电压足够
      MOVWF    0X05               ;开主电源
B10   CALL     DS1                ;定时1.5秒
      GOTO     LD12
B1    MOVLW    0X24
      MOVWF    0X05
B5    CALL     DS2                ;定时2秒
      BTFSC    0X34,3             ;测输出设定    =0跳
      GOTO     B7
      MOVLW    0X04               ;12V电压不足够
      MOVWF    0X05               ;开备电源
      GOTO     B8
B7    MOVLW    0X14               ;输出报警 1
      MOVWF    0X05
B8    CALL     LD1                ;测试主电压
      NOP
      NOP
      MOVF     0X1E,0             ;结果到W
      SUBWF    0X30,0             ;F减W
      BTFSC    0X3,0              ;C=0 即结果为负 就跳 >12.5V
      GOTO     B3
      MOVLW    0X24               ;12V电压足够
      MOVWF    0X05
      CALL     DS2                ;定时2秒
      GOTO     B2
B3    CALL     DS1                ;定时1.5秒
      CALL     LD2                  ;测试备电压
      NOP
      NOP
      MOVF     0X1E,0             ;结果到W
      SUBWF    0X33,0             ;F减W
      BTFSC    0X3,0              ;C=0 即结果为负 就跳 >10V
      GOTO     B4
      GOTO     B5
B4    CALL     DS2                 ;定时2秒
      CALL     LD1                  ;测试主电压
      NOP
      NOP
      MOVF     0X1E,0             ;结果到W
      SUBWF    0X30,0             ;F减W
      BTFSC    0X3,0              ;C=0 即结果为负 就跳 >12.5V
      GOTO     B6
      GOTO     B5
B6    MOVLW    0X10               ;输出清零
      MOVWF    0X05
      CALL     DS2
      CALL     LD1
      NOP
      NOP
      MOVF     0X1E,0             ;结果到W
      SUBWF    0X30,0             ;F减W
      BTFSC    0X3,0              ;C=0 即结果为负 就跳 >12.5V
      GOTO     B6
      GOTO     LD12
;----------------------------------------------------------------------
;24V电源运行区
;---------------------------------------------------------------------

LD24  CALL     LD1                ;测试主电压
      NOP
      NOP
      MOVF     0X1E,0             ;结果到W
      SUBWF    0X32,0             ;F减W
      BTFSC    0X3,0              ;C=0 即结果为负 就跳 >23V
      GOTO     E1                 ;电压低
E2    BTFSC    0X34,3             ;测输出设定    =0跳
      GOTO     E9
      MOVLW    0X30               ;12V电压足够
      MOVWF    0X05               ;开主电源
      GOTO     E10
E9    MOVLW    0X20               ;23V电压足够
      MOVWF    0X05               ;开主电源
E10   CALL     DS1                ;定时1.5秒                ;定时1.5秒
      GOTO     LD24
E1    MOVLW    0X24
      MOVWF    0X05
E5    CALL     DS2                ;定时2秒
      BTFSC    0X34,3             ;测输出设定    =0跳
      GOTO     E7
      MOVLW    0X04               ;23V电压不足够
      MOVWF    0X05               ;开备电源
      GOTO     E8
E7    MOVLW    0X14               ;输出报警 1
      MOVWF    0X05
E8    CALL     LD1                ;测试主电压
      NOP
      NOP
      MOVF     0X1E,0             ;结果到W
      SUBWF    0X32,0             ;F减W
      BTFSC    0X3,0              ;C=0 即结果为负 就跳 >23V
      GOTO     E3
      MOVLW    0X24               ;23V电压足够
      MOVWF    0X05
      CALL     DS2                ;定时2秒
      GOTO     E2
E3    CALL     DS1                ;定时1.5秒
      CALL     LD2                  ;测试备电压
      NOP
      NOP
      MOVF     0X1E,0             ;结果到W
      SUBWF    0X33,0             ;F减W
      BTFSC    0X3,0              ;C=0 即结果为负 就跳 >10V
      GOTO     E4
      GOTO     E5
E4    CALL     DS2                 ;定时2秒
      CALL     LD1                  ;测试主电压
      NOP
      NOP
      MOVF     0X1E,0             ;结果到W
      SUBWF    0X32,0             ;F减W
      BTFSC    0X3,0              ;C=0 即结果为负 就跳 >23V
      GOTO     E6
      GOTO     E5
E6    MOVLW    0X10               ;输出清零
      MOVWF    0X05
      CALL     DS2
      CALL     LD1
      NOP
      NOP
      MOVF     0X1E,0             ;结果到W
      SUBWF    0X32,0             ;F减W
      BTFSC    0X3,0              ;C=0 即结果为负 就跳 >12.5V
      GOTO     E6
      GOTO     LD24

;-------------------------------------------------------------------
;模数转换区
;------------------------------------------------------------------


LD1  MOVLW    0X05               ;转AN0
     MOVWF    0X4F
A5   BTFSC    0X1F,2              ;完否?
     GOTO     A5
     RETURN
LD2  MOVLW    0X0f               ;转AN1
     MOVWF    0X1F
A6   BTFSC    0X1F,2              ;完否?
     GOTO     A6
     RETURN

;------------------------------------------------------------
;定时程序区
;----------------------------------------------------------------
DS1  BCF      0X03,5                ;0区
     MOVLW    0X64                  ;定时1.5秒
     MOVWF    40
C3   CLRWDT
     MOVLW    0X80
     MOVWF    41
C2   MOVLW    0X25
     MOVWF    42
C1   DECFSZ   0X42,1                ;减1=0就跳
     GOTO     C1
     DECFSZ   0X41,1
     GOTO     C2
     DECFSZ   0X40,1
     GOTO     C3
     CLRWDT
     RETURN

DS2  BCF      0X03,5                ;0区
     MOVLW    0X64                  ;定时2秒
     MOVWF    40
C6   CLRWDT
     MOVLW    0X80
     MOVWF    41
C5   MOVLW    0X32
     MOVWF    42
C4   DECFSZ   0X42,1                ;减1=0就跳
     GOTO     C4
     DECFSZ   0X41,1
     GOTO     C5
     DECFSZ   0X40,1
     GOTO     C6
     CLRWDT
     RETURN
     END










  MOVLW    0x3C
     MOVWF    0X05
     CALL     A2
     MOVLW    0x00
     MOVWF    0X05
     CALL     A2
     GOTO     LD24





A2   BCF      0X03,5                ;0区
     MOVLW    0xFE
     MOVWF    0X20
A3   MOVLW    0xFE
     MOVWF    0X21
A4   DECFSZ   0X21,1
     GOTO     A4
     DECFSZ   0X20,1
     GOTO     A3
     RETURN























⌨️ 快捷键说明

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