⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sound.asm

📁 单片机应用举例-1.7M.zip
💻 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 + -