?? 呼叫器4.asm
字號(hào):
read_key equ p3.2
del_key equ p3.3
service_key equ p3.4
VOICE EQU P3.5
VT EQU P2.1
LATCH EQU P2.0
read_flag bit 0 ;1=read
org 0
jmp main
org 0bh
jmp int
main:
call delay1
clr read_flag
mov r4,#22 ;初始化賦值
mov r0,#30h
clr_ram:
mov @r0,#0ffh
inc r0
djnz r4,clr_ram
mov scon,#0 ;設(shè)置串口方式
mov sbuf,#0fdh ;clear screen
jnb ti,$ ;判斷完沒有
clr ti ;清標(biāo)志
mov sbuf,#0fdh ;發(fā)送數(shù)據(jù)
jnb ti,$ ;判斷完沒有
clr ti ;清標(biāo)志
clr latch
setb latch ;output latch
mov r1,#30h
scan:
mov r4,#10 ;初始化賦值
mov r0,#30h
l1:
call key
cpl P2.2 ;TEST POINT
jnb VT,l1 ;判斷是否有信號(hào)
call delay1
jnb VT,l1
clr read_flag
mov a,p1
anl a,#0fh ;屏蔽高四位!!!
mov b,#10
div ab
xch a,b
mov dptr,#tab3 ;查表
movc a,@a+dptr
cpl a
mov @r0,a ;存數(shù)據(jù)
inc r0
mov sbuf,a ;發(fā)送數(shù)據(jù)
jnb ti,$ ;判斷完沒有
clr ti ;清標(biāo)志
mov a,b
mov dptr,#tab3 ;查表
movc a,@a+dptr
cpl a
mov @r0,a ;存數(shù)據(jù)
inc r0
mov sbuf,a ;發(fā)送數(shù)據(jù)
jnb ti,$ ;判斷完沒有
clr ti ;清標(biāo)志
clr latch
setb latch ;output latch
call speaker ;調(diào)用揚(yáng)聲器
clr et0
djnz r4,l1 ;程序循環(huán)20次
jmp scan
key:
jb read_key,to_1
call delay1
jb read_key,to_1
jmp read
to_1:
jb del_key,to_2
call delay1
jb del_key,to_2
jmp del
to_2:
jb service_key,to_3
call delay1
jb service_key,to_3
jmp servise
to_3:
ret
read:
setb read_flag
mov a,@r1
cpl a
jz end_of_record
cpl a
inc r1
mov sbuf,a; 發(fā)送數(shù)據(jù)
jnb ti,$; 判斷完沒有
clr ti; 清標(biāo)志
mov a,@r1
inc r1
mov sbuf,a ;發(fā)送數(shù)據(jù)
jnb ti,$ ;判斷完沒有
clr ti ;清標(biāo)志
clr latch
setb latch
jnb read_key,$
jnb del_key,$
jnb service_key,$
ret
end_of_record:
cjne r1,#30h,record_start
mov sbuf,#0fdh ;clear screen
jnb ti,$ ;判斷完沒有
clr ti ;清標(biāo)志
mov sbuf,#0fdh ;發(fā)送數(shù)據(jù)
jnb ti,$ ;判斷完沒有
clr ti ;清標(biāo)志
clr latch
setb latch ;output latch
jnb read_key,$
jnb del_key,$
jnb service_key,$
ret
record_start:
mov r1,#30h
jmp read
del:
push 0
push 1
jb read_flag,del_read_mode
del_receive_mode:
mov a,r0
mov r1,a
dec r1
dec r1
move_next1:
mov a,@r0
mov @r1,a
inc r0
inc r1
mov a,@r0
mov @r1,a
inc r0
inc r1
cjne r1,#44h,move_next1
pop 1
pop 0
mov a,r0
mov r1,a
dec r0
dec r0
jmp read
del_read_mode:
mov a,r1
clr c
subb a,#30h
jz del_done
mov a,r1
mov r0,a
dec r1
dec r1
move_next2:
mov a,@r0
mov @r1,a
inc r0
inc r1
mov a,@r0
mov @r1,a
inc r0
inc r1
cjne r1,#46h,move_next2
pop 1
pop 0
dec r1
dec r1
dec r0
dec r0
jmp read
del_done:
pop 1
pop 0
ret
servise:
jb read_flag,servise_read_mode
servise_receive_mode:
dec r0
dec r0
mov a,@r0
anl a,#0feh
mov @r0,a
inc r0
mov a,@r0
anl a,#0feh
mov @r0,a
inc r0
mov a,r0
mov r1,a
dec r1
dec r1
jmp read
servise_read_mode:
; mov a,r1
; mov r0,a
dec r1
dec r1
mov a,@r1
anl a,#0feh
mov @r1,a
inc r1
mov a,@r1
anl a,#0feh
mov @r1,a
inc r1
dec r1
dec r1
jmp read
speaker:
mov a,#5
call delay
mov a,#6
call delay
mov a,#1
call delay
; mov a,#2
; call delay
; mov a,#3
; call delay
; mov a,#2
; call delay
; mov a,#4
; call delay
ret
delay:
mov r3, #0
mov r2,a ;暫存
mov b,#2
mul ab ;變址
mov b,a ;暫存
mov dptr,#tab1
movc a,@a+dptr
mov th0,a ;賦定時(shí)器初值
mov a,b
inc dptr
movc a,@a+dptr
mov tl0,a
mov tmod,#01h
setb ea
setb et0
setb tr0
mov dptr,#tab2
mov a,r2
movc a,@a+dptr
cjne r3,#1,$
cjne r3,#0,$
cjne a,55h,$
ret
int: cpl VOICE
mov a,r2
mov b,#2
mul ab
mov b,a
mov dptr,#tab1
movc a,@a+dptr
mov th0,a
inc dptr
mov a,b
movc a,@a+dptr
mov tl0,a
inc r3
mov 55h,r3
reti
tab1: dw 0,61719,62134,62505,62670,62948,63263,63511
tab2: db 0, 6,38,74,93,136,184,238
tab3: db 0fch,60h,0dah,0f2h,66h,0b6h,0beh,0e0h,0feh,0f6h
delay1: MOV R6,#40
LOOP1: MOV R7,#0
LOOP2: DJNZ R7,LOOP2
DJNZ R6,LOOP1
; MOV R6,#20
; MOV R7,#0
RET
display:
mov sbuf,#0
jnb ti,$ ;判斷完沒有
clr ti ;清標(biāo)志
mov sbuf,#0
jnb ti,$ ;判斷完沒有
clr ti ;清標(biāo)志
mov sbuf,a ;發(fā)送數(shù)據(jù)
jnb ti,$ ;判斷完沒有
clr ti ;清標(biāo)志
mov sbuf,#0
jnb ti,$ ;判斷完沒有
clr ti ;清標(biāo)志
mov sbuf,#0
jnb ti,$ ;判斷完沒有
clr ti ;清標(biāo)志
clr latch
setb latch;
ret
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -