📄 bjkz.asm
字号:
;步进电机控制程序
;**************************************************************************
;主程序
ORG 000H
MOV R0,#40H ;暂存键值
START: MOV DPTR,#8FFFH ;8279初始化清除命令
MOV A,#0D1H
MOVX @DPTR,A
WAIT: MOVX A,@DPTR ;等8279清除结束
JB ACC.7,WAIT
MOV A,#00 ;8279送方式命令
MOVX @DPTR,A
MOV A,#34H ;fosc=12Mhz时钟编程命令
MOVX @DPTR,A
LOOP1: MOV DPTR,#8FFFH ;指向命令 状态口
LOOP2: MOVX A,@DPTR ;读8279状态字
ANL A,#0FH ;读状态字低字位
JZ LOOP2 ;FIFO中无键时等待键输入
MOV A,#40H ;读FIFORAM命令
MOVX @DPTR,A
MOV DPTR,#8FFEH ;指向数据口地址
MOVX A,@DPTR ;读入键值
MOV @R0,A ;暂存键值
LOOP3: CJNE A,#00H,LOOP4 ;是正转键吗?否转LOOP4
MOV P1,#10H ;是,则正向输出第一拍
ACALL DELAY ;延时
MOV P1,#30H ;输出第二拍
ACALL DELAY ;延时
MOV P1,#20H ;输出第三拍
ACALL DELAY ;延时
MOV P1,#60H ;输出第四拍
ACALL DELAY ;延时
MOV P1,#40H ;输出第五拍
ACALL DELAY ;延时
MOV P1,#0C0H ;输出第六拍
ACALL DELAY ;延时
MOV P1,#80H ;输出第七拍
ACALL DELAY ;延时
MOV P1,#90H ;输出第八拍
ACALL DELAY ;延时
LOOP4: MOV A,@R0 ;取出键值
CJNE A,#01H,LOOP5 ;是反转键吗?否转LOOP5
MOV P1,#90H ;反向输出第一拍
ACALL DELAY ;延时
MOV P1,#80H ;输出第二拍
ACALL DELAY ;延时
MOV P1,#0C0H ;输出第三拍
ACALL DELAY ;延时
MOV P1,#40H ;输出第四拍
ACALL DELAY ;延时
MOV P1,#60H ;输出第五拍
ACALL DELAY ;延时
MOV P1,#20H ;输出第六拍
ACALL DELAY ;延时
MOV P1,#30H ;输出第七拍
ACALL DELAY ;延时
MOV P1,#10H ;输出第八拍
ACALL DELAY ;延时
LOOP5: MOV A,@R0 ;取出键值
CJNE A,#03H,LOOP2 ;是停止键吗?否转LOOP2
MOV P1,#00H ;是则停转
DELAY: MOV R7,#20H ;延时
D1: MOV R6,#248
DJNZ R6,$
DJNZ R7,D1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -