pic16f508步进电机程序

发布者:SereneVoyage最新更新时间:2017-12-04 来源: eefocus关键字:pic16f508  步进电机程序 手机看文章 扫描二维码
随时随地手机看文章

; File STEP508.ASM 
; ... for PIC12C508A microcontroller 
; Program to use PIC as a step and direction controller for a unipolar

; step motor.  Step and direction PINs are GPIO-5, GPIO-3; GPIO_0, GPIO_1, GPIO_2, GPIO_4,  are ; the windings; in order (driven by NPN small sig transistors or MOSFETS) 
; Steps on negative going edge of step pulse. 

; CPU configuration 
;     (It’s a 12C508A, Internal RC oscillator, 
;     watchdog timer off, power-up timer on) 
    LIST   P=12C508A 
    processor 12c508A 
    include       
;    __config  _IntRC_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF 

; Declare variables 

pattA    equ    H’0D’    ;Current step pattern number (0-7) for axis A 
lastA    equ    H’0E’   ;Last state of step pin on axis A (1 is high, 0 is low) 
inport    equ    H’11’    ;Value of port A when read (stored for later aCCess) 
temp    equ    H’12’ 

#DEFINE STEP    inport,5    ; Step pulse input 
#DEFINE DIR    inport,3    ; Direction Input 

OPMASK    EQU    B’11000000’ 
IOMASK    EQU    B’00101000’    ; all bits output (except GP3 and GP5) 
                                ; GP0 , GP1 , GP2 , GP4  controls The stepper Coils 
                                ; GP3 controls direction 
                ; GP5 Controls Step Pulses 


     
    ORG 0 
     
; start of main code 
;*************************************************** 

;    START OF PIC 12c508A CODE FOR STEP; 

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


;------------------------------------------ 
;****Power on reset startpoint 
;------------------------------------------ 

;***Initialization of program     
    MOVWF    OSCCAL 
     
    MOVLW    OPMASK 
    OPTION     

; Set GPIO for input & output     
     
    MOVLW    IOMASK 
    TRIS    GPIO         




;Clear port and zero motors 


    MOVlw    B’00000001’ 
    MOVwf    GPIO 
    clrf    lastA 
    clrf    pattA 

;Loop around for a while to let everything stabilize 

    MOVlw    d’255’ 
    MOVwf    inport 
loop:    decfsz    inport, f 
;    goto loop 

;***Basic program loop 

;Main routine - check pin states and step on negative edge 
;Get port data and store, then check axis A 
;A10 checks if old is 0, new is 1 (update register) 
;A01 checks if old is 1, new is 0 (step and update register) 
;Similarly for axis B 

main:    MOVf    GPIO, w 
    MOVwf    inport 
    CLRWDT 
A10:    btfsc    lastA, 0 
    goto A01 
    btfss    STEP 
    goto A01 
    bsf    lastA, 0 
A01:    btfss    lastA, 0 
    goto B10 
    btfsc    STEP 
    goto B10 
    bcf    lastA, 0 
    goto stepA 

B10:    goto main 

;------------------------------------------ 
;***stepA - sub to cycle axis A one Full step 
;  Dir of 1 is increase, else decrease 

stepA:    btfss    DIR 
    decf    pattA, f 
    btfsc    DIR 
    incf    pattA, f 

;Check for pattern overflow and fix 


    MOVf    pattA, w 
    XORLW    D’255’ 
    MOVlw    D’07’ 
    btfsc    STATUS, Z 
    MOVwf    pattA 

    MOVf    pattA, w 
    XORLW    D’08’ 
    btfsc    STATUS, Z 
    clrf    pattA     

;Get step pattern and send to GPIO on bits 0-1-2-4 

    MOVf    pattA, w 
    call     dcode 
    MOVwf    GPIO 

  goto main 



;------------------------------------------ 
;***stepcode - sub to generate bit pattern for number in w (!!MUST BE 0-7!!) 
;  pattern is stored in w register  

dcode:    addwf    PCL, f        ;     Use below column for the half Step 
    retlw    B’00000001’    ;0    retlw    B’00000001’    ;0 
    retlw    B’00000010’    ;1    retlw    B’00000011’    ;1 
    retlw    B’00000100’    ;2    retlw    B’00000010’    ;2 
    retlw    B’00010000’    ;3    retlw    B’00000110’    ;3 
    retlw    B’00000001’    ;4    retlw    B’00000100’    ;4 
    retlw    B’00000010’    ;5    retlw    B’00010100’    ;5 
    retlw    B’00000100’    ;6    retlw    B’00010000’    ;6 
    retlw    B’00010000’    ;7    retlw    B’00010001’    ;7 


;Mandatory end of program command 

    end 


关键字:pic16f508  步进电机程序 引用地址:pic16f508步进电机程序

上一篇:pic16f874步进电机程序
下一篇:pic18f452读写EEPROM程序

推荐阅读最新更新时间:2024-03-16 15:48

STM32开源闭环步进电机程序
单片机源程序如下: /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __STM32F0xx_HAL_CONF_H #define __STM32F0xx_HAL_CONF_H #ifdef __cplusplus extern C { #endif #include main.h /* Exported types ------------------------------------------------------------*/ /* Exported constants -----
[单片机]
利用MCS51单片机驱动步进电机电路及程序
  在这里介绍一下用51单片机驱动步进电机的方法。   这款步进电机的驱动电压12V,步进角为 7.5度 . 一圈 360 度 , 需要 48 个脉冲完成!!!      该步进电机有6根引线,排列次序如下:1:红色、2:红色、3:橙色、4:棕色、5:黄色、6:黑色。   采用51驱动ULN2003的方法进行驱动。      ULN2003的驱动直接用单片机系统的5V电压,可能力矩不是很大,大家可自行加大驱动电压到12V。   ;******************************************************************   ;*******************
[单片机]
利用MCS51单片机驱动<font color='red'>步进电机</font>电路及<font color='red'>程序</font>
单片机控制的步进电机PWM控制程序
8051单片机控制步进电机的C51语言编写的PWM控制程序 #include intrins.h #include stdio.h #include math.h #include UPSD3200.H #include upsd_pwm.h #define uint unsigned int #define uchar unsigned char PSD_REGS PSD8xx_reg _at_ csiop; #define KEYIO (~(PSD8xx_reg.DATAIN_A)) & 0x07 sbit CP=P4^7; sbit U_D=P1^1; void init_system(); // 系统初
[单片机]
单片机 步进电机 驱动程序 ULN2003 28BYJ-48 5线4相电机
/*************** writer:shopping.w ******************/ #include reg52.h #define uint unsigned int #define uchar unsigned char uchar code FFW = { 0x01, 0x03, 0x02, 0x06, 0x04, 0x0c, 0x08, 0x09 }; uchar code REV = { 0x09, 0x08, 0x0c, 0x04, 0x06, 0x02, 0x03, 0x01 }; sbit K1 = P3 ^ 0; sbit K2 =
[单片机]
单片机 <font color='red'>步进电机</font> 驱动<font color='red'>程序</font> ULN2003 28BYJ-48 5线4相电机
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved