专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

合泰单片机控制5线4相步进电机控制程序

作者:huqin   来源:本站原创   点击数:  更新时间:2014年02月11日   【字体:

;步进电机的驱动信号必须为脉冲信号!!! 转动的速度和脉冲的频率成正比!!!
; 28BYJ48步进电机步进角为 5.625度
; A组线圈对应 PC.0
; B组线圈对应 PC.1
; C组线圈对应 PC.2
; D组线圈对应 PC.3
; 正转次序: AB组--BC组--CD组--DA组 (即一个脉冲,正转5.625度)
; 完整的源程序下载:http://www.51hei.com/f/htbjdj.rar
include HT66F50.inc

ORG 0000H
JMP A1
ORG 0014H ;多功能中断入口地址
JMP ZD1
ORG 002DH
Q1:
DC 03H ; 0 AB
DC 06H ; 1 BC
DC 0CH ; 2 CD
DC 09H ; 3 DA
A1: 

MOV A,08H ;跟CP1C寄存器设置要求选择数据
MOV CP1C,A ;设置PC口为I/0口而不是中断口
CLR PCC ;设置pc 口为输出口
MOV A,0 ;设置初始脉冲
MOV [80H],A ;

MOV A,00000000B ;设置TM2 计数时钟位为fSYS/4
MOV TM2C0,A
MOV A,11000001B ;设置TM2中断为定时/计数模式选择比较器A匹配
MOV TM2C1,A
MOV A,LOW  5000 ;设置中断时间为5000个时钟周期
MOV TM2AL,A ;低8位
MOV A,HIGH 5000 ;设置中断时间为5000个时钟周期
MOV TM2AH,A ;高8位不能少于3500个时钟周期否则无法启动
CLR MF0F ;清多功能中断0标志
CLR T2AF ;清定时器2较器A中断标志
SET MF0E ;使能多功能0中断
SET T2AE ;使能定时器2较器A中断
SET EMI ;使能总中断
SET T2ON ;开始计数

JMP $ ;
;*******************************************************
; 中断服务子程序
;******************************************************* 
ZD1: 
MOV [0F0H],A ;压栈ACC到0F0H
MOV A,STATUS ;
MOV [0F1H],A ;压栈status标志寄存器到0F1H

 

MOV A,Q1 ;数据表地址
CLR TBHP ;清数据表地址高位否则出错

ADD A,[80H] ;利用间接寄存器找到数据表的地址 
MOV TBLP,A ;表格指针寄存器TBLP
TABRD PC ;查表并将数据存到PC口寄存器

INC [80H] ;数据表地址加1控制下一相线圈
MOV A,4
SUB A,[80H] ;判断是否完成4相
SNZ Z
JMP ZD2 ;否则跳出中断
MOV A,0 ;是则从新初始化寄存器数据
MOV [80H],A ; 
ZD2: 
MOV A,[0F1H] ;弹栈后进先出先进后出 
MOV STATUS,A ;弹栈0F1H的数到标志寄存器
MOV A,[0F0H] ;弹栈0F0H的数到acc
CLR MF0F ;清多功能标志
CLR T2AF ;清定时器2比较器A标志
RETI ;中断返回

END

关闭窗口

相关文章