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

📄 2005-8-26.asm

📁 阀位控制器源程序 利用PIC16F873A
💻 ASM
📖 第 1 页 / 共 2 页
字号:

     K1        BCF         STATUS,0            ;清C
               MOVLW       3H                  ;设置误差2,影响精确度
               SUBWF       DATE6,W             ;差值-2H
               BTFSS       STATUS,0            ;判C
               GOTO        Y1                  ;若在允许误差范围之内
               BSF         PORTB,5             ;确定关指示灯灭
               BSF         PORTB,7             ;确定电机停转

               BTFSS       FLAG,3              ;电机运行标志
               GOTO        K4
               MOVLW       019H
               MOVWF       COUNT6
               CALL        DELAY1             
               BCF         FLAG,3

     K4        BCF         PORTB,4             ;开运行指示灯亮
               BCF         PORTB,6             ;电机正转
               BSF         FLAG,4
               BCF         FLAG,0
               BSF         FLAG,2              ;电机(正转)运行标志(针对突变) 
               GOTO        START               ;到开始

     Y1        BSF         PORTB,6             ;电机停止转动
               BSF         PORTB,4             ;开运行指示灯灭
               BSF         FLAG,0              ;置电机停标志位
               BCF         FLAG,2
               GOTO        START
            ;*********开运行********
    X1         MOVF        DATE5,W  
               BSF         STATUS,0
               BSF         STATUS,2
               SUBWF       DATE4,W
               MOVWF       DATE6
               BTFSC       STATUS,2
               GOTO        Y1

               BTFSS       FLAG,0              ;电机运行标志
               GOTO        K2
               BCF         STATUS,0            ;判启动          
               MOVLW       4H
               SUBWF       DATE6,W
               BTFSS       STATUS,0
               GOTO        ADJUST1             ;误差<启动误差跳到Y2,不启动
               MOVLW       019H
               MOVWF       COUNT6
               CALL        DELAY1    

     K2        BCF         STATUS,0            ;清C
               MOVLW       3H                  ;设置误差2,影响精确度
               SUBWF       DATE6,W             ;差值-2H
               BTFSS       STATUS,0
               GOTO        Y2
               BSF         PORTB,4
               BSF         PORTB,6

               BTFSS       FLAG,2              ;电机运行标志
               GOTO        K3
               MOVLW       019H
               MOVWF       COUNT6
               CALL        DELAY1              ;延时
               BCF         FLAG,2
    
     K3        BCF         PORTB,5            ;关运行指示灯亮
               BCF         PORTB,7            ;电机反转
               BSF         FLAG,4
               BCF         FLAG,0
               BSF         FLAG,3             ;电机(反转)运行标志位:(针对突变)
               GOTO        START

     Y2        BSF         PORTB,7            ;电机停止转动
               BSF         PORTB,5            ;关运行指示灯灭
               BSF         FLAG,0
               BCF         FLAG,3
               GOTO        START
;********************失信号报警,电机相应动作**************************     0,0    OPEN;      0,1      CLOSE;   1,0       STOP
     ERR       BTFSC       PORTC,4          
               GOTO        STOP
               GOTO        OPEN
     STOP      BSF         PORTB,6             ;电机停止转动
               BSF         PORTB,7
               BSF         PORTB,4             ;开运行指示灯灭
               BSF         PORTB,5             ;关运行指示灯灭
               BCF         PORTC,3             ;失信号报警
               GOTO        START
     OPEN      BTFSC       PORTC,5
               GOTO        CLOSE
               BCF         PORTB,4             ;开运行指示灯亮
               BCF         PORTB,6             ;电机正转
               BCF         PORTC,3             ;失信号报警
               GOTO        START
     CLOSE     BCF         PORTB,5             ;关运行指示灯亮
               BCF         PORTB,7             ;电机反转
               BCF         PORTC,3             ;失信号报警
               GOTO        START
;*******************步进调整程序********************
     ADJUST    DECFSZ      37H,F
               GOTO        START
               BTFSS       FLAG,4
               GOTO        START
               BCF         STATUS,0
               MOVLW       2H
               SUBWF       DATE6,W 
               BTFSC       STATUS,0
               GOTO        START
               BCF         FLAG,4              ;是否调整标志2位
               BCF         PORTB,4             ;开运行指示灯亮
               BCF         PORTB,6             ;电机正转
               MOVLW       03EH
               MOVWF       COUNT7
               CALL        DELAY2 
               BSF         PORTB,6             ;电机停止转动
               BSF         PORTB,4             ;开运行指示灯灭
               GOTO        START 
      ADJUST1  DECFSZ      38H,F
               GOTO        START
               BTFSS       FLAG,4
               GOTO        START
               BCF         STATUS,0
               MOVLW       2H
               SUBWF       DATE6,W 
               BTFSC       STATUS,0
               GOTO        START
               BCF         FLAG,4              ;是否调整标志位
               BCF         PORTB,5             ;开运行指示灯亮
               BCF         PORTB,7             ;电机正转
               MOVLW       03EH
               MOVWF       COUNT7
               CALL        DELAY2              
               BSF         PORTB,5             ;电机停止转动
               BSF         PORTB,7             ;开运行指示灯灭
               GOTO        START
;********************乘法子程序***************************************    
   MUL         clrf        ACCBHI
	           clrf        ACCBLO 
	           movlw       8h
	           movwf       COUNT
	           movf        MULCND,w
	           bcf         STATUS,0   
   loop        rrf         MULPLR
     	       btfsc       STATUS,0
	           addwf       ACCBHI,1
	           rrf         ACCBHI,1
    	       rrf         ACCBLO,1
	           decfsz      COUNT
	           goto        loop
               RETLW       0
;*********************除法子程序**************************************
    div        CALL        SETUP    
               INCF        TEMP
               CLRF        ACCCHI    
               CLRF        ACCCLO
    DLOOP      BCF         STATUS,0             ;清进位位
               RLF         ACCDLO               ;被除数、余数左移1位
               RLF         ACCDHI
               RLF         ACCCLO
               RLF         ACCCHI
               MOVF        ACCAHI,0             ;ACCCHI-ACCAHI
               SUBWF       ACCCHI,0
               BTFSS       STATUS,2             ;ACCCHI=ACCAHI?
               GOTO        NOCHK
               MOVF        ACCALO,0             ;是,ACCCLO-ACCALO
               SUBWF       ACCCLO,0
     NOCHK     BTFSS       STATUS,0             ;ACCC>ACCA?
               GOTO        NOGO
               MOVF        ACCALO,0             ;是,余数减除数
               SUBWF       ACCCLO
               BTFSS       STATUS,0
               DECF        ACCCHI
               MOVF        ACCAHI,0
               SUBWF       ACCCHI
               BSF         STATUS,0             ;置进位位
     NOGO      RLF         ACCBLO               ;商左移1位
               RLF         ACCBHI
               DECFSZ      TEMP                 ;循环完毕?
               GOTO        DLOOP
               BTFSS       SIGN,7               ;是,确定商的符号
               GOTO        DIVOVER              ;为正,除法结束,跳转到结束行
               COMF        ACCCLO               ;为负,商和余数分别取补
               INCF        ACCCLO
               BTFSC       STATUS,2
               DECF        ACCCHI
               COMF        ACCCHI
               CALL        NEG_B                ;见乘法程序中间NEG_B
    DIVOVER    RETURN                           ;子程序返回
    NEG_A      COMF        ACCALO               ; ACCALO取反加1
               INCF        ACCALO
               BTFSC       STATUS,2             ; 低8位有进位吗?
               DECF        ACCAHI               ;有,ACCAHI减1,再取反
               COMF        ACCAHI               ;否则ACCAHI直接取反
               RETURN                           ;子程序返回
        ;********* ACCB取补子程序*******
     NEG_B     DECF        ACCBLO               ;ACCBLO取反加1
               COMF        ACCBLO
               BTFSC       STATUS,2             ;低8位有进位吗?
               DECF        ACCBHI               ;有,ACCBHI减1,再取反
               COMF        ACCBHI               ;否,ACCBHI直接取反
               RETLW       0        
        ;*******************************
     SETUP     MOVLW       .15                  ;初始化TEMP寄存器        
               MOVWF       TEMP
               MOVF        ACCBHI,0             ;ACCB送ACCD
               MOVWF       ACCDHI
               MOVF        ACCBLO,0
               MOVWF       ACCDLO
               CLRF        ACCBHI               ;清ACCB
               CLRF        ACCBLO
               RETURN                           ;子程序返回

;*********************延时子程序5s***************************
    DELAY1     MOVF        COUNT6,W
               MOVWF       31H
     LOOP0     MOVLW       85H
               MOVWF       32H
     L00P1     MOVLW       0FBH
               MOVWF       33H
     L00P2     DECFSZ      33H,1
               GOTO        L00P2
               DECFSZ      32H,1
               GOTO        L00P1
               DECFSZ      31H,1
               GOTO        LOOP0
               RETURN
;********************延时子程序1S*************************
   DELAY2      MOVF        COUNT7,W
               MOVWF       35H
    LP1        MOVLW       0FFH
               MOVWF       36H
    LP2        DECFSZ      36H,1
               GOTO        LP2
               DECFSZ      35H,1
               GOTO        LP1
               RETURN
;*********************延时子程序24Us**************************** 
    DELAY20    MOVLW     10H
               MOVWF     COUNT1 
    D20LOOP    DECFSZ    COUNT1,1
               GOTO      D20LOOP
               RETURN 
;*********************烧写EEPROM子程序**************************
    WRITE      BSF       STATUS,RP0
               BSF       STATUS,RP1
               BTFSC     EECON1,WR
               GOTO      $-1
               BCF       STATUS,RP0
               MOVF      ADDR,W
               MOVWF     EEADR
               MOVF      DATE8,W
               MOVWF     EEDATA  
               BSF       STATUS,RP0
               BCF       EECON1,EEPGD
               BSF       EECON1,WREN
               MOVLW     55H
               MOVWF     EECON2
               MOVLW     0AAH
               MOVWF     EECON2
               BSF       EECON1,WR
               BCF       EECON1,WREN
               BCF       STATUS,RP1
               BCF       STATUS,RP0
               RETURN
;********************读取EEPROM子程序******************************
     READ      BCF       STATUS,RP0
               BSF       STATUS,RP1
               MOVF      ADDR,W
               MOVWF     EEADR
               BSF       STATUS,RP0
               BCF       EECON1,EEPGD
               BSF       EECON1,RD
               BCF       STATUS,RP0
               MOVF      EEDATA,W
               BCF       STATUS,RP1
               BCF       STATUS,RP0 
               RETURN                      
               END 

⌨️ 快捷键说明

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