📄 sound.asm
字号:
;***************
;sound_program 2002.5.8
;***************
dog_data equ 0ffh
max_adr equ 16
;*********************************************************************
play_mode equ 08h
play_no equ play_mode+1
send_no equ play_no+1
rs_mode equ send_no+1
rece_dog equ rs_mode+1
;************************************************************************
bps_use equ rece_dog+1
;******************************************************
adr equ bps_use+1 ;mast work=piont_l
count_not equ adr+1 ; ;mast work=piont_H
command equ count_not+1;00=no 01=do
nub_l_send equ command+1
nub_h_send equ nub_l_send+1
year equ nub_h_send+1
mon equ year+1
day equ mon+1
hour equ day+1
min equ hour+1
sec equ min+1
;*********************************************************
in_piont equ sec+1
out_piont equ in_piont+1
bps_own EQU out_piont+1;2002.5.21
;********************************** rece_dat_485 =12 dyte***********************
rece_no equ 14 ;2002.5.24
;*********************************************************************************
ask_485 equ 21h
jiao_485 equ ask_485+1 ;slave answer 2002.5.24
;****************************************
adr_bak equ jiao_485+1;mast send data
count_not_bak equ adr_bak+1
command_bak equ count_not_bak+1
nub_l_bak equ command_bak+1
nub_h_bak equ nub_l_bak+1
year_bak equ nub_h_bak+1
mon_bak equ year_bak+1
day_bak equ mon_bak+1
hour_bak equ day_bak+1
min_bak equ hour_bak+1
sec_bak equ min_bak+1
jiao_bak equ sec_bak+1
;*************************************************2002.4.1
sound_buf equ jiao_bak+1
play_data equ sound_buf+15
sp_data equ play_data+45
;**********************************************************************************
frist_Ri bit 00h
;*************************************************
rs_led bit p3.5
ipt bit p3.7;test play
sbt bit p3.6;stop play
busy bit p3.2
;*******************************************2002.3.20
rs_en bit p3.3
;*************************************** bps_dip
bps_on bit p1.2
test_sound bit p1.1
;******************************************************************
T_H_100ms EQU 07ch ;f755H=>2.5MS
T_L_100ms EQU 8aH ;11.0592mhz
TIMER_no EQU 4D ;230400uS=250ms
key_da equ 060h ;#01100000b
dog equ 20h
;************************************************************************
qing equ 14
bai equ 11
shi equ 10
hao_gu_ke_dao equ 27
hao_chuang_kou equ 28
ban_li equ 19
stop equ 0ffh
;************************************************************************
oRG 0000H; ;
sjmp start
ORG 0003H; ;
jmp int_do
ORG 000BH ;
reti;LJMP T0 ;
ORG 0013H
reti ;
ORG 001BH ;
reti ;
ORG 0023H ;
jmp rs_485;RETI
ORG 002bH ;
reti
;**************************************
start:
clr rs_en
clr ipt
clr sbt
clr p1.0
mov p2,#00
MOV b,#07fh ;
MOV R0,#01H ;
cR: INC R0 ;
MOV @R0,#00d ;
djnz b,cr
mov sp,#sp_data
call int_ctrl
call bps_key
call bps_int
setb ea
go_2:
;setb ri ;text use
;clr ri
go_3:
mov p2,#0;close sound
;call int_sound
;***************************************************
; MINI_Pragram
;***********************************************
STAR_BI:
call bps_key
call bps_int
call rs_mode_do
call in_play_data
call play_mode_do
call key_bord
SJMP STAR_BI
;**********************************
key_bord:
jb test_sound,key_b_end
call timer_20ms
jb test_sound,key_b_end
setb sbt ;;test sound
jnb test_sound ,$
clr sbt
key_b_end:
ret
;*********************************
bps_key:
mov bps_use,#5 ;bps=9600
jb bps_on,bps_key_end
call timer_20ms
jb bps_on,bps_key_end
mov bps_use,#4 ;bps=4800
bps_key_end:
ret
;***********************
; D=>BCD_16
;***********************
bcd_16: clr a ;in:r3r2[16 bdata]
mov r4,a ;R6,r5,r4[5 bcddata]
mov r5,a
mov R6,a
mov R7,#10h
lp0: clr c
mov a,r2
rlc a
mov r2,a
mov a,r3
rlc a
mov r3,a
mov a,r4
addc a,r4
da a
mov r4,a
mov a,r5
addc a,r5
da a
mov r5,a
mov a,R6
addc a,R6
da a
mov R6,a
djnz R7,lp0
ret
;********************************
;bps=0:0.3k
;bps=1:0.6k
;bps=2:1.2k
;bps=3:2.4k ===>>>>>>start
;bps=4:4.8k
;bps=5:9.6k
;bps=6:19.2k
bps_int:
;********************************************
mov a,bps_use
cjne a,bps_own,bp1 ;2002.3.31
ret
bp1:
mov bps_own,bps_use
mov a,pcon
anl a,#01111111b
mov pcon,a
mov dptr,#bps_asc
mov a,bps_own ;(0-4)
cjne a,#06h,bb_1
mov a,pcon
orl a,#10000000b
mov pcon,a
mov a,#0fdh ;***********************
sjmp bb_2
bb_1: movc a,@a+dptr
bb_2:
mov th1,a
mov tl1,a
setb tr1
ret
;*********************************************
timer_20ms:
push b
push a
mov a,#20h
ty2:
mov b,#0ffh
djnz b,$
dec a
jnz ty2
pop a
pop b
RET
;************************************************
bps_asc:
db 0a0h,0d0h,0e8h,0f4h,0fah,0fdh
; 300,600,1200,2400,4800,9600 ,19.2
; 0 1 2 3 4 5 6
db 'li jie by 2002.4.1'
;*********************************
;p2.0=s8;p2.1=s7p2.2=s6...p2.7=s1(p2.7=p1.0)
sound_out_asc:
db 10000000b ; 0;10000000
db 01000000b ; 1;01000000
db 00100000b ; 2;00100000
db 00010000b ; 3;00010000
db 00001000b ; 4;00001000
db 00000100b ; 5;00000100
db 00000010b ; 6;00000010
db 00000001b ; 7;00000001
db 11000000b ; 8;11000000
db 01100000b ; 9;01100000
db 00110000b ; 十;00110000
db 00011000b ; 百;00011000
db 00001100b ; 千;00001100
db 00000110b ; 万;00000110
db 00000011b ; 请;00000011
db 10000001b ; 号;10000001
db 11100000b ; 位;11100000
db 01110000b ; 到;01110000
db 00111000b ; 窗口;00111000
db 00011100b ; 办理;00011100
db 00001110b ; 点;00001110
db 00000111b ; 分;00000111
db 10000011b ; 元;10000011
db 11000001b ; 请取票;11000001
db 11110000b ; 客户;11110000
db 01111000b ; 顾客;01111000
db 00111100b ; 下一位;00111100
db 00011110b ; 号顾客到;00011110
db 00001111b ; 号窗口;00001111
db 10000111b ; 请在一米线外等候;10000111
db 11000011b ; 请稍候;11000011
db 11100001b ;; 在您前面还有;11100001
test:
mov dptr,#sound_out_asc
sta11:
clr a
movc a,@a+dptr
mov p2,#00
clr p1.0
;call asc_sound ;2002.6.13
mov c,acc.7
mov p1.0,c
mov p2,a
inc dptr
jmp sta11
;************** INT_CTRL
int_ctrl:
clr rs_en
setb ren
;setb et0
;setb ex0
;setb it0 ;into=\
;clr it0
MOV TMOD,#00100001B;**********2001.5.24
MOV SCON,#11110000b ;mode 3 2001.6.7
;clr ps
setb es
ret
;*********************************
in_play_data:
jbc frist_ri,inp1
inp2:
ret
inp1:
mov a,command
jz inp2
; in rece data to in_piont buf 45 ram
mov a,in_piont
mov b,#03
mul ab ;beccuse: 3byte
add a,#play_data
mov r0,a
mov a,adr
mov @r0,a
inc r0
;******************* adr,nub_l,nub_h
mov a,nub_l_send
mov @r0,a
inc r0
mov a,nub_h_send
mov @r0,a
;***********************
inc in_piont
mov a,in_piont
cjne a,#15,inp3
mov in_piont,#0
mov out_piont,#0
inp3:
ret
read_sound:
mov a,out_piont
cjne a,in_piont,rad1
; all == to clr "0"
rad2:
mov in_piont,#0
mov out_piont,#0
ret
rad1:
jnc rad2
mov b,#03
mul ab
add a,#play_data
mov r0,a
;*********************
;inc out_piont
;************* read 3 byte win ,l,h
mov a,@r0
mov b,#10
div ab
mov dph,a
mov dpl,b ;;;dptr=win_no
inc r0
mov a,@r0 ;r3r2(in) r6r5r4(out)
mov r2,a ;nub_l_send
inc r0
mov a,@r0
mov r3,a
;**** jb r2r3 =0
jnz jbr3
mov a,r2
jnz jbr3
;*** ="0"
mov play_mode,#0
ret
jbr3:
call bcd_16 ;number_win :r2r3r4 r5r6 2002.5.24
mov a,r5
anl a,#0fh
mov r2,a
mov a,r4
anl a,#0f0h
swap a
mov r3,a
mov a,r4
anl a,#0fh
mov r4,a ;r2r3r4=number
;****************
mov r5,dph
mov r6,dpl;r5r6=win
;******************
mov dptr,#sound_asc
mov r0,#sound_buf
read_buf:
clr a
movc a,@a+dptr
cjne a,#stop,read_buf1
mov @r0,a
sjmp r_buf_end
;********************************
read_buf1:
mov @r0,a
inc dptr
inc r0
sjmp read_buf
r_buf_end:
;r2r3r4r5r6 input sound_buf
mov sound_buf+1,r2
mov sound_buf+3,r3
mov sound_buf+5,r4
mov sound_buf+7,r5 ;2002.613
mov sound_buf+9,r6
;**** jb "0"
mov b,#0
mov a,r2
jnz jb_r3
;r2=0
mov a,r3
jnz jb_r31
;r3=0 ** rl 4wei
mov r0,#sound_buf+5
mov b,#04
call rl_sound
sjmp jb_r5
jb_r31:
cjne a,#01,jb_r31_1
;r3=1
mov a,r4
jnz jb_r341
;****************
;jb r3r4=10
mov r0,#sound_buf+6
mov b,#01
call rl_sound
mov r0,#sound_buf+4
mov b,#03
call rl_sound
mov b,#04
sjmp jb_r5
jb_r341:
mov r0,#sound_buf+3
mov b,#02
call rl_sound
sjmp jb_r5
jb_r31_1:
mov a,r4
jnz jb_r341
;r4=0
mov r0,#sound_buf+6
mov b,#01
call rl_sound
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!
mov r0,#sound_buf+3
mov b,#02
call rl_sound
mov b,#03;;;;; b=1+2=3
sjmp jb_r5
jb_r3:
mov a,r3
jz jb_r4
;r3<>0
mov a,r4
jnz jb_r5
sjmp jb_r41
jb_r4:
mov a,r4
jnz jb_r41_1
;r4=0 rl 3 wei
mov r0,#sound_buf+6
mov b,#03
call rl_sound
sjmp jb_r5
jb_r41_1:
mov r0,#sound_buf+5;2002.6.15
mov b,#01
call rl_sound
sjmp jb_r5
jb_r41:
;rl 1 wei
mov r0,#sound_buf+6;6666
mov b,#01
call rl_sound
jb_r5:
mov a,r5
jnz jb_r6
;r5=0
mov a,#sound_buf+9;2002.613
clr c
subb a,b
mov r0,a
mov b,#02
call rl_sound
sjmp jb_buf_end
jb_r6:
cjne a,#01,jb_r61
;***r5=1
mov a,r6
jnz jb_buf_end
mov a,#sound_buf+8;2002.613
clr c
subb a,b
mov r0,a
push 00
mov b,#01
call rl_sound
pop 00
inc r0
;inc r0
mov b,#01
call rl_sound
sjmp jb_buf_end
jb_r61:
mov a,r6
jnz jb_buf_end
;;r6=0
mov a,#sound_buf+10;2002.613
clr c
subb a,b
mov r0,a
mov b,#01
call rl_sound
jb_buf_end:
mov play_mode,#01
inc out_piont
ret
;***************************
rl_sound:
mov a,r0
clr c
subb a,b ;#sound_adr -wei=r1
mov r1,a
rls1:
mov a,@r0
mov @r1,a
cjne a,#stop,rls2
ret
rls2:
inc r0
inc r1
sjmp rls1
sound_asc:
db qing,0,bai,0,shi,0,hao_gu_ke_dao,0,shi,0
; 0 1 2 3 4 5 6 7 8 9
db hao_chuang_kou,ban_li,stop
; 10 11 12 ;2002.6.15
;*******************************
play_mode_do:
mov a,play_mode
jnz pl1
jmp read_sound
pl2:
ret
pl1:
cjne a,#01,pl2
;**** play buf play_no
mov play_mode,#02
;*********************
pl_start:
mov a,play_no
add a,#sound_buf
mov r0,a
mov a,@r0
cjne a,#stop,pl32
mov play_no,#0
mov play_mode,#0
call timer_20ms
ret
pl32:
;********* asc changer 2002.6.13
mov dptr,#sound_out_asc
movc a,@a+dptr
mov c,acc.7
mov p1.0,c
mov p2,a
;***************
setb ex0
;********************
call timer_20ms
mov p2,#0
clr p1.0
inc play_no
ret
;*****************************
int_do:
jnb busy,$
mov play_mode,#01
clr ex0;close int0
reti
int_sound:
mov in_piont,#5
mov play_data,#05;windows
mov play_data+1,#0220 ;number_l
mov play_data+2,#00 ;number_h
mov play_data+3,#010;windows
mov play_data+4,#0100 ;number_l
mov play_data+5,#00 ;number_h
ret
;*******************
;rs_mode=0,01=>ret
rs_mode_do:
mov a,rs_mode
;jnz fd1
;setb ri
;ret
fd1:
cjne a,#01,rs_m1
;dog for rs 485
;setb ri
mov b,#0255
djnz b,$
djnz rece_dog,rs_m3 ;delay timer=100mS
;setb rs_led;2002.6.17
setb sm2
mov send_no,#0
mov rs_mode,#0
ret
rs_m1:
cjne a,#02,rs_m3
;*********** jiao yan rs_485
mov r7,#rece_no-3
mov r0,#adr_bak
clr a
rs_c2:
mov b,@r0
add a,@r0
inc r0
djnz r7,rs_c2
mov b,jiao_bak
cjne a,b,rs_ctrl_end
mov r0,#adr
mov r1,#adr_bak
mov r7,#rece_no-3
rs_c3:
mov a,@r1
mov @r0,a
inc r0
inc r1
djnz r7,rs_c3
setb frist_ri
rs_ctrl_end:
setb sm2
mov rs_mode,#0
setb rs_led
setb es
rs_m3:
ret
;*********************************************
rs_485:
push a
push b
push psw
push 00h
;****************************************************
jbc ri ,rec_s1
sjmp rs_485_end
;+++++++++++++++++++++++++++++++++++++
rec_s1:
jnb sm2 ,sm2_1
mov a,sbuf
cjne a,#01,sm2_2
;Is printer adr no answer 2002.5.24
sm224:
mov rs_mode,#0
sjmp rs_485_end
sm2_2:
cjne a,#max_adr,sm222
sm223:
sjmp sm224
sm222:
jnc sm224
clr sm2 ;ask slave
mov send_no,#0h
mov rs_mode,#01h ;rece all data 14
clr rs_led
mov rece_dog,#dog_data ;open dog
sjmp rs_485_end
sm2_1:
mov a,send_no
add a,#ask_485;first_adr
mov r0,a ;r0=rece data address
mov a,sbuf
mov @r0,a
inc send_no
mov a,send_no
cjne a,#rece_no,rs_485_end
clr es ;********stop rs485
mov send_no,#0
setb sm2
mov rs_mode,#02h
rs_485_end:
pop 00h
pop psw
pop b
pop a
reti
;*******************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -