📄 temp.asm
字号:
weixuan EQU 8FFFH
shi EQU 31H
gew EQU 32H
keys equ 33H ;定义键值寄存器
y_t EQU 34h ;实际测得的温度值
x_t EQU 35h ;设定的温度值
bus equ 3eh ;2
T2SC EQU 40H ;2
n_tep equ 4bh ;7
C100US equ 4ch ;2
T100US EQU 156 ;100微秒的初值
T2S EQU 18432
T1S EQU 9216
T0S equ 4608
T0D EQU 13824
TS equ 2304
TSD equ 16128
keystate bit 00h;定义键状态寄存位,有键时为1,无键时为0
mark1 bit 01h
mark2 bit 02h
mark3 bit 03h
sclk bit p1.2
dio bit p1.3
cs_1549 bit p1.4
OUT BIT P1.6
ORG 0000H
LJMP MAIN
ORG 000BH ;定时器0的入口地址
LJMP T0INT
ORG 001BH
LJMP T1INT ;定时器1的入口地址
ORG 0030H
MAIN:
mov sp,55h
mov shi,#0
mov gew ,#0
CLR keystate
clr mark1
clr mark2
clr mark3
mov x_t,#00h
mov y_t,#00h
MOV bus,#0
MOV TMOD,#22H ;定时器0工作于方式2,定时器1工作于方式2
MOV TH0,#T100US ;载入初值
MOV TL0,#T100US
MOV T2SC,#LOW(T2S)
MOV T2SC+1,#HIGH(T2S)
MOV TH1,#T100US ;载入初值
MOV TL1,#T100US
MOV IE,#10001010B
MOV DPTR, #0A000H ;初始化
mov r7,#5
mov r6,#00h
ss0: mov a,r6
ACALL F_BUSY
lcall chabiao0
MOVX @DPTR,A
inc r6
djnz r7,ss0
MOV DPTR, #0A002H ;显示提示信息1
mov r7,#4
mov r6,#00h
ss1: mov a,r6
ACALL F_BUSY
lcall chabiao1
MOVX @DPTR,A
inc r6
djnz r7,ss1
ACALL F_BUSY
MOV DPTR, #0A000H
mov a,#0c0h ;显示位置
MOVX @DPTR,A
MOV DPTR, #0A002H ;显示提示信息2
mov r7,#4
mov r6,#04h
ss2: mov a,r6
ACALL F_BUSY
lcall chabiao1
MOVX @DPTR,A
inc r6
djnz r7,ss2
SETB TR0
start:
ACALL F_BUSY
MOV DPTR, #0A000H
mov a,#89h ;显示位置
MOVX @DPTR,A
MOV DPTR, #0A002H
ACALL F_BUSY
MOV A,#0dfh ;送数据
MOVX @DPTR,A
ACALL F_BUSY
MOV A,#43h ;送数据
MOVX @DPTR,A
ACALL F_BUSY
MOV A,#20h ;送数据
MOVX @DPTR,A
ACALL F_BUSY
MOV A,#20h ;送数据
MOVX @DPTR,A
ACALL F_BUSY
MOV DPTR, #0A000H
mov a,#0c4h ;显示位置
MOVX @DPTR,A
MOV DPTR, #0A002H
ACALL F_BUSY
mov a,shi
lcall chabiao
MOVX @DPTR,A
ACALL F_BUSY
mov a,gew
lcall chabiao
MOVX @DPTR,A
ACALL F_BUSY
MOV A,#0dfh ;送数据
MOVX @DPTR,A
ACALL F_BUSY
MOV A,#43h ;送数据
MOVX @DPTR,A
lcall key
lcall dokey
start_end:ljmp start
;查表子程序
chabiao0:
PUSH DPH
PUSH DPL
mov dptr,#TABLE0
movc a,@a+dptr
POP DPL
POP DPH
RET
chabiao1:
PUSH DPH
PUSH DPL
mov dptr,#TABLE1
movc a,@a+dptr
POP DPL
POP DPH
RET
chabiao:PUSH DPH
PUSH DPL
mov dptr,#TABLE
movc a,@a+dptr
POP DPL
POP DPH
RET
;定义查找表
TABLE0: db 01h,38h,0ch,06h,80h
TABLE1: db 43h,55h,52h,3ah,50h,52h,45h,3ah
TABLE: db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h
PWTAB: DB 10H, 27H ;10000
DB 0E8H,03H ;1000
DB 64H, 00H ;100
DB 0AH, 00H ;10
;判断忙信号
F_BUSY:
PUSH DPH
PUSH DPL
push acc
WAIT:
MOV DPTR, #0A001H
movx a,@DPTR
JB ACC.7,WAIT
pop acc
POP DPL
POP DPH
RET
;延迟程序
DELAY: MOV R7,#100
DE: MOV R6,#200
D2: DJNZ R6,D2
DJNZ R7,DE
RET
;ad
atod:
mov r1,#00h
mov r2,#00h
lcall a_d
lcall delay1
mov r1,#00h
mov r2,#00h
lcall a_d
lcall trans
mov a,n_tep-4
mov n_tep-5,a
mov n_tep-4,#2eh
mov a,n_tep-1
mov b,#100
mul ab
mov bus,a
mov a,n_tep-2
mov b,#10
mul ab
add a,bus
add a,n_tep-3
mov y_t,a
atod_end:ret
a_d: mov r3,#10
again: clr sclk
clr cs_1549
mov c,dio
mov a,r2
rlc a
mov r2,a
mov a,r1
rlc a
mov r1,a
setb sclk
clr sclk
djnz r3,again
setb cs_1549
ret
delay1:
mov r4,#8
non: nop
djnz r4,non
ret
trans:
PUSH DPH
PUSH DPL
mov a,r1
MOV R3,a
BBCD: MOV R0,#n_tep
MOV R7,#04H
MOV DPTR,#PWTAB
MOV R6,#00H
BBC1: MOV A,R6
MOVC A,@A+DPTR
MOV R4,A
INC R6
MOV A,R6
MOVC A,@A+DPTR
MOV R5,A
INC R6
MOV @R0,#00H
BBC2: CLR C
MOV A,R2
SUBB A,R4
MOV R2,A
MOV A,R3
SUBB A,R5
MOV R3,A
JC BBC3
INC @R0
lJMP BBC2
BBC3: MOV A,R2
ADD A,R4
MOV R2,A
MOV A,R3
ADDC A,R5
MOV R3,A
DEC R0
DJNZ R7,BBC1
MOV A,R2
MOV @R0,A
POP DPL
POP DPH
ret
xian:
PUSH DPH
PUSH DPL
ACALL F_BUSY
MOV DPTR, #0A000H
mov a,#84h ;显示位置
MOVX @DPTR,A
MOV DPTR, #0A002H
ACALL F_BUSY
mov a,n_tep-1
lcall chabiao
MOVX @DPTR,A
ACALL F_BUSY
mov a,n_tep-2
lcall chabiao
MOVX @DPTR,A
ACALL F_BUSY
mov a,n_tep-3
lcall chabiao
MOVX @DPTR,A
ACALL F_BUSY
mov a,n_tep-4
MOVX @DPTR,A
ACALL F_BUSY
mov a,n_tep-5
lcall chabiao
MOVX @DPTR,A
POP DPL
POP DPH
ret
kongzhi:
clr TR1
PUSH DPH
PUSH DPL
mov a,shi
mov b,#10
mul ab
add a,gew
mov x_t,a
; mov a,x_t
clr c
subb a,y_t
mov bus,a
jc nok
jz nok
clr c
subb a,#10
jc k1
jz k1
MOV C100US,#LOW(T2S)
MOV C100US+1,#HIGH(T2S)
SETB OUT
jmp kongzhi_end
k1: clr c
mov a,bus
subb a,#5
jc k2
jz k2
MOV C100US,#LOW(T1S)
MOV C100US+1,#HIGH(T1S)
SETB OUT
setb TR1
setb mark1
jmp kongzhi_end
k2: clr c
mov a,bus
subb a,#2
jc k3
jz k3
MOV C100US,#LOW(T0S)
MOV C100US+1,#HIGH(T0S)
SETB OUT
setb TR1
setb mark2
jmp kongzhi_end
k3: clr c
mov a,bus
subb a,#1
jc nok
jz nok
MOV C100US,#LOW(TS)
MOV C100US+1,#HIGH(TS)
SETB OUT
setb TR1
setb mark3
jmp kongzhi_end
nok: clr out
kongzhi_end:
POP DPL
POP DPH
ret
;中断0处理子程序
T0INT:
clr TR0
PUSH PSW
PUSH ACC
PUSH DPH
PUSH DPL
MOV A,T2SC
JNZ GOON0
DEC T2SC+1
GOON0:
DEC T2SC
MOV A,T2SC+1
ORL A,T2SC
JNZ EXIT0
LCALL atod
lcall xian
lcall kongzhi
MOV T2SC+1,#HIGH(T2S)
MOV T2SC,#LOW(T2S)
;退出中断0
EXIT0:
SETB TR0
POP DPL
POP DPH
POP ACC
POP PSW
RETI
;中断1处理子程序
T1INT:
PUSH PSW
PUSH ACC
PUSH DPH
PUSH DPL
MOV A,C100US
JNZ GOON1
DEC C100US+1
GOON1:
DEC C100US
MOV A,C100US+1
ORL A,C100US
JNZ EXIT
jnb mark1,mm1
MOV C100US,#LOW(T1S)
MOV C100US+1,#HIGH(T1S)
jmp next
mm1: jnb mark2,mm2
MOV C100US,#LOW(T0D)
MOV C100US+1,#HIGH(T0D)
jmp next
mm2: jnb mark3,next
MOV C100US,#LOW(TSD)
MOV C100US+1,#HIGH(TSD)
next: clr out
;退出中断1
EXIT:
POP DPL
POP DPH
POP ACC
POP PSW
RETI
;键盘子程序:
KEY: lcall keytest
jnb keystate,keyend
lcall delay
lcall delay
lcall keytest
jnb keystate,keyend
;读取键盘的值
MOV a,#01h
mov dptr,#weixuan
movx @dptr,a
movx a,@dptr
anl a,#0fh
key0: cjne a,#01h,key1
mov keys,#00h
setb keystate
ajmp keyend
key1: cjne a,#02h,key2
mov keys,#01h
setb keystate
ajmp keyend
key2: cjne a,#04h,keynext1
mov keys,#02h
setb keystate
ajmp keyend
keynext1:clr keystate
keyend: ret
;键盘测试程序,返回结果在keystate中
keytest:
mov a,#0ffh
MOV dptr,#weixuan
MOVX @dptr,a
MOVX a,@dptr
anl a,#0fh
jz keytest0
setb keystate
jmp keytest1
keytest0: clr keystate
keytest1: ret
;键盘处理子程序
dokey: jnb keystate,keyend1
mov a,keys
key_0: cjne a,#00h,key_1
ajmp key00
key_1: cjne a,#01h,key_2
ajmp key11
key_2: cjne a,#02h,keyend1
ajmp key22
;执行相应的动作
key00: lcall jin_start
ajmp keyend1
key11: lcall shi_add1
ajmp keyend1
key22: lcall ge_add1
ajmp keyend1
keyend1: ret
;判断键盘是否弹起
keyup:
scan: lcall keytest
lcall delay
jb keystate,scan
ret
;键盘响
xiang: clr p1.6
lcall delay
lcall delay
setb p1.6
ret
;开始进行温度控制
jin_start:
lcall keyup
lcall xiang
dec shi
mov a,shi
cjne a,#0,start_end1
mov shi,#9
start_end1:
ret
;十位值设定
shi_add1:
lcall keyup
lcall xiang
inc shi
mov a,shi
cjne a,#10,shi_add1_end
mov shi,#0
shi_add1_end:ret
;个位值设定
ge_add1:
lcall keyup
lcall xiang
inc gew
mov a,gew
cjne a,#10,ge_add1_end
mov gew,#0
ge_add1_end:ret
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -