📄 水温水位控制.asm
字号:
LED_ADDR EQU 2000H ;定义LED数码管的数据段地址
;定义计数单元
DBUFFER DATA 31H
DATA_BUF DATA 40H ;定义输出初始值
LEDCS EQU P1.6 ;定义LED片选信号线
DATA_SL DATA 37H
COUNTER DATA 30H ;定义计数单元
ORG 8000H ;伪指令,定义程序从8000H开始存放
AJMP MAIN
ORG 800BH ;中断入口向量地址
AJMP LEDINT0
org 801bh
ljmp counter0
ORG 8100H ;伪指令,定义以下程序从8100H开始存放
MAIN: MOV SP,#60H ;给堆栈指针赋初值
MOV TMOD,#051H ;定时器0工作于方式1
MOV TH0,#0fcH ;重新给计数器赋初值
MOV TL0,#017H
mov th1,#00h
mov tl1,#00h
MOV DBUFFER,#0FFH ;送输出初始数据
;赋初值07FH,点亮L8
SETB ET0 ;允许定时器0溢出中断
SETB EA ;开放总中断
SETB TR0 ;计时开始
SETB ET1 ;允许定时器0溢出中断
SETB EA ;开放总中断
SETB TR1 ;计时开始
MOV DPTR,#LED_ADDR ;LED发光二极管操作地址送DPTR
CLR LEDCS ;使能LED发光二极管
MOV DATA_BUF,#0H
MOV DATA_BUF+1,#0H
MOV DATA_BUF+2,#0H
MOV DATA_BUF+3,#0H
MOV DATA_BUF+4,#0H
MOV DATA_BUF+5,#0H
mov COUNTER,#0
mov COUNTER+1,#0
mov COUNTER+2,#0
mov COUNTER+3,#0
mov COUNTER+4,#0
mov COUNTER+5,#0
LOOP:
mov a,TL1
mov b,#10
div ab
mov 45h,a
mov a,b
mov b,#10
div ab
mov 44h,a
mov a,b
mov b,#10
div ab
ACALL DISPLAY ;输出显示
AJMP LOOP
RRL:
mov 40H,41H
mov 41H,42H
mov 42H,43H
mov 43H,44H
mov 44H,45H
ret
DISPLAY:
MOV R7,#06H ;给R7赋初值,存放数码管的个数
MOV R0,#DATA_BUF ;把显示缓冲区首地址送R0
MOV DATA_SL,#0FEH
LOOP1:
MOV A,@R0 ;取若显示的数据
ACALL TABLE ;查段码表,得出该数据对应的段码
cjne R7,#4,pp0
add a,#80H
pp0: cjne r7,#6,pp
add a,#80H
pp: MOV DPTR,#LED_ADDR ;LED数码管地址送DPTR
MOVX @DPTR,A
MOV A,DATA_SL ;位码送A
MOV P1,A ;输出位码
ACALL DELAY ;调延时子程序
MOV P1,#0FFH ;输出位码
Rl A ;取下一个数码管
MOV DATA_SL,A ;保存该位码值
INC R0 ;取下一个数据显示
DJNZ R7,LOOP1 ;6位数据显示完否?
RET
;**************
;延时子程序
;**************
DELAY:
MOV R6,#5H
DELAY0: MOV R5,#40H
DELAY1: DJNZ R5,DELAY1
DJNZ R6,DELAY0
RET
;查表子程序
TABLE: INC A ;基地址加一
MOVC A, @A+PC ;查段码表,取其相应的段码
RET
DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,80H,090H ;0-9的段码
DB 088H,083H,0c6H,0a1H,86H,8eH,0bfH,89H,8cH ;A-F、-、P的段码
;
;***********************
;定时器0中断服务子程序
;***********************
LEDINT0:
PUSH PSW ;压栈保护现场
PUSH ACC
CLR TR0 ;禁止定时器计数
MOV TH0,#0fcH ;重新给计数器赋初值
MOV TL0,#017H
inc 35H
mov a,35H
cjne a,#0Ah,LEDRET
mov 35H,#0
inc 34H
mov a,34H
cjne a,#0Ah,LEDRET
mov 34H,#0
inc 33H
mov a,33H
cjne a,#0Ah,LEDRET
mov 33H,#0
inc 32H
mov a,32H
cjne a,#0Ah,LEDRET
mov 32H,#0
inc 31H
mov a,31H
cjne a,#6,LEDRET
mov 31H,#0
inc 30H
mov a,30H
cjne a,#10,LEDRET
mov 30H,#0
LEDRET: mov a,34H
cjne a,#1,pp2
clr TR1
pp2:
SETB TR0 ;启动定时器
POP ACC ;出栈
POP PSW
RETI ;中断返回
;
COUNTER0: ;计数中断服务子程序
PUSH PSW ;保护现场
PUSH ACC
mov th1,#00h
mov tl1,#00h
;开始计数
clr TF1
POP ACC ;出栈
POP PSW
RETI ;中断返回
;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -