搜索
bottom↓
回复: 3

分享,PIC16F716驱动步进电机(汇编代码+PROTELL SCH)

[复制链接]

出0入0汤圆

发表于 2008-5-22 14:54:47 | 显示全部楼层 |阅读模式
以前用MEGA8和C参考AVR里的例程做过12864和1602液晶,最近学PIC不到一个月,动手做了个步进电机的笑笑驱动系统,大家讨论。
电机是由硬盘上拆下来的,用三个9013驱动,按照六拍运行,上电后缓慢加速,
效果还不错,只是有点噪声
P16F716的资源用到T0,T1,INDF指针,希望大家给点意见

#include <P16F716.INC>

;*****************变量定义*******************        
        CBLOCK        70H
ADD_STEP1
ADD_STEP2
ADD_STEP3
ADD_STEP4
ADD_STEP5
ADD_STEP6
STEP_NUM
WREG_TEMP
STATUS_TEMP
BASE_NUM       
COUNT               
TMR0_V
        ENDC

  __CONFIG _CP_OFF&_BODEN_ON&_PWRTE_ON&_WDT_OFF&_RC_OSC

;*****************复位入口******************   
        ORG        00H           
        GOTO        MAIN
;*****************中断入口******************
        ORG        04H
        MOVWF        WREG_TEMP    ;保护WREG
        SWAPF        STATUS,0
        MOVWF        STATUS_TEMP  ;保护STATUS
;****************************************
;                查询中断
;            TMR0为最高优先级
;****************************************
        BTFSC        PIR1,TMR1IF
        GOTO        T1_SERV
        BTFSC        INTCON,T0IF
        GOTO        T0_SERV
        GOTO        RET
;****************************************
;                T0中断
;        查表转换,循环步进数,驱动电机
;****************************************
T0_SERV
        BCF        INTCON,T0IF        ;清中断标志
        MOVF        TMR0_V,0
        MOVWF        TMR0                ;赋定时值
        INCF        FSR       
        MOVF        INDF,0       
        MOVWF        PORTA
        SUBLW        0x05
        BNZ        RET
        MOVLW        0x6F
        MOVWF        FSR                ;FSR指向STEP_ONE
        GOTO        RET
;****************************************
;                T1中断处理 1ms定时
;                负责TMR0从00加到D7
;                之后屏蔽此中断
;****************************************
T1_SERV
        BCF        PIR1,TMR1IF
        MOVLW        0xFC
        MOVWF        TMR1H
        MOVLW        0x17
        MOVWF        TMR1L                ;赋定时值
       
        INCF        TMR0_V,1
        MOVLW        0xEC        ;152us               
        SUBWF        TMR0_V,0
        BNZ        RET                ;Z非零,跳到RET
        MOVLW        0xEC                ;Z=0
        MOVWF        TMR0_V
        BCF        T1CON,TMR1ON        ;关TMR1中断
        GOTO        RET
;************中断返回,恢复现场*************  
RET
        SWAPF        STATUS_TEMP,0
        MOVWF        STATUS         ;恢复STATUS
        SWAPF        WREG_TEMP,1
        SWAPF        WREG_TEMP,0    ;恢复WREG
        RETFIE
;******************主函数******************
         ORG        50H
MAIN     
        BSF        STATUS,RP0
        MOVLW        B'11111000'
        MOVWF        TRISA                ;RA0,RA1,RA2输出
        MOVLW        B'11111111'
        MOVWF        TRISB                ;RB0作为按键输入
        MOVLW        B'00000010'        ;内部上拉,下降沿触发,
        MOVWF        OPTION_REG        ;T0时钟为内部FOCS/4,;8分频
        BSF        PIE1,TMR1IE
        BCF        STATUS,RP0
        MOVLW        .0
        MOVWF        T1CON
        BCF        PIR1,TMR1IF
        ;MOVLW        .101
        ;MOVWF        BASE_NUM        ;延时基数
       
        MOVLW        0x01
        MOVWF        ADD_STEP1
        MOVLW        0x03
        MOVWF        ADD_STEP2
        MOVLW        0x02
        MOVWF        ADD_STEP3
        MOVLW        0x06
        MOVWF        ADD_STEP4
        MOVLW        0x04
        MOVWF        ADD_STEP5
        MOVLW        0x05
        MOVWF        ADD_STEP6
       
        MOVLW        0x70        ;不能用STEP_ONE代替
        MOVWF        FSR        ;FSR指向STEP_ONE所在寄存器
       
        MOVLW        0x01                ;使转子固定在某一相位上,防止启动时的抖动
        MOVWF        PORTA
        CALL        DELAY                ;等待步进电机平稳
       
        MOVLW        0x00
        MOVWF        TMR0_V
        MOVWF        TMR0
        MOVLW        0xFC
        MOVWF        TMR1H
        MOVLW        0x17
        MOVWF        TMR1L
        BSF        T1CON,TMR1ON
        MOVLW        B'11110000'        ;开外设、T0、INT中断允许
        MOVWF        INTCON
       
LOOP        GOTO        LOOP
;******************DELAY******************
DELAY
        MOVLW        .201
        MOVWF        COUNT
LOOP1        DECFSZ        COUNT,1
        GOTO        LOOP1
        ;DECFSZ        BASE_NUM,1
        ;GOTO        DELAY
        RETURN
               
        END

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2008-5-22 15:29:22 | 显示全部楼层
楼主用的电机是什么样的??能不能把你的硬件连接图顺便贴上来

出0入0汤圆

 楼主| 发表于 2008-5-22 16:17:45 | 显示全部楼层
这里是原理图:
点击此处下载 ourdev_290202.rar(文件大小:11K) (原文件名:STEPMOTOR.rar)

出0入0汤圆

发表于 2008-6-14 19:49:10 | 显示全部楼层
多谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-8 00:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表