Помогите править код pic12f629

Модератор: boogyman

Помогите править код pic12f629

Сообщение:#1  Сообщение chater » 09 окт 2014, 21:08

Помогите изменить код для контроллера ШД на pic12f629.
Изображение схема.

Тут при нажатии на forward/reverse двигатель идет с одной скоростью(ооочень медленно) :( , при нажатии full step скорость можно менять с помощью переменного резистора.

Хотелось бы откинуть full step и сделать чтобы резистором регулировалась скорость кнопок forward/reverse.
Код на ассемблере
Код: Выделить всё
;*******************************
;Stepper.asm
;drives a Stepper motor forward and reverse
;13-11-2010
;*******************************


   list   p=12F629
   radix   dec
   include   "p12f629.inc"
   
   errorlevel -302   ; Don't complain about BANK 1 registers

   __CONFIG   _MCLRE_OFF & _CP_OFF
& _WDT_OFF & _INTRC_OSC_NOCLKOUT  ;Internal osc.

;_MCLRE_OFF  - master clear must be off for gp3 as input pin

;******************************
; variables - names and files
;*****************************

temp1   equ 20h   ;
temp2   equ 21h   ;

Sw_Flag   equ 25h   ;switch flag for "inching"
loops   equ 26h ;loops for full stepping
count   equ 27h   ;loops of discharge time for 100n
PotValue equ 28h ;value of pot
look   equ 29h ;look for pot value every 100 loops


;***************************
;Equates
;***************************
status   equ   0x03
rp1   equ   0x06
rp0   equ   0x05
GPIO    equ 0x05
         

status      equ   03h
option_reg   equ 81h


      ; bits on GPIO
            
pin7   equ   0   ;GP0  100k speed pot
pin6   equ   1   ;GP1  output1 to stepper motor
pin5   equ   2   ;GP2  output2 to stepper motor
pin4   equ   3   ;GP3  Input from buttons
pin3   equ   4   ;GP4  output3 to stepper motor
pin2   equ   5   ;GP5  output4 to stepper motor   
 

      ;bits
            
rp0   equ   5   ;bit 5 of the status register

;**********************
;Beginning of program
;**********************
   org   0x00
   nop
   nop
   nop
   nop
   nop         
SetUp   bsf   status, rp0    ;Bank 1         
          movlw   b'11001000'   ;Set TRIS  GP1,2,4,5 out GP3 input
   movwf   TRISIO               
   bcf   status, rp0   ;bank 0
   movlw   07h            ;turn off Comparator ports
        movwf   CMCON          ;must be placed in bank 0
        clrf    GPIO          ;Clear GPIO of junk      
        clrf   Sw_Flag
        incf   Sw_Flag,1   ;put a bit onto Sw_Flag
   goto    Main   
         


;****************
;delays      *
;****************

_uS   movlw   08Ch
   movwf   temp1
   decfsz    temp1,f
   goto    $-1
   retlw    00
      
      
   ;delay for pulsing servo anticlockwise
      
acw
   movlw   60h
   movwf   temp1
   decfsz    temp1,f
   goto    $-1
   retlw    00
      
   
_1mS   nop
   decfsz    temp1,f
   goto    _1mS
   retlw    00
      
_5mS   movlw   .5
   movwf   temp2
   nop
   decfsz    temp1,f
   goto    $-2
   decfsz    temp2,f
   goto    $-4   
   retlw    00   
      
      
            

_10mS   movlw   0Ah
   movwf   temp2
   nop
   decfsz    temp1,f
   goto    $-2
   decfsz    temp2,f
   goto    $-4   
   retlw    00
      
_15mS   movlw   .15
   movwf   temp2
   nop
   decfsz    temp1,f
   goto    $-2
   decfsz    temp2,f
   goto    $-4   
   retlw    00   
      
      
_18mS   movlw   .18
   movwf   temp2
   nop
   decfsz    temp1,f
   goto    $-2
   decfsz    temp2,f
   goto    $-4   
   retlw    00      
      
_50mS   movlw   .50
   movwf   temp2
   nop
   decfsz    temp1,f
   goto    $-2
   decfsz    temp2,f
   goto    $-4   
   retlw    00      
      
      
      
         
_100mS   movlw   .100
   movwf   temp2
   nop
   decfsz    temp1,f
   goto    $-2
   decfsz    temp2,f
   goto    $-4   
   retlw    00         
      
      
_200mS   movlw   .200
   movwf   temp2
   nop
   decfsz    temp1,f
   goto    $-2
   decfsz    temp2,f
   goto    $-4   
   retlw    00   
               
         
      
   ;delay to create value for pot for speed
      
PotDel   movlw   040h      ;40h produces 12 loops
   movwf   temp1
   decfsz    temp1,f
   goto    $-1
   retlw    00      
   
         
;***************************
; Sub Routines             *
;***************************
   
   
   ;position of pot creates a value in PotValue
      
Pot   bsf   status,rp0         
   bcf   trisio,0   ;Make GP0 output
   bcf   status,rp0
   bcf   gpio,0      ;make GP0 LOW   
   call   _1mS   ;create delay to discharge 100n
   bsf   status,rp0         
   bsf   trisio,0   ;Make GP0 input
   bcf   status,rp0   
   clrf   PotValue
   call   PotDel            
   incf   PotValue,f      
   btfss   gpio,0      ;is input HIGH?   
   goto   $-3   
   retlw   00   ;returns with a value in PotValue
            
         
   
      
               
;******************
;* Main    *
;******************

Main   clrf   gpio
   bcf   gpio,5   ;gpio,5 high for a short time
   call   _1mS
   bsf   gpio,5         
   nop   
   btfss   gpio,3
   goto   $+2
   goto   $+6   ;go to half step Forward
   clrf   gpio
   bsf      gpio,1   
   btfss   gpio,3      
   goto   Reverse   ;go to half step Reverse
   goto   _FS      ;go to Full Step - for forward or reverse
   
   btfsc   Sw_Flag,0
   goto   _1HSF_
   btfsc   Sw_Flag,1
   goto   _2HSF_
   btfsc   Sw_Flag,2
   goto   _3HSF_
   btfsc   Sw_Flag,3
   goto   _4HSF_
   btfsc   Sw_Flag,4
   goto   _5HSF_
   btfsc   Sw_Flag,5
   goto   _6HSF_
   btfsc   Sw_Flag,6
   goto   _7HSF_
   goto   _8HSF_
      
_1HSF_   movlw   b'00100000'      ;1
   goto   _C         
_2HSF_   movlw   b'00110000'      ;2
   goto   _C      
_3HSF_   movlw   b'00010000'      ;3
   goto   _C      
_4HSF_   movlw   b'00010100'      ;4
   goto   _C      
_5HSF_   movlw   b'00000100'      ;5
   goto   _C      
_6HSF_   movlw   b'00000110'      ;6
   goto   _C      
_7HSF_   movlw   b'00000010'      ;7
   goto   _C      
_8HSF_   movlw   b'00100010'      ;8
   movwf   gpio
   call   _200mS
   clrf   gpio
   call   _200mS
   call   _200mS
   clrf   Sw_Flag
   incf   Sw_Flag,1
   bsf   gpio,5         
   nop   
   btfsc   gpio,3   ;see if sw is still pressed for full speed
   goto   HS_Fwd   
   bcf   gpio,5      
   goto   Main      
      
         
_C   movwf   gpio
   call   _200mS
   clrf   gpio
   call   _200mS
   call   _200mS
   bcf   status,0   ;clear the carry      
   rlf   Sw_Flag,1      
   bsf   gpio,5         
   nop   
   btfsc   gpio,3   ;see if sw is still pressed for full speed
   goto   HS_Fwd   
   bcf   gpio,5
   goto   Main   
      
      
      
      
   ;reverse - half step
      
      
Reverse
   clrf   gpio
   bcf      gpio,4   ;gpio,4 high for a short time
   call   _1mS
   bsf      gpio,4         
   nop   
   btfss   gpio,3
   goto   Main   
      
   btfsc   Sw_Flag,0
   goto   _1HSR_
   btfsc   Sw_Flag,1
   goto   _2HSR_
   btfsc   Sw_Flag,2
   goto   _3HSR_
   btfsc   Sw_Flag,3
   goto   _4HSR_
   btfsc   Sw_Flag,4
   goto   _5HSR_
   btfsc   Sw_Flag,5
   goto   _6HSR_
   btfsc   Sw_Flag,6
   goto   _7HSR_
   goto   _8HSR_
   
_1HSR_   movlw   b'00100000'      ;1
   movwf   gpio      
   call   _200mS
   clrf   gpio
   call   _200mS
   call   _200mS
   Movlw   80h
   movwf   Sw_Flag
   bsf   gpio,4         
   nop   
   btfsc   gpio,3   ;see if sw is still pressed for full speed
   goto   HS_Rev   
   bcf      gpio,4      
   goto   Main   
      
_2HSR_   movlw   b'00110000'      ;2
   goto   _D      
_3HSR_   movlw   b'00010000'      ;3
   goto   _D      
_4HSR_   movlw   b'00010100'      ;4
   goto   _D      
_5HSR_   movlw   b'00000100'      ;5
   goto   _D      
_6HSR_   movlw   b'00000110'      ;6
   goto   _D      
_7HSR_   movlw   b'00000010'      ;7
   goto   _D      
_8HSR_   movlw   b'00100010'      ;8
   goto   _D         
      
                     
_D   movwf   gpio
   call   _200mS
   clrf   gpio
   call   _200mS
   call   _200mS
   bcf   status,0   ;clear the carry      
   rrf   Sw_Flag,1      
   bsf   gpio,4         
   nop   
   btfsc   gpio,3   ;see if sw is still pressed for full speed
   goto   HS_Rev   
   bcf   gpio,4               
   goto   Main
      
      

   ;half step forward 


HS_Fwd
   clrf   gpio
   bcf   gpio,5   ;gpio,5 high for a short time
   call   _1mS
   bsf      gpio,5         
   nop   
   btfss   gpio,3
   goto   Main   
                  
   btfsc   Sw_Flag,0
   goto   _1HSF
   btfsc   Sw_Flag,1
   goto   _2HSF
   btfsc   Sw_Flag,2
   goto   _3HSF
   btfsc   Sw_Flag,3
   goto   _4HSF
   btfsc   Sw_Flag,4
   goto   _5HSF
   btfsc   Sw_Flag,5
   goto   _6HSF
   btfsc   Sw_Flag,6
   goto   _7HSF
   goto   _8HSF
      
_1HSF   movlw   b'00100000'      ;1
   goto   _CC         
_2HSF   movlw   b'00110000'      ;2
   goto   _CC      
_3HSF   movlw   b'00010000'      ;3
   goto   _CC      
_4HSF   movlw   b'00010100'      ;4
   goto   _CC      
_5HSF   movlw   b'00000100'      ;5
   goto   _CC      
_6HSF   movlw   b'00000110'      ;6
   goto   _CC      
_7HSF   movlw   b'00000010'      ;7
   goto   _CC      
_8HSF   movlw   b'00100010'      ;8
   movwf   gpio
   call   _5mS
   clrf   gpio      
   clrf   Sw_Flag
   incf   Sw_Flag,1
   goto   HS_Fwd      
      
      
_CC   movwf   gpio
   call   _5mS
   clrf   gpio      
   bcf   status,0   ;clear the carry   
   rlf   Sw_Flag,1
   goto   HS_Fwd
      
            
      ;half step reverse
      
HS_Rev      
   clrf   gpio
   bcf   gpio,4   ;gpio,4 high for a short time
   call   _1mS
   bsf   gpio,4         
   nop   
   btfss   gpio,3
   goto   Main   
      
   btfsc   Sw_Flag,0
   goto   _1HSR
   btfsc   Sw_Flag,1
   goto   _2HSR
   btfsc   Sw_Flag,2
   goto   _3HSR
   btfsc   Sw_Flag,3
   goto   _4HSR
   btfsc   Sw_Flag,4
   goto   _5HSR
   btfsc   Sw_Flag,5
   goto   _6HSR
   btfsc   Sw_Flag,6
   goto   _7HSR
   goto   _8HSR
      
_1HSR   movlw   b'00100000'      ;1
   movwf   gpio
   call   _10mS
   clrf   gpio      
   Movlw   80h
   movwf   Sw_Flag
   goto   HS_Rev
_2HSR   movlw   b'00110000'      ;2
   goto   _G      
_3HSR   movlw   b'00010000'      ;3
   goto   _G      
_4HSR   movlw   b'00010100'      ;4
   goto   _G      
_5HSR   movlw   b'00000100'      ;5
   goto   _G      
_6HSR   movlw   b'00000110'      ;6
   goto   _G      
_7HSR   movlw   b'00000010'      ;7
   goto   _G      
_8HSR   movlw   b'00100010'      ;8
      goto   _G         
      
            
_G   movwf   gpio
   call   _10mS
   clrf   gpio      
   bcf   status,0   ;clear the carry   
   rrf   Sw_Flag,1
   goto   HS_Rev   
      
      
            
      ;decide on full step forward or reverse
      
      
_FS   clrf   gpio
   bsf   gpio,5
   btfss   gpio,3
   goto   $+2
   goto   FS_Fwd
   bsf      gpio,4
   btfss   gpio,3
   goto   $+2
   goto   FS_Rev
   clrf   gpio
   call   _1mS      
   goto   $-10

      
   ;Full Step Forward
      
FS_Fwd   call   pot      ;returns with value in PotValue
   movlw   .50
   movwf   look   ;look at pot every 50 loops
   movlw   b'00000010'      ;full step forward
   movwf   gpio      
   movf   PotValue,w
   movwf   loops
   call   _1mS
   decfsz   loops,1
   goto   $-2               
   movlw   b'00000100'
   movwf   gpio
   movf   PotValue,w
   movwf   loops
   call   _1mS
   decfsz   loops,1
   goto   $-2      
   movlw   b'00010000'
   movwf   gpio
   movf   PotValue,w
   movwf   loops
   call   _1mS
   decfsz   loops,1
   goto   $-2   
   movlw   b'00100000'      
   movwf   gpio
   movf   PotValue,w
   movwf   loops
   call   _1mS
   decfsz   loops,1
   goto   $-2
   decfsz   look,1
   goto   FS_Fwd+3  ;don't look at pot
   goto   FS_Fwd   ;look at pot
      
         
      
   ;Full Step Reverse
      
FS_Rev   call   pot   ;returns with value in PotValue
   movlw   .50
   movwf   look   ;look at pot every 50 loops
   movlw   b'00100000'   ;full step reverse
   movwf   gpio      
   movf   PotValue,w
   movwf   loops
   call   _1mS
   decfsz   loops,1
   goto   $-2               
   movlw   b'00010000'
   movwf   gpio
   movf   PotValue,w
   movwf   loops
   call   _1mS
   decfsz   loops,1
   goto   $-2      
   movlw   b'00000100'
   movwf   gpio
   movf   PotValue,w
   movwf   loops
   call   _1mS
   decfsz   loops,1
   goto   $-2   
   movlw   b'00000010'      
   movwf   gpio
   movf   PotValue,w
   movwf   loops
   call   _1mS
   decfsz   loops,1
   goto   $-2
   decfsz   look,1
   goto   FS_Rev+3  ;don't look at pot
   goto   FS_Rev   ;look at pot
      
   END   
Аватара пользователя
chater
Новичок
 
Сообщения: 1
Зарегистрирован: 09 окт 2014, 20:51
Тегиpic12f629

Вернуться в Микроконтроллеры PIC

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron
Rambler's Top100