找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4202|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

PIC單片機(jī)控制的的旋轉(zhuǎn)門 源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
;調(diào)試注意門方向,電機(jī)正轉(zhuǎn)門順時(shí)鐘旋轉(zhuǎn)(俯視圖看門),電機(jī)反轉(zhuǎn)門逆時(shí)鐘旋轉(zhuǎn)(俯視圖看門)

list p=16F876A
    #include        p16f876a.inc

        __CONFIG _CPD_OFF & _CP_ALL & _DEBUG_OFF & _BODEN_OFF & _LVP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC

          PCL          EQU     02H
      STATUS       EQU     3H
      Z            EQU     2H
      INTCOM       EQU     0BH
      PORTC        EQU     7H
      TRISC        EQU     87H
      COU          EQU  0X21     ; 脈沖1檢測輸入計(jì)數(shù)器
      COUNTER      EQU  0X22
      COUNT1       EQU  0X23     ;電磁鐵抬起計(jì)數(shù)器
      MC           EQU  0X24     ;開始脈沖計(jì)數(shù)器
      COUNTER2     EQU  0X25      ;延時(shí)計(jì)數(shù)器2
      COUNT0       EQU  0X26      ;延時(shí)計(jì)數(shù)器2
      COUNT        EQU  0X27      ;EE_DELAY
      ADDR         EQU  0X28      ;EE
      DAT          EQU  0X29     ;EE
      DATA1        EQU  0X2A      ;EE
      TEMP         EQU  0X2B      ;EE
      LOCK_COUNT   EQU  0X2C
      COUNTER3     EQU  0X2D
      COUNTER4     EQU  0X2E
      COUNT3       EQU  0X2F
      COUNTER0     EQU  0X30        ;延時(shí)計(jì)數(shù)器0  DEL_LO        EQU        0X20
      COUNTER1     EQU  0X31        ;延時(shí)計(jì)數(shù)器1
      COUN4        EQU  0X32        ;延時(shí)計(jì)數(shù)器2
      COUNT2       EQU  0X33
      MCJS         EQU   0X34       ;正反轉(zhuǎn)計(jì)數(shù)器

          ;       EQU   0X78  

;*********************************
;input
     ;PORTA,0     正轉(zhuǎn)_KEY
     ;PORTA,1     反轉(zhuǎn)_KEY
     ;PORTA,2     脈沖1檢測輸入
     ;PORTA,3     脈沖2檢測輸入
     ;PORTA,4     NO 輸出接上拉電阻方可                  
     ;PORTA,5     脈沖3檢測輸入

;*********************************

;input/OUTPUT     
     ;PORTB,0     中斷處理  
     ;PORTB,1     防夾傳感器     或者緊急停止   
     ;PORTB,2     164 SPI
     ;PORTB,3     164 SPI
     ;PORTB,4     24C01 SCLK
     ;PORTB,5     24C01 SDA
     ;PORTB,6     原點(diǎn)檢測 光電
     ;PORTB,7     RUN LED FAS OUTPUT
;*****************************************
;OUTPUT
    ;#define    PORTC,0    正轉(zhuǎn)磁鐵
   ;#define     PORTC,1    反轉(zhuǎn)磁鐵  
   ;#define     PORTC,2    電機(jī)正轉(zhuǎn)   AB   10     NE555邏輯
   ;#define     PORTC,3    電機(jī)反轉(zhuǎn)   AB   01     NE555邏輯
   ;#define     PORTC,4    BBP OUT                  
   ;#define     PORTC,5    低速度     AB   00     555邏輯
   ;#define     PORTC,6    速度高     AB   11     555邏輯
   ;#define     PORTC,7    剎車
;;********************************************
;LED_OUT
;*****************************************
#define SDA  PORTB,5
#define SCLK PORTB,4   
;*****************************************
;4052 邏輯

;*****************************************

             ORG    000H
             NOP
             GOTO  INTI
             ORG    0004H            ;中斷矢量入口
;初始化程序
INTI        BSF       STATUS,RP0     ;選項(xiàng)1塊
            MOVLW     87H            ;10000111
            MOVWF     ADCON1         ;設(shè)置RA口全部為數(shù)字IO口RA,4不變

            MOVLW     B'11111111'     ;;ALL input. B6 B7 OUT
            MOVWF     TRISB           ;PORTB,7為輸出

            MOVLW     B'11111111'     ;PORTA ALL input
            MOVWF     TRISA            

            MOVLW     B'00000000'    ;PORTC_ALL_OUT
            MOVWF     TRISC

            BCF       STATUS,RP0     ;BLOCK0塊
            MOVLW     B'00000000'
            MOVWF     PORTA
            MOVWF     PORTB

            CLRF      PORTC
            CLRF      PORTB
            CLRF      MC             ;自動計(jì)數(shù)器清另

;*****************************************************
;旋轉(zhuǎn)門在停止時(shí)自動復(fù)位程序如果有風(fēng)推動必須保證復(fù)位
; KEY SCAN
;8888888888888888888888888888888888888888888888888888888鍵盤掃描
MIN        
            BCF       PORTB,3     ;電機(jī)反轉(zhuǎn)停
            CLRF      MC         ;開始脈沖計(jì)數(shù)器清另

            CLRF      COUNTER0   ;延時(shí)計(jì)數(shù)器0清另
            CLRF      COUNTER1   ;延時(shí)計(jì)數(shù)器1清另
            CLRF      PORTB      ;正轉(zhuǎn)磁鐵
            CLRF      PORTB      ;反轉(zhuǎn)磁鐵
            CLRF      COU         ;脈沖計(jì)數(shù)器清另  ;
SCAN_KEY    BCF      STATUS,Z    ;用過后要清零后才能檢測LOCK_COUNT,
            BCF      PORTB,0     ;↑ 正轉(zhuǎn)電磁鐵不吸合
            BCF      PORTB,1     ;↑ 反轉(zhuǎn)電磁鐵不吸合
            CLRF      COU        ;脈沖計(jì)數(shù)器清另
            CLRF     MCJS        ;正反轉(zhuǎn)計(jì)數(shù)器
            BSF      PORTB,7     ;LED_FAS
            CALL     DELAY05S
            BTFSS    PORTA,0     ;正轉(zhuǎn)_KEY
            GOTO     ZZHUAN      ;正轉(zhuǎn)
            GOTO     LOOP
LOOP        BTFSS    PORTA,1     ;反轉(zhuǎn)_KEY
            GOTO     FZZHUAN     ;反轉(zhuǎn)
            BTFSC    PORTB,6     ;原點(diǎn) 測試一下是否在原點(diǎn)
            GOTO     STARTA_ZF      ;轉(zhuǎn)防風(fēng)功能
            BCF      PORTB,7     ;LED_FAS
            CALL     DELAY05S
            GOTO     SCAN_KEY
;********88888888888888888888888888888888888888888888888鍵盤掃描
;防風(fēng)吹功能.子程序 脈沖pulse SCAN   改進(jìn)說明RA2脈沖    RA3方向判斷
;88888888888888888888888888888888888888888888888888888888
;旋轉(zhuǎn)門在停止時(shí)自動復(fù)位程序如果有風(fēng)推動必須保證復(fù)位
;00000000000000000000000000000000000000000               正反轉(zhuǎn)判斷程序

STARTA_ZF  CALL     DELAY  
            CALL     DELAY  
            CALL     DELAY  
            CALL     DELAY  
            NOP
;*******************************************************************
STARTA_ZFA  BTFSS    PORTA,3     ;RA3方向判斷H為門逆時(shí)鐘旋轉(zhuǎn)
            GOTO     ZF_NEXTA       ;MOTOR_ZZ     ;再判斷一下
ZF_PD       BTFSS    PORTA,2      ;測試A相有↑脈沖
            GOTO     ZF_NEXT
            GOTO     STARTA_ZFA
;******************************
ZF_NEXT     BTFSS    PORTA,3        ;都如果高
            GOTO     STARTA_ZFA
            GOTO     ZC_PD

ZF_NEXTA    BTFSS    PORTA,2
            GOTO     STARTA_ZFA
            GOTO     ZC_PD         ;還是為高
;*******************************************************************

ZC_PD       BTFSS    PORTA,2
            GOTO     ZF_NEXTZC
            BTFSS    PORTA,3   
            GOTO     ZF_NEXTAZC
            GOTO     ZC_PD
;******************************
ZF_NEXTZC   BTFSS    PORTA,3  
            GOTO     ZC_PD
            GOTO      S_PD           ;ZZ_CL

ZF_NEXTAZC  BTFSS    PORTA,2
            GOTO     ZC_PD
            GOTO     S_PD           ;FZ_CL
;*******************************************************************

S_PD       BTFSS    PORTA,3
           GOTO     S_PDB
S_PDA      BTFSS    PORTA,2
           GOTO     S_PDC
           GOTO     S_PD
;******************************
S_PDB      BTFSS    PORTA,2
           GOTO     S_PD
           GOTO     FZ_CL

S_PDC      BTFSS    PORTA,3
           GOTO     S_PD
           GOTO     ZZ_CL  ;正轉(zhuǎn)判斷

;888888888888888888888888888888888888888 8888888888888888888888正反轉(zhuǎn)判斷程序
;A相有脈沖有多少脈沖處理.當(dāng)門不旋轉(zhuǎn)時(shí)延時(shí)后電機(jī)旋轉(zhuǎn).  防風(fēng)吹功能
;電機(jī)正轉(zhuǎn) 門逆時(shí)鐘旋轉(zhuǎn)(俯視圖看門)
;........................................................電機(jī)反轉(zhuǎn)處理
ZZ_CL       ;正轉(zhuǎn)判斷
            BTFSS    PORTA,2       ;脈沖檢測輸入
            GOTO     TEXT_ZZ
LOOP_ZZ     BTFSS    PORTA,2       ;脈沖檢測輸入
            GOTO     MOTOR_ZZ
            GOTO     TEXT_ZZ       ;如果沒有脈沖再測試N次
TEXT_ZZ     ;CALL     DELAY1S       ;如果沒有脈沖再測試N次
            INCF     COU
            MOVLW    .8            ;.8
            SUBWF    COU           ;
            BTFSS    STATUS,Z     ;W=0 Z=1
            GOTO     ZZ_CL        ;NO不到20
            CLRF     COU          ;到了8脈沖
            CALL     DELAY
            CALL     DELAY   
MOTOR_ZZ    BCF      PORTC,2      ;電反機(jī)轉(zhuǎn)
            BSF      PORTC,3      ;電機(jī)反轉(zhuǎn) AB = 0.1

            BCF      PORTC,2      
            BSF      PORTC,3      ;電機(jī)反轉(zhuǎn) AB = 0 1

            BSF      PORTC,1      ;反轉(zhuǎn)磁鐵吸合

            BCF      PORTC,5      ;低速度 AB = 00
            BCF      PORTC,6      ;低速度 AB = 00


            NOP
            NOP
            NOP
            BTFSS     PORTB,6      ;原點(diǎn)檢測 光電
            GOTO      ZMOR_TIN1    ;H回到原點(diǎn)
            GOTO      MOTOR_ZZ
         ;PORTC,2     電機(jī)正轉(zhuǎn)
         ;PORTC,3     電機(jī)反轉(zhuǎn)
         ;PORTC,0     正轉(zhuǎn)磁鐵
         ;PORTC,1     反轉(zhuǎn)磁鐵
;888888888888888888888888888888888888888888888電機(jī)反轉(zhuǎn)處理
;B相有脈沖有,多少脈沖處理 當(dāng)門不旋轉(zhuǎn)時(shí)延時(shí)后電機(jī)旋轉(zhuǎn). 防風(fēng)吹功能
;電機(jī)反轉(zhuǎn) 門順時(shí)鐘旋轉(zhuǎn)(俯視圖看門)
;當(dāng)門順時(shí)鐘旋轉(zhuǎn) 電機(jī)應(yīng)該使門逆轉(zhuǎn);PORTB,2  電機(jī)正轉(zhuǎn) 門逆時(shí)鐘旋轉(zhuǎn)
;.......................................................電機(jī)正轉(zhuǎn)處理
FZ_CL      
            BTFSS    PORTA,2   ;脈沖檢測輸入,電機(jī)反轉(zhuǎn)  門順時(shí)鐘旋轉(zhuǎn) (俯視圖看門)
            GOTO     TEXT_FZ   ;↓測試A相有脈沖再測試   
LOOP_FZ     BTFSS    PORTA,2
            GOTO     MOTOR_FZ
            GOTO     TEXT_FZ       ;如果沒有脈沖再測試N次

TEXT_FZ     ;
            ;CALL    DELAY1S      ;如果沒有脈沖再測試N次
            INCF     COU
            MOVLW    .8            ;.8
            SUBWF    COU,           ;??????
            BTFSS    STATUS,Z     ;W=0 Z=1
            GOTO     FZ_CL        ;NO不到20
            CLRF     COU          ;到了8脈沖

MOTOR_FZ    BSF      PORTC,2      
            BCF      PORTC,3      ;電機(jī)正轉(zhuǎn) AB = 1 0

            BSF      PORTC,0      ;正轉(zhuǎn)磁鐵吸合

            BCF      PORTC,5      ;低速度 AB = 00
            BCF      PORTC,6      ;低速度 AB = 00

            NOP
            NOP
            NOP
            BTFSS     PORTA,6      ;原點(diǎn)檢測 光電
            GOTO      FMOR_TIN1    ;回到原點(diǎn)
            GOTO      MOTOR_FZ
;防風(fēng)吹功能.子程序 END    ;PORTC,2     電機(jī)正轉(zhuǎn)
                          ;PORTC,3     電機(jī)反轉(zhuǎn)
                          ;PORTC,0     正轉(zhuǎn)磁鐵
                          ;PORTC,1     反轉(zhuǎn)磁鐵         電機(jī)正轉(zhuǎn)處理
;8888888888888888888888888888888888888888888888888888888888888防風(fēng)吹復(fù)位功能.子程序 END
;到了10秒 沒有脈沖電磁鐵抬起,返回.SCAN_KEY  有脈沖開始記數(shù). 電機(jī)正轉(zhuǎn)等待
;0000000000000000000000000000000000000000000000000000000000000到了10秒 沒有脈沖電磁鐵抬起
ZZHUAN      BSF      PORTC,0    ;↑ 正轉(zhuǎn)電磁鐵吸合抬起
            CALL     DELAY05S
            NOP
            NOP
            BTFSC    PORTB,6     ;判斷門推動? 原點(diǎn)檢測
            GOTO     START1      ;YEI有人推
            GOTO     NO_MC       ;NO 沒有人推,在原點(diǎn)
;***************************
NO_MC       INCF      COUNT1,1    ;延時(shí)10秒
            MOVLW    .60            ;.60
            SUBWF    COUNT1,0
            BTFSS    STATUS,Z     ;W=0 Z=1
            GOTO     ZZHUAN       ;NO不到6
            CLRF     COUNT1
            GOTO     SCAN_KEY     ;到了10秒NO 沒有脈沖電磁鐵抬起
;**************************
CT_DELAY   CALL     DELAY3S
           BCF      PORTC,0       ;正轉(zhuǎn)電磁鐵
           GOTO     SCAN_KEY
;00000000000000000000000000000000000000000000000000000000000到了10秒 沒有脈沖電磁鐵抬起
;**A相有脈有開始記數(shù)沖 電機(jī)開始正轉(zhuǎn) 有8個(gè)脈沖?        低速度段 電機(jī)正轉(zhuǎn)
;PORTC,2    電機(jī)正轉(zhuǎn)   AB   00     NE555邏輯
;PORTC,3    電機(jī)反轉(zhuǎn)   AB   11     NE555邏輯
;********************************************************低速度段 電機(jī)正轉(zhuǎn)
START1          ;有脈沖
           BSF     PORTC,2    ;電機(jī)正轉(zhuǎn)     AB   10      NE555邏輯
           BCF     PORTC,3    ;電機(jī)反轉(zhuǎn)     AB   10      NE555邏輯

           BCF     PORTC,5     ;低速度      AB   00      555邏輯
           BCF     PORTC,6     ;速度        AB   00      555邏輯

            NOP
            NOP
            NOP  
            NOP
            NOP
            BTFSS    PORTA,2   ;測試A相有脈沖開開始計(jì)數(shù)
            GOTO     LOOP0       ;STRT_JS
            GOTO     START1
LOOP0       BTFSS    PORTA,2
            GOTO     LOOP0
            GOTO     STRT_JS  ; START1
NEXT       BTFSS    PORTA,2   ;測試A相有脈沖開開始計(jì)數(shù)
            GOTO     STRT_JS
            GOTO     START1

NEXT_A      BTFSS    PORTA,2
            GOTO     START1
            GOTO     STRT_JS
STRT_JS     INCF     COU
            MOVLW    .8           ;.8
            SUBWF    COU,0
            BTFSS    STATUS,Z      ;W=0 Z=1
            GOTO     START1        ;NO不到20
            CLRF      COU
            GOTO     ZGAO_SDU      ;到了20脈沖后轉(zhuǎn)高速度
;****************************************************低速度段 電機(jī)正轉(zhuǎn)
;**************A相有脈沖 有9個(gè)脈沖高速度運(yùn)轉(zhuǎn)********高速度段 電機(jī)開始正轉(zhuǎn)
         ;
;*************************************************           電機(jī)正轉(zhuǎn)高速度
;高速度電機(jī)開始正轉(zhuǎn)
ZGAO_SDU    BSF     PORTC,5    ;速度高      AB   1.1     555邏輯
            BSF     PORTC,6    ;速度高      AB   1.1     555邏輯

            NOP
            NOP
            NOP  
            NOP
            NOP
            ;CLRF      COU
            BTFSS    PORTA,2   ;測試A相有脈沖開開始計(jì)數(shù)
            GOTO     LOOP1     ;STRT_J
            GOTO     ZGAO_SDU
LOOP1       BTFSS    PORTA,2   ;測試A相有脈沖開開始計(jì)數(shù)
            GOTO     LOOP1
            GOTO     STRT_J
STRT_J      BTFSS     PORTB,1     ;急停00000000
            GOTO      ZMOR_TIN1
            INCF     COU
            MOVLW    .9      ;.9
            SUBWF    COU,0
            BTFSS    STATUS,Z      ;W=0 Z=1
            GOTO     ZGAO_SDU      ;NO不到9
            CLRF      COU
            GOTO     ZDI_SDU      ;到了20脈沖后轉(zhuǎn)高速度
;********************************************************************* 電機(jī)正轉(zhuǎn)高速度
;開始低速度 *A相有脈沖 有 9個(gè)脈沖     低速度段 電機(jī)開始正轉(zhuǎn)

;*********************************************************************電機(jī)正轉(zhuǎn)低速度
ZDI_SDU    BCF       PORTC,5      ; A     A B  0.0電機(jī)速度低
            BCF       PORTC,6      ; B     A B  0.0電機(jī)速度低
            NOP

            NOP
            NOP
            NOP  
            NOP
            NOP
            BSF      PORTA,7     ;速度低速度
            BTFSS    PORTA,2      ;測試A相有脈沖開開始計(jì)數(shù)
            GOTO     LOOP2
            GOTO     ZDI_SDU
LOOP2       BTFSS    PORTA,2
            GOTO     LOOP2
STRT        BTFSS     PORTB,1      ;急停00000000
            GOTO      ZMOR_TIN1
            INCF     COU
            MOVLW    .8           ;.8
            SUBWF    COU,0
            BTFSS    STATUS,Z      ;W=0 Z=1
            GOTO     ZDI_SDU        ;NO不到.8
            GOTO     ZMOR_TIN      ;到了20脈沖后轉(zhuǎn)高速度

;****************************************************************電機(jī)正轉(zhuǎn)低速度
;電機(jī)正轉(zhuǎn)低速度    ;是否到了原點(diǎn)電機(jī)電磁鐵停止
;****************************************************************電機(jī)正轉(zhuǎn)結(jié)束
ZMOR_TIN   
             BTFSS     PORTB,6     ;原點(diǎn)檢測 光電
             GOTO      ZMOR_TIN1    ;H回到原點(diǎn)
             GOTO      ZMOR_TIN
ZMOR_TIN1
            BCF       PORTC,2      ;電機(jī)正轉(zhuǎn)停 A     A B  0.0電機(jī)停
            BCF       PORTC,3      ;電機(jī)反轉(zhuǎn)停 B     A B  0.0電機(jī)停

            BCF       PORTC,0      ;正轉(zhuǎn)磁鐵釋放
            BCF       PORTC,1      ;反轉(zhuǎn)磁鐵釋放

            BSF       PORTC,5      ;低速度  OUT A
            BCF       PORTC,6      ;高速度  OUT B     A B  1.0速度停

            NOP
            NOP
            NOP
            NOP
            BSF       PORTC,7     ;剎車
            CALL      DELAY05S
            BCF       PORTC,7     ;剎車
            GOTO      SCAN_KEY

;;**********************************************************電機(jī)正轉(zhuǎn)結(jié)束
;電機(jī)反轉(zhuǎn)開始計(jì)數(shù)                 電機(jī)反轉(zhuǎn)等待
;*FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  ;到了10秒 沒有脈沖電磁鐵抬起,返回.SCAN_KEY 開始記數(shù)值.
;***********************************************到了10秒 沒有脈沖電磁鐵抬起
FZZHUAN      BSF      PORTC,1   ;↑ 反轉(zhuǎn)電磁鐵吸合抬起
             CALL     DELAY05S
             NOP
             NOP
             BTFSC    PORTB,6     ;判斷門推動? 原點(diǎn)檢測
             GOTO     FSTART1      ;YEI
             GOTO     FNO_MC       ;NO
;***************************
FNO_MC       INCF      COUNT1,1    ;延時(shí)10秒
            MOVLW    .60            ;.60
            SUBWF    COUNT1,0
            BTFSS    STATUS,Z     ;W=0 Z=1
            GOTO     FZZHUAN       ;NO不到6
            CLRF     COUNT1
            GOTO     SCAN_KEY     ;到了10秒NO 沒有脈沖電磁鐵抬起
;************************************
FCT_DELAY  CALL     DELAY3S
            BCF      PORTB,1       ;反轉(zhuǎn)電磁鐵
            GOTO     SCAN_KEY
;******************************************************到了10秒 沒有脈沖電磁鐵抬起
;          ;PORTC,2  A  電機(jī)正轉(zhuǎn)   A B   00     NE555邏輯
           ;PORTC,3  B  電機(jī)反轉(zhuǎn)   A B   11     NE555邏輯
;***B相有脈沖 電機(jī)開始反轉(zhuǎn) 有20個(gè)脈沖?********速度低 電機(jī)反轉(zhuǎn)
;FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF電機(jī)開始反轉(zhuǎn)低速度段
FSTART1     BCF       PORTC,2      ;電機(jī)反轉(zhuǎn)停 A     A B  0.1電機(jī)反轉(zhuǎn)
            BSF       PORTC,3      ;電機(jī)反轉(zhuǎn)停 B     A B  0.1電機(jī)反轉(zhuǎn)

            BCF       PORTC,5      ;低速度  OUT A
            BCF       PORTC,6      ;高速度  OUT B     A B  0.0電機(jī)速度低

            NOP
            NOP
            BTFSS    PORTA,3   ;測試B相有脈沖開開始計(jì)數(shù)
            GOTO     FLOOP0      
            GOTO     FSTART1
FLOOP0      BTFSS    PORTA,3    ;測試B相有脈沖開開始計(jì)數(shù)
            GOTO     FLOOP0
            GOTO     FSTRT_JS  ;START1
FNEXT      BTFSS    PORTA,3   ;測試B相有脈沖開開始計(jì)數(shù)
            GOTO     FSTRT_JS
            GOTO     FSTART1

FNEXT_A     BTFSS    PORTA,3
            GOTO     FSTART1
            GOTO     FSTRT_JS
FSTRT_JS     INCF     COU
            MOVLW    .8         ;.20
            SUBWF    COU,0
            BTFSS    STATUS,Z      ;W=0 Z=1
            GOTO     FSTART1       ;NO不到20
            CLRF     COU
            GOTO     FGAO_SDU      ;到了20脈沖后轉(zhuǎn)高速度
;**************************************************            電機(jī)反轉(zhuǎn)低速度段
;***B相有脈沖 有9個(gè)脈沖高速度運(yùn)轉(zhuǎn)*****速度高電機(jī)反轉(zhuǎn)門順時(shí)鐘旋轉(zhuǎn)(俯視圖看門) 電機(jī)反轉(zhuǎn)/
;*************************************************             電機(jī)反轉(zhuǎn)高速度段
;高速度
FGAO_SDU    BSF       PORTC,5      ;低速度  OUT A
            BSF       PORTC,6      ;高速度  OUT B     A B  1.1電機(jī)速度高
            NOP
            NOP

            NOP
            NOP
            ;CLRF      COU
            BTFSS    PORTA,3   ;測試B相有脈沖開開始計(jì)數(shù)
            GOTO     FLOOP1     ;FSTRT_J
            GOTO     FGAO_SDU
FLOOP1       BTFSS    PORTA,3   ;測試B相有脈沖開開始計(jì)數(shù)
            GOTO     FLOOP1
            GOTO     FSTRT_J

FSTRT_J     BTFSS     PORTB,1     ;急停000
            GOTO      FMOR_TIN1  
            INCF     COU
            MOVLW    .9         ;.9
            SUBWF    COU,0
            BTFSS    STATUS,Z      ;W=0 Z=1
            GOTO     FGAO_SDU       ;NO不到20
             CLRF      COU
            GOTO     FDI_SDU      ;到了20脈沖后轉(zhuǎn)高速度

;*********************************************            電機(jī)反轉(zhuǎn)高速度段
;開始低速度 B相有脈沖 有 8個(gè)脈沖**********速度低 電機(jī)反轉(zhuǎn)
;*********************************************            電機(jī)反轉(zhuǎn)低速度段
FDI_SDU     
            BCF       PORTC,5      ;低速度  OUT A
            BCF       PORTC,6      ;高速度  OUT B     A B  0.0電機(jī)低速度段
            NOP  
            NOP
            NOP
            BTFSS    PORTA,3      ;測試B相有脈沖開開始計(jì)數(shù)
            GOTO     FLOOP2
            GOTO     FDI_SDU
FLOOP2      BTFSS    PORTA,3      ;測試B相有脈沖開開始計(jì)數(shù)
            GOTO     FLOOP2
            GOTO     FSTRT

FSTRT       BTFSS     PORTB,1     ;急停000
            GOTO      FMOR_TIN1  
            INCF     COU
            MOVLW    .8             ;.8
            SUBWF    COU,0
            BTFSS    STATUS,Z      ;W=0 Z=1
            GOTO     FDI_SDU       ;NO不到8
            GOTO     FMOR_TIN      ;到了20脈沖后轉(zhuǎn)高速度
;***************************************************電機(jī)反轉(zhuǎn)低速度段
;電機(jī)反轉(zhuǎn)低速度;是否到了原點(diǎn)電機(jī)電磁鐵停止
;****************************************************電機(jī)反轉(zhuǎn)停止
FMOR_TIN       ;速度變換低速度 減 SPI99  OUT
             BTFSS     PORTB,6      ;原點(diǎn)檢測 光電
             GOTO      FMOR_TIN1
             GOTO      FMOR_TIN

FMOR_TIN1   BCF       PORTC,2      ;電機(jī)正轉(zhuǎn)停 A     A B  0.0電機(jī)停
            BCF       PORTC,3      ;電機(jī)反轉(zhuǎn)停 B     A B  0.0電機(jī)停

            BCF       PORTC,0      ;正轉(zhuǎn)磁鐵釋放
            BCF       PORTC,1      ;反轉(zhuǎn)磁鐵釋放

            BSF       PORTC,5      ;低速度  OUT A
            BCF       PORTC,6      ;高速度  OUT B     A B  1.0電機(jī)停

            NOP
            NOP
            NOP
            NOP
            BSF       PORTC,7     ;剎車
            CALL      DELAY05S
            BCF       PORTC,7     ;剎車
            GOTO      SCAN_KEY

;*FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF電機(jī)反轉(zhuǎn)停止
DELAY3S    MOVLW     D'10'          ;D'10=3S  D'20=5S  D'30=7S
           MOVWF     COUNT2         ;D'40=8S  D'60=12S  D'80=17
LOPB01     DECFSZ    COUNT1,1       ;D'100=20S   D'150=30S D'200=40S
           GOTO      LOPB01
           DECFSZ    COUNT0,1
           GOTO      LOPB01
           DECFSZ    COUNT2,1
           GOTO       LOPB01
           RETURN
;****************************************************
DELAY   MOVLW     D'9'
        MOVWF     COUNTER0
LOPB    DECFSZ    COUNTER1,1
        GOTO      LOPB
        DECFSZ    COUNTER0,1
        GOTO      LOPB
        RETURN
;*****************************************************
DELAY1S    MOVLW     D'5'            ;DELAY 1S
           MOVWF     COUNTER3
LOPB1      DECFSZ    COUNTER4,1
           GOTO      LOPB1
           DECFSZ    COUNTER3,1
           GOTO      LOPB1
           RETURN
;******************************************************
DELAY05S  MOVLW     D'0'       ;0.5S
          MOVWF     COUNT3
LOPB0     DECFSZ    COUN4,1
          GOTO      LOPB0
          DECFSZ    COUNT3,1
          GOTO      LOPB0
          RETURN
          END
;*********************************************************************


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:607298 發(fā)表于 2020-10-9 14:51 | 只看該作者
現(xiàn)在用匯編的人估計(jì)比較少了
回復(fù)

使用道具 舉報(bào)

板凳
ID:832983 發(fā)表于 2020-10-22 08:44 | 只看該作者
我也是用匯編,只會一點(diǎn)簡單的程序,沒學(xué)C
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表