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

📄 drv.asm

📁 基于PIC16F72的超声波清洗机源程序(汇编).
💻 ASM
字号:
XS_DRV_SC
       IF USE_595==0
       CLRF    DCOM      ;清位码
       MOVF    DS_S1,W
       MOVWF   DOUT      ;段码输出
       MOVF    DS_S2,W
       MOVWF   DCOM      ;位码输出
       RETURN
       ENDIF
;******************************************************************************
       IF USE_595
;驱动595,显示
DR_595 MOVLW   D'16'
       MOVWF   DS_CNT    ;16位数据
       BCF     DSTR
DS_RATE 
       BCF     DSSK      ;CLR CLK
       BTFSS   DS_S1,0
       BCF     DSSE
       BTFSC   DS_S1,0
       BSF     DSSE      ;SET DATA
       CALL    DS_DEL
       BSF     DSSK      ;SLK-->1
       CALL    DS_DEL
       BCF     STATUS,C
       RRF     DS_S2,1
       RRF     DS_S1,1   ;指向下一位
       DECFSZ  DS_CNT,1
       GOTO    DS_RATE
       BSF     DSTR
       CALL    DS_DEL    ;数据输出有效
       CALL    DS_DEL
       BCF     DSTR
       RETURN 
;*************************************************************************************             
DS_DEL NOP               ;中间延时
       NOP
       NOP
       RETURN
       
       ENDIF
;**************************************************************************************  
;******************************************************
       IF USE_EEROM
;读93C46
RD_EE_BYTE
  CALL   EE_BEG_B        ;发送起始位
  MOVLW  80H
  ADDWF  EE_ADD ,0       ;6位地址加上两位操作码,10XXXXXX  读指令
  CALL   SDT46           ;写入操作码与地址
  CALL   RDT46           ;读低位地址              
  MOVWF  PAR_VAL         ;存入EE_VAH
  CALL   RDT46           ;读高位地址              
  MOVWF  PAR_VAH         ;存入EE_VAL  
  GOTO   EX9346
;**************************
;写93C46
WR_EE_BYTE
  CALL   EE_BEG_B       ;发送起始位
  MOVLW  40H
  ADDWF  EE_ADD ,0      ;6位地址加上两位操作码01XXXXXX  写指令
  CALL   SDT46          ;写入操作码及地址
  MOVF   PAR_VAL,0      ;载入数据
  CALL   SDT46          ;写入数据
  MOVF   PAR_VAH,0      ;载入数据
  CALL   SDT46          ;写入数据  
  GOTO   EX9346 
;******************************
SEWEN
  CALL   EE_BEG_B
  MOVLW  30H           ;写入操作码0011XXXX  写使能指令
  CALL   SDT46
  GOTO   EX9346
;******************************
SEWDS
  CALL   EE_BEG_B
  MOVLW  00H           ;写入0000XXXX写禁止指令
  CALL   SDT46
;******************************
EX9346
  BCF    EECS           ;结束时清CS为0
  CALL   DELAY
  RETURN
;******************************
SDT46:
  MOVWF  EE_SER         ;将要写的数据送EE_SER
  MOVLW  08H            ;写入8位数据
  MOVWF  EE_CNT
SD1:
  RLF    EE_SER ,1    
  BSF    EEDI
  BTFSS  STATUS ,C
  BCF    EEDI          ;设置数据线
  BSF    EESK
  CALL   DELAY
  BCF    EESK
  CALL   DELAY         ;CLK 上跳
  DECFSZ EE_CNT ,1
  GOTO   SD1
  RETURN
;******************************
RDT46
  MOVLW  08H           ;读出8位数据
  MOVWF  EE_CNT
RD1
  BSF    EESK
  CALL   DELAY
  BCF    EESK
  CALL   DELAY
  BSF    STATUS ,C
  BTFSS  EEDO          ;读数据线
  BCF    STATUS ,C
  RLF    EE_SER,1
  DECFSZ EE_CNT ,1
  GOTO   RD1
  MOVF   EE_SER,W      ;读得的数据送W
  RETURN
;********************************
DELAY
  MOVLW  0FFH           ;CLK时序廷时
  MOVWF  EE_CON
  DECFSZ EE_CON ,1
  GOTO $-1
  RETURN
;*****************************************************************************************  
EE_BEG_B  
  BSF  EECS          ;写入起始位1
  BSF  EEDI          ;data--1
  BSF  EESK          ;CLK 上跳
  CALL DELAY
  BCF  EESK          ;CLK 下跳
  CALL DELAY
  RETURN
  
  ENDIF


IF   USE_H2D==0  
HEXTOBCD
       CLRF    DS_S2
       CLRF    DS_S1
BH2D   MOVWF   DS_S1
       MOVLW   D'10'
       SUBWF   DS_S1,W
       BTFSS   STATUS,C
       RETURN
       INCF    DS_S2,1
       GOTO    BH2D  
ENDIF       
       
IF USE_H2D
;*******************************************************************************************
;双字节16进制转换成10进制
;本程序实现双字节二进制数转化为3字节压缩BCD码。
;入口参数:W所指向的2个单元。
;出口参数:W所指向的2个单元。
HEXTOBCD
       MOVWF   FSR      ;数据起始地址
       MOVF    INDF,W
       MOVWF   60H
       INCF    FSR,1
       MOVF    INDF,W
       MOVWF   61H      ;取需要转换的数据
       MOVLW   60H
       MOVWF   FSR
       CLRF    64H
       CLRF    63H       
       CLRF    62H
       BCF     STATUS,C
       MOVLW   .16
       MOVWF   65H
LOOPC1 RLF     60H,F
       RLF     61H,F
       RLF     64H,F
       RLF     63H,F
            RLF         62H,F
            DECFSZ      65H,F
            GOTO        ADJDEC1   
            RETLW       63H         ;整个子程序结束
            
ADJDEC1     MOVLW       64H
            MOVWF       FSR
            CALL        ADJBCD1     ;调整RLT
            MOVLW       63H
            MOVWF       FSR
            CALL        ADJBCD1     ;调整RLTH
            MOVLW       62H
            MOVWF       FSR
            CALL        ADJBCD1     ;调整TEMP1
            GOTO        LOOPC1
;********************调整BCD********************
ADJBCD1     MOVLW       03H
            ADDWF       INDF,W      ;低四位加3
            MOVWF       66H       ;暂存
            BTFSC       66H,3     ;结果大于7,
            MOVWF       INDF        ;则存起来
            MOVLW       30H
            ADDWF       INDF,W      ;高四位加3
            MOVWF       66H              
            BTFSC       66H,7     ;结果大于7,
            MOVWF       INDF        ;则存起来
            RETLW       0
            
ENDIF

⌨️ 快捷键说明

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