📄 new.asm
字号:
; R0 LED显示标志,全程使用
; R1 缓冲区读写标志,0:不可读;1:可读
; R2R3 临时使用
; R5R4 T0数据缓冲寄存器
; R7R6 常数
LED1 DATA 30H
LED2 DATA 31H
LED3 DATA 32H
LED4 DATA 33H
SPEED1 DATA 34H
SPEED2 DATA 35H
LEDB1 DATA 36H
LEDB2 DATA 37H
LEDB3 DATA 38H
LEDB4 DATA 39H
MUL1 DATA 40H
MUL2 DATA 41H
PMODE DATA 42H
EN1 BIT P3.0
EN2 BIT P3.1
EN3 BIT P3.3
EN4 BIT P3.5
;**********************************************************************************
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INTR0
ORG 001BH
AJMP TIMER1
ORG 0100H
;**********************************************************************************
MAIN: ACALL PTOMO
LOOP: CJNE R1, #0, LOOP_1 ;状态0,
MOV A, R5
SUBB A, SPEED2
JZ LOOP_0
MOV SPEED2, R5
MOV R1, #1
AJMP LOOP_1
LOOP_0: MOV A, R4
SUBB A, SPEED1
JZ LOOP
MOV SPEED1, R4
MOV R1, #1
LOOP_1: CJNE R1, #1, LOOP_2 ;状态1,正在运行数据处理程序
ACALL GETSPEED
MOV R1, #2
LOOP_2: CJNE R1, #2, LOOP ;状态2,计算结束,可用led显示
MOV LED1, LEDB1
MOV LED2, LEDB2
MOV LED3, LEDB3
MOV LED4, LEDB4
MOV R1, #0
AJMP LOOP
;**********************************************************************************
PTOMO: MOV R1, #0
MOV R7, #4EH
MOV R6, #1EH
MOV DPTR, #LED_ASC
MOV LED1, #0
MOV LED2, #0
MOV LED3, #0
MOV LED4, #0
MOV TMOD, #11H ;T1为基准1ms定时,使用模式1,T0脉冲计数,使用模式1
MOV TL0, #0
MOV TH0, #0
MOV TL1, #18H ;初值应设为65536-1000
MOV TH1, #0FCH
SETB TR1
SETB ET1
SETB TR0
SETB IT0
SETB EX0
SETB EA
RET
;**********************************************************************************
TIMER1: MOV TL1, #18H
MOV TH1, #0FCH
MOV A, P3
ANL A, #80H
CJNE R1, #0, TIMER_1
ACALL DISPLAY
RETI
TIMER_1:CJNE R1, #1, TIMER_2
ACALL DISPLAY
TIMER_2:RETI
;**********************************************************************************
INTR0: MOV R5, TH0
MOV R4, TL0
MOV TH0, #0
MOV TL0, #0
RETI
;**********************************************************************************
GETSPEED:MOV R7, #4EH
MOV R6, #1EH
MOV R2, #1H
ACALL DIV16
MOV LEDB1, R3
ACALL MUL10
ACALL DIV16
MOV LEDB2, R3
ACALL MUL10
ACALL DIV16
MOV LEDB3, R3
ACALL MUL10
ACALL DIV16
MOV LEDB4, R3
CLR C
MOV A, R6
ADD A, R6
MOV R6, A
MOV A, R7
ADDC A, R7
MOV R7, A
CLR C
MOV A, R6
SUBB A, R4
MOV A, R7
SUBB A, R5
JC GETSPEED_1
INC LEDB4
MOV A, LEDB4
CJNE A, #0AH, GETSPEED_1
MOV LEDB4, #0
INC LEDB3
MOV A, LEDB3
CJNE A, #0AH, GETSPEED_1
MOV LEDB3, #0
INC LEDB2
MOV A, LEDB2
CJNE A, #0AH, GETSPEED_1
MOV LEDB2, #0
INC LEDB1
GETSPEED_1:RET
DIV16: MOV R3, #0
DIV16_1:CLR C
MOV A, R6
SUBB A, R4
MOV B, A
MOV A, R7
SUBB A, R5
JC DIV16_3
DIV16_2:MOV R7, A
MOV R6, B
INC R3
AJMP DIV16_1
DIV16_3:DJNZ R2, DIV16_2
RET
MUL10: MOV A, R6
MOV B, #10
MUL AB
MOV MUL1, A
MOV MUL2, B
MOV A, R7
MOV B, #10
MUL AB
CLR C
ADD A, MUL2
MOV MUL2, A
MOV A, B
ADDC A, #0
MOV R2, A
INC R2
MOV R6, MUL1
MOV R7, MUL2
RET
;**********************************************************************************
DISPLAY:PUSH ACC
DEC R0
CJNE R0, #0, DIS_1
SETB EN4
MOV A, LED1
MOVC A, @A+DPTR
DEC A
MOV P1, A
CLR EN1
MOV R0, #4
AJMP DIS_END
DIS_1: CJNE R0, #1, DIS_2
SETB EN3
MOV A, LED4
MOVC A, @A+DPTR
MOV P1, A
CLR EN4
AJMP DIS_END
DIS_2: CJNE R0, #2, DIS_3
SETB EN2
MOV A, LED3
MOVC A, @A+DPTR
MOV P1, A
CLR EN3
AJMP DIS_END
DIS_3: SETB EN1
MOV A, LED2
MOVC A, @A+DPTR
MOV P1, A
CLR EN2
DIS_END:POP ACC
RET
;**********************************************************************************
LED_ASC:DB 00000011B ;0
DB 10011111B ;1
DB 00100101B ;2
DB 00001101B ;3
DB 10011001B ;4
DB 01001001B ;5
DB 01000001B ;6
DB 00011111B ;7
DB 00000001B ;8
DB 00001001B ;9
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -