📄 电动机转速测量与控制.asm
字号:
org 0000h
ljmp main
org 0003h
ljmp in0
org 000bh
ljmp irt0
org 0013h
ljmp in0
;8279初始化
main:mov sp,#60h
mov dptr,#5fffh
mov a,#0dch
movx @dptr,a
LP: MOVX A,@DPTR
JB ACC.7,LP
mov a,#00h
movx @dptr,a
mov a,#34h
movx @dptr,a
;8279初始化
setb ea ;开中断
mov r0,#39h
mov r7,#06h
LLP:mov @r0,#0ffh ;0ff->39-3E
inc r0
djnz r7,LLP
qc10:lcall DESY ;显示转速
ljmp qc10
;初始化T0'
mov th0,#3Ch
mov tL0,#0B0h
mov tmod,#01h ;使用T0
mov ip,#02h ;开T0中断
mov ie,#87h
mov 30h,#02h
mov 40h,#14h ;记录T0中断次数,1s
mov 41h,40h ;调节电压,使达到设定值
mov 42h,#00h ;存放转速
mov 31h,#0ah ;每10个脉冲,p1.0求反
mov 35h,#00h
setb it0
setb tr0 ;T0运行控制
setb ex1
;读入键值 每次输入2位
;记录转速
IN0:PUSH ACC
PUSH DPH
PUSH DPL
INC 42H
DJNZ 31H,RT1
MOV 31H,#0AH
CPL P1.0 ;10个脉冲取反一次
RT1:POP DPL
POP DPH
POP ACC
RETI
;求1s内的转速
IRT0:PUSH ACC
PUSH DPH
PUSH DPL
MOV TL0,#0b0H
MOV TH0,#3CH
DJNZ 40H,RT2
MOV 40H,#14H
CPL P1.0 ;取反
MOV A,42H ;1s内脉冲数送往A
MOV 42H,#00H
MOV B,#0AH
DIV AB ;除10
MOV 39H,B ;保存转速低位
MOV 50H,B
MOV B,#0AH
DIV AB
MOV 3AH,B ;保存转速高位
CALL DESY
MOV A,3AH
SWAP A
;转速判断
ORL A,50H
MOV 45H,A ;45是转速
MOV A,35H ;35是设定值
SUBB A,45H
JC DSP
JZ RT2
INC 41H
LJMP PSD
DSP:DEC 41H
PSD:MOV A,41H
MOV DPTR,#7FFFH
MOVX @DPTR,A
mov 42h,#0
RT2:POP DPL
POP DPH
POP ACC
RETI
;七段码显示
DESY:MOV R2,#06H
MOV A,#92H
MOV DPTR,#5FFFH
MOVX @DPTR,A
MOV R0,#39H
TY11:MOV A,@R0
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV DPTR,#5EFFH
MOVX @DPTR,A
INC R0
DJNZ R2,TY11
RET
delay: mov r7,#200
DL: mov r6,#123
nop
DL1: djnz r6,DL1
djnz r7,DL
TAB1:DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H,88H
DB 83H,0C6H,0A1H,86H,8EH,8CH
DB 0C1H,89H,0C7H,0BFH,91H
DB 00H,0FFH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -