📄 cs_2.asm
字号:
;FOR EAT598
D0832 EQU 0F218H ;0832数据口地址
D0809 EQU 0F230H ;0809通道1地址
C8255 EQU 0F22BH ;8255控制字口地址
D8255A EQU 0F228H ;8255 PA口地址
SPDTR EQU 40H ;速度控制值暂存器
SWITCH EQU 44H ;开关状态码暂存器
SPEED EQU 45H ;速度测量值暂存器
ZEROSPD EQU 00H ;零速度对应的D/A转换数据
ORG 0000H
LJMP START
ORG 0100H
START:
MOV SP,#70H
LCALL INIT ;调用初始化子程序
LPRUN:
LCALL CHKSWITCH ;调用开关状态检测子程序
LCALL CHKSPEED ;调用位置检测子程序
SJMP LPRUN
INIT:
MOV DPTR,#D0832 ;直流电机停转
MOV A,#ZEROSPD
MOVX @DPTR,A
MOV SPDTR,#ZEROSPD
MOV DPTR,#C8255
MOV A,#90H
MOVX @DPTR,A ;A口输入,C口输出
INITRET:
RET ;初始化子程序返回
CHKSWITCH: ;开关状态检测子程序
MOV DPTR,#D8255A
MOVX A,@DPTR ;读入开关状态
ANL A,#8FH ;屏蔽无效位
CJNE A,SWITCH,$+6 ;开关状态
LJMP SWITCHRET ;未改变则子程序返回
MOV SWITCH,A ;保存新的开关状态值
RLC A ;检测开关状态并作出相应处理
JC $+7
MOV DPTR,#MR
SJMP $+2
RLC A
RLC A
RLC A
RLC A
JC SPD4
RLC A
JC SPD3
RLC A
JC SPD2
RLC A
JC SPD1
SJMP SPD0
SPD4:
MOV A,#04H
SJMP DRIVE
SPD3:
MOV A,#03H
SJMP DRIVE
SPD2:
MOV A,#02H
SJMP DRIVE
SPD1:
MOV A,#01H
SJMP DRIVE
SPD0:
MOV A,#00H
SJMP DRIVE
DRIVE:
MOVC A,@A+DPTR
MOV DPTR,#D0832
MOVX @DPTR,A
SWITCHRET:
RET
CHKSPEED:
MOV DPTR,#D0809
MOVX @DPTR,A ;开始A/D转换
LCALL DELAY
MOVX A,@DPTR ;读取转换结果
MOV SPEED,A ;保存
RET
DELAY:
MOV R2,#0FH
MOV R3,#0FFH
DJNZ R3,$
DJNZ R2,$-4
RET
MR: DB ZEROSPD,2FH,3FH,4FH,5FH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -