; 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
上一篇:形象解释PID算法+PID算法源代码
下一篇:合泰单片机ADC转换程序
推荐阅读最新更新时间:2024-03-16 14:01