久久丫精品无码视频|亚洲成人黄色电影|超碰国产在线观看|亚洲Aⅴ综合免费在线|久久青青草原国产精品|极品美女三级片国产无码a|女人的黄色片子综合AV|日韩成人?毛片

<table id="omjmm"></table>
<span id="omjmm"></span>
<dl id="omjmm"></dl>
<th id="omjmm"></th>
<span id="omjmm"></span>
<ins id="omjmm"><cite id="omjmm"><ins id="omjmm"></ins></cite></ins>
  • 技術(shù)熱線: 4007-888-234
    設(shè)計開發(fā)

    專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

    開發(fā)工具

    提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享

    技術(shù)支持

    從全面的產(chǎn)品導(dǎo)入到強大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

    新品推廣

    提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力

    新聞中心

    提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)

    用PIC控制步進電機完整資料

    更新時間: 2019-03-26
    閱讀量:2908

    F84程序,

    ;********************************************************
    ;
    ;               Stepper Motor controller
    ;
    ;                                 Author : Seiichi Inoue
    ;********************************************************

            list            p=pic16f84a
            include         p16f84a.inc
            __config _hs_osc & _wdt_off & _pwrte_on & _cp_off
            errorlevel      -302    ;Eliminate bank warning

    ;****************  Label Definition  ********************
            cblock  h'0c'
    mode                     

     ;Operation mode
                                    ;0=stop 1=right 2=left
    count1                          ;Wait counter
    count2                          ;Wait counter(for 1msec)
            endc

    rb0     equ     0               ;RB0 of PORTB
    rb1     equ     1               ;RB1 of PORTB
    rb2     equ     2               ;RB2 of PORTB
    rb5     equ     5               ;RB5 of PORTB
    rb7     equ     7               ;RB7 of PORTB

    ;****************  Program Start  ***********************
            org     0               ;Reset Vector
            goto    init
            org     4               ;Interrupt 

    Vector
            clrf    intcon          ;Clear Interruption reg

    ;****************  Initial Process  *********************

    init
            bsf     status,rp0      ;Change to Bank1
            clrf    trisa           ;Set PORTA all OUT
            movlw   b'00100111'     ;RB0,1,2.5=IN RB7=OUT
            movwf   trisb           ;Set PORTB
            movlw   b'10000000'     ;RBPU=1 Pull up not use
            movwf   option_reg      ;Set OPTION_REG
            bcf     status,rp0      ;Change to Bank0
            clrf    mode            ;Set mode = stop
            clrf    count1          ;Clear counter
            clrf    count2          ;Clear counter
            movlw   b'00000101'     ;Set PORTA initial value
            movwf   porta           ;Write PORTA
            bsf     portb,rb7       ;Set RB7 = 1
            btfsc   portb,rb5       ;RB5 = 0 ?
            goto    $-1             ;No. Wait

    start
    ;*************  Check switch condition  *****************
            btfsc   portb,rb1       ;RB1(stop key) = ON ?

     goto    check1          ;No. Next
            clrf    mode            ;Yes. Set stop mode
            goto    drive           ;No. Jump to motor drive
    check1
            btfsc   portb,rb2       ;RB2(right key) = ON ?
            goto    check2          ;No. Next
            movlw   d'1'            ;Yes. Set right mode
            movwf   mode            ;Save mode
            goto    drive           ;No. Jump to motor drive
    check2
            btfsc   portb,rb0       ;RB0(left key) = ON ?
            goto    drive           ;No. Jump to motor drive
            movlw   d'2'            ;Yes. Set left mode
            movwf   mode            ;Save mode

    ;********************  Motor drive  *********************
    drive
            movf    mode,w          ;Read mode

     bz      start           ;mode = stop
            bsf     portb,rb7       ;Set RB7 = 1
            btfsc   portb,rb5       ;RB5 = 0 ?
            goto    $-1             ;No. Wait
            movlw   d'5'            ;Set loop count(5msec)
            movwf   count1          ;Save loop count
    loop    call    timer           ;Wait 1msec
            decfsz  count1,f        ;count - 1 = 0 ?
            goto    loop            ;No. Continue
            bcf     portb,rb7       ;Set RB7 = 0
            btfss   portb,rb5       ;RB5 = 1 ?
            goto    $-1             ;No. Wait
            movf    porta,w         ;Read PORTA
            sublw   b'000000101'    ;Check motor position
            bnz     drive2          ;Unmatch
            movf    mode,w          ;Read mode
            sublw   d'1'            ;Right ?
            bz      drive1          ;Yes. Right
            movlw   b'00001001'     ;No. Set Left data
            goto    drive_end       ;Jump to PORTA write
    drive1

     movlw   b'00000110'     ;Set Right data
            goto    drive_end       ;Jump to PORTA write
    ;-------
    drive2
            movf    porta,w         ;Read PORTA
            sublw   b'000000110'    ;Check motor position
            bnz     drive4          ;Unmatch
            movf    mode,w          ;Read mode
            sublw   d'1'            ;Right ?
            bz      drive3          ;Yes. Right
            movlw   b'00000101'     ;No. Set Left data
            goto    drive_end       ;Jump to PORTA write
    drive3
            movlw   b'00001010'     ;Set Right data
            goto    drive_end       ;Jump to PORTA write
    ;-------
    drive4
            movf    porta,w         ;Read PORTA
            sublw   b'000001010'    ;Check motor position
            bnz     drive6          ;Unmatch
            movf    mode,w          ;Read mode
            sublw   d'1'            ;Right ?

     bz      drive5          ;Yes. Right
            movlw   b'00000110'     ;No. Set Left data
            goto    drive_end       ;Jump to PORTA write
    drive5
            movlw   b'00001001'     ;Set Right data
            goto    drive_end       ;Jump to PORTA write
    ;-------
    drive6
            movf    porta,w         ;Read PORTA
            sublw   b'000001001'    ;Check motor position
            bnz     drive8          ;Unmatch
            movf    mode,w          ;Read mode
            sublw   d'1'            ;Right ?
            bz      drive7          ;Yes. Right
            movlw   b'00001010'     ;No. Set Left data
            goto    drive_end       ;Jump to PORTA write
    drive7
            movlw   b'00000101'     ;Set Right data
            goto    drive_end       ;Jump to PORTA write

    ;-------
    drive8
            movlw   b'00000101'     ;Compulsion setting

    drive_end
            movwf   porta           ;Write PORTA
            goto    start           ;Jump to start

    ;*************  1msec Timer Subroutine  *****************
    timer
            movlw   d'200'          ;Set loop count
            movwf   count2          ;Save loop count
    tmlp    nop                     ;Time adjust
            nop                     ;Time adjust
            decfsz  count2,f        ;count - 1 = 0 ?
            goto    tmlp            ;No. Continue
            return                  ;Yes. Count end

    ;********************************************************
    ;             END of Stepper Motor controller
    ;********************************************************