📄 tch3000.asm
字号:
#include ht48r06A-1.inc
data .section 'data'
_buz equ pb.1
;********************************************************************************
bha equ [40h]
bhs equ [41h]
becon equ [42h]
betim equ [43h]
betimbak equ [44h]
ustim equ [45h]
f_2ms equ [46h].0
frist_one equ [46h].1
frist_two equ [46h].2
O5sh equ [47h]
halfs equ [48h]
stim equ [49h]
mtim equ [4ah]
f_pull equ [4bh]
kdisc equ [4ch]
keycou equ [4dh]
SEG equ [4eh]
dig1 equ [4fh]
dig2 equ [50h]
onesecond equ [51h]
tensecond equ [52h]
on_key equ [53h]
off_key equ [54h]
dead equ [55h]
threemin equ [56h]
frist equ [57h]
mark equ [58h]
delay equ [59h]
;---------------------------------------------------------------------------------
code .section at 000h 'code'
org 000h
jmp start
org 004h
reti
org 008h
jmp timint
org 010h
;初始化---------------------------------------------------------------------------
start:
clr intc
clr wdt1
clr wdt2
mov a,40h
mov mp,a
mov a,64
ramclr:
clr r0
inc mp
sdz acc
jmp ramclr
;---------------------------------------------------------------------------------
mov a,131
mov tmr,a
set intc.0
set intc.2
mov a,10010001b
mov tmrc,a
mov a,2
mov becon,a
mov a,80
mov betim,a
mov a,0
mov pac,a
mov a,0ffh
mov pa,a
clr pcc.1
clr pbc.2
set pc.1
set pb.2
set dead
mov a,18
mov threemin,a
;*********************************************************************************
main:
snz f_2ms
jmp main
clr f_2ms
clr wdt1
clr wdt2
jmp beedirsub
key:
jmp keysub
disply:
jmp displysub
timer:
jmp timersub
over:
jmp main
;定时中断程序*********************************************************************
;---------------------------------------------------------------------------------
;模块 名:timint
;输 入:无
;输 出:f_2ms,f_suss
;调用模块:无
;功 能:定时中断、产生2ms标志,蜂鸣器驱动,遥控接收。
;---------------------------------------------------------------------------------
timint:
mov bha,a ;125us中断一次
mov a,status
mov bhs,a
;bee-------------------------------------------------
snz becon.0
jmp beeex
clr pbc.1
mov a,00000010b
xorm a,pb
nop
nop
beeex:
inc ustim
mov a,ustim
sub a,16
snz c
jmp timintex
clr ustim
set f_2ms
siz O5sh
jmp timintex
set halfs
inc frist
mov a,frist
sub a,1
snz c
jmp timintex
set frist_one
mov a,frist
sub a,2
snz c
jmp timintex
clr frist_one
clr frist
timintex:
mov a,bhs
mov status,a
mov a,bha
reti
;嵌套1子程序**********************************************************************
;---------------------------------------------------------------------------------
;模块 名:beedirsub
;输 入:becon、betim
;输 出:becon
;调用模块:无
;功 能:蜂鸣器控制。
;---------------------------------------------------------------------------------
beedirsub:
sz becon
jmp beework
clr _buz
jmp beesubex
beework:
inc betimbak
mov a,betimbak
sub a,betim
snz c
jmp beesubex
clr betimbak
dec becon
beesubex:
jmp key
;---------------------------------------------------------------------------------
;模块 名:timersub
;输 入:无
;输 出:无
;调用模块:timoff
;功 能:定时
;---------------------------------------------------------------------------------
timersub:
snz on_key.0
jmp timersubex
sz dead.0
jmp timersubex
snz halfs.0
jmp timersubex
clr halfs
inc stim
mov a,stim
sub a,2
snz c
jmp timersubex
clr stim
set onesecond
;1s-----------------------------------------------
inc mtim
mov a,mtim
sub a,10
snz c
jmp timersubex
clr mtim
set tensecond
sdz threemin
jmp timersubex
jmp all_off
;0.5m--------------------------------------------------
timersubex:
jmp over
;---------------------------------------------------------------------------------
;模块 名:scankey
;输 入:无
;输 出:无
;调用模块:kmodesub、kswsub、offsub、ktimsub、on_spedsub、klight
;功 能:按键处理
;---------------------------------------------------------------------------------
keysub:
set pb.2
set pc.1
;-------------------------------------------------------------------------------------
set pcc.0
set pc.0
sz pc.0
jmp loosen_key
sz f_pull
jmp keysubex
keysao:
mov a,2
mov becon,a
mov a,40
mov betim,a
inc kdisc
mov a,kdisc
sub a,1
sz z
call key0
mov a,kdisc
sub a,2
sz z
call key1
jmp keysubex
loosen_key:
inc keycou
mov a,keycou
sub a,30
snz c
jmp keysubex
clr keycou
clr f_pull
jmp keysubex
key0:
clr dead
set f_pull
clr off_key
set on_key
ret
key1:
set f_pull
clr on_key
clr kdisc
set off_key
ret
keysubex:
jmp disply
;---------------------------------------------------------------------------------
;模块 名:displysub
;输 入:无
;输 出:无
;调用模块:无
;功 能:显示
;---------------------------------------------------------------------------------
displysub:
snz on_key.0
jmp zijian
sz dead.0
jmp digital
snz off_key.0
jmp digital
jmp off_reset
digital:
SNZ SEG.0
JMP PA2SEG
MOV A,2
MOV SEG,A
set pb.2
sz onesecond
inc dig1
mov a, dig1
add a,tab1
mov tblp,a
tabrdl acc
mov pa,a
clr pc.1
clr onesecond
jmp disubex
;--------------------------------------------------------------------------------
PA2SEG:
MOV A,1
MOV SEG,A
set pc.1
sz tensecond
call dg2
jmp digst2
dg2: inc dig2
clr dig1
clr onesecond
ret
digst2: mov a, dig2
add a,tab1
mov tblp,a
tabrdl acc
mov pa,a
clr pb.2
clr tensecond
mov a,dig2
sub a,6
snz c
jmp disubex
clr dig2
disubex:
jmp timer
zijian:
sz dead
jmp disubex
snz frist_one
jmp zjoff
jmp zjon
zjon:
clr pc.1
clr pb.2
mov a,10
add a,tab1
mov tblp,a
tabrdl acc
mov pa,a
mov a,2
mov delay,a
sdz delay
jmp disubex
clr frist_one
jmp disubex
zjoff:
set pc.1
set pb.2
mov a,10
add a,tab1
mov tblp,a
tabrdl acc
mov pa,a
jmp disubex
;TAB*****************************************************************************
org 300h
tab1:
dc 0c0h;0
dc 0f9h;1
dc 0A4h;2
dc 0B0h;3
dc 099h;4
dc 092h;5
dc 082h;6
dc 0F8h;7
dc 080h;8
dc 090h;9
dc 0bfh;-
;------------------------------------------------------------------------
off_reset:
set pb.2
set pc.1
jmp main
;------------------------------------------------------------------------
all_off:
set pb.2
set pc.1
set dead
jmp start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -