;步进电机的驱动信号有必要为脉冲信号!!! 滚动的速度和脉冲的频率成正比!!!
; 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
ORG0000H
JMPA1
ORG0014H ;多功能中止进口地址
JMPZD1
ORG002DH
Q1:
DC03H; 0AB
DC06H; 1BC
DC0CH; 2CD
DC09H; 3DA
A1:
MOVA,08H;跟CP1C寄存器设置要求挑选数据
MOVCP1C,A;设置PC口为I/0口而不是中止口
CLRPCC;设置pc 口为输出口
MOVA,0;设置初始脉冲
MOV[80H],A;
MOVA,00000000B;设置TM2 计数时钟位为fSYS/4
MOVTM2C0,A
MOVA,11000001B ;设置TM2中止为守时/计数模式挑选比较器A匹配
MOVTM2C1,A
MOVA,LOW 5000;设置中止时刻为5000个时钟周期
MOVTM2AL,A;低8位
MOVA,HIGH 5000;设置中止时刻为5000个时钟周期
MOVTM2AH,A;高8位不能少于3500个时钟周期不然无法发动
CLRMF0F;清多功能中止0标志
CLRT2AF;清守时器2较器A中止标志
SETMF0E;使能多功能0中止
SETT2AE;使能守时器2较器A中止
SETEMI;使能总中止
SETT2ON;开端计数
JMP$;
;*******************************************************
;中止服务子程序
;*******************************************************
ZD1:
MOV[0F0H],A;压栈ACC到0F0H
MOVA,STATUS;
MOV[0F1H],A;压栈status标志寄存器到0F1H
MOVA,Q1;数据表地址
CLRTBHP;清数据表地址高位不然犯错
ADDA,[80H];使用直接寄存器找到数据表的地址
MOVTBLP,A;表格指针寄存器TBLP
TABRDPC;查表并将数据存到PC口寄存器
INC[80H];数据表地址加1操控下一相线圈
MOVA,4
SUBA,[80H];判别是否完结4相
SNZZ
JMPZD2;不然跳出中止
MOVA,0;是则重新初始化寄存器数据
MOV[80H],A;
ZD2:
MOVA,[0F1H];弹栈后进先出先进后出
MOVSTATUS,A;弹栈0F1H的数到标志寄存器
MOVA,[0F0H];弹栈0F0H的数到acc
CLRMF0F;清多功能标志
CLRT2AF;清守时器2比较器A标志
RETI;中止回来
END