📄 cont.asm
字号:
;步进电机控制程序
;**************************************************************************
;主程序
ORG 0000H
MOV R3,#00H
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 DPTR,#TABLE ;控制字首地址
LP1: MOV A,R3 ;查表偏移量送A
MOVC A,@A+DPTR ;查表取控制字
MOV P1,A ;控制字送P1口
ACALL DELAY ;延时
INC R3 ;偏移量+1(拍数加1)
AJMP LP1
RET
LOOP4: MOV A,@R0 ;取出键值
CJNE A,#01H,LOOP5 ;是反转键吗?非转LOOP5
LP2: MOV A,R3 ;查表偏移量送A
ADD A,#08H ;修正偏移量,查反向控制字
MOV R3,A ;偏移量保存在R3中
AJMP LP1
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
TABLE: DB 10H,30H,20H,60H,40H,0C0H,80H,90H ;正转
DB 10H,90H,80H,0C0H,40H,60H,20H,30H ;反转
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -