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

📄 呼叫器4.asm

📁 CALLER.rar包括电路图和源程序用51单片机实现。本无线呼叫器主机设有3个按键即服务、删除、查看。具体工作流程如下:当顾客按下按键(顾客需求服务按键)后
💻 ASM
字号:
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		;设置串口方式
	mov	sbuf,#0fdh	;clear screen
	jnb	ti,$		;判断完没有
	clr	ti		;清标志
	mov	sbuf,#0fdh	;发送数据
	jnb	ti,$		;判断完没有
	clr	ti		;清标志
	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		;判断是否有信号
	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		;存数据
	inc	r0
					

	mov	sbuf,a		;发送数据
	jnb	ti,$		;判断完没有
	clr	ti		;清标志

	mov	a,b
	mov	dptr,#tab3	;查表
	movc	a,@a+dptr
	cpl	a
	mov	@r0,a		;存数据
	inc	r0

	mov	sbuf,a		;发送数据
	jnb	ti,$		;判断完没有
	clr	ti		;清标志

	clr	latch
	setb    latch		;output latch		

	call	speaker		;调用扬声器
	clr	et0
	
	djnz	r4,l1		;程序循环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;		发送数据
	jnb	ti,$;		判断完没有
	clr	ti;		清标志

	mov	a,@r1

	inc	r1

	mov	sbuf,a		;发送数据
	jnb	ti,$		;判断完没有
	clr	ti		;清标志

	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		;清标志
	mov	sbuf,#0fdh	;发送数据
	jnb	ti,$		;判断完没有
	clr	ti		;清标志
	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		;赋定时器初值
	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		;清标志
	mov	sbuf,#0
	jnb	ti,$		;判断完没有
	clr	ti		;清标志
	mov	sbuf,a		;发送数据
	jnb	ti,$		;判断完没有
	clr	ti		;清标志
	mov	sbuf,#0
	jnb	ti,$		;判断完没有
	clr	ti		;清标志
	mov	sbuf,#0
	jnb	ti,$		;判断完没有
	clr	ti		;清标志
	clr	latch
	setb    latch;		
	ret

	end	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -