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

📄 okupd6464_0929.asm

📁 upd 6464a 取得程序 51 汇编指令
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	mov	r6,#0
	CALL	HB2
	MOV	LISTCOUNT,R3
	MOV	LISTCOUNT1,R4
	MOV	LISTCOUNT2,R5
	mov	a,LISTCOUNT1
	anl	a,#0fh
	mov	disdata,a
	mov	nby,#2
	mov	nbx,#4
	LCALL   displaychar
;-----------------------------------
	mov	a,LISTCOUNT2
	swap	a
	anl	a,#0fh
	mov	disdata,a
	mov	nby,#2
	mov	nbx,#5
	LCALL   displaychar
;-----------------------------------
	mov	a,LISTCOUNT2
	anl	a,#0fh
	mov	disdata,a
	mov	nby,#2
	mov	nbx,#6
	LCALL   displaychar
;---------------------------------------------display jin du
	mov	nby,#11
	call	clrrow
	mov	nbx,#0
	mov	nby,#11
	mov	disdata,#7ch
	lcall	displaychar
	mov	jinxinjishu,#16
	mov	a,jindu
	cjne	a,#0,jdisplayjinxi
jdisplaykg:
	inc	nbx
	mov	disdata,#10h
	lcall	displaychar
	djnz	jinxinjishu,jdisplaykg
	mov	nbx,#17
	mov	disdata,#7dh
	lcall	displaychar
	jmp	dismainexit
jdisplayjinxi:
	mov	a,jinxinjishu
	subb	a,jindu
	mov	jinxinjishu,a
jdisplayjinxi_1:
	mov	disdata,#1fh
	inc	nbx
	lcall	displaychar
	djnz	jindu,jdisplayjinxi_1
jdisplayjinxi_2:
	mov	disdata,#10h
	inc	nbx
	lcall	displaychar
	djnz	jinxinjishu,jdisplayjinxi_2
	mov	nbx,#17
	mov	disdata,#7dh
	lcall	displaychar
dismainexit:
	setb	status.3
	ret
;============================================ remote  programm
exit:
	SETB EA ;		允许中断
	pop	psw
	clr	rs1
	clr	rs0
	RETI ;
int_0:
	push	psw
	CLR EA ;	暂时关闭CPU的所有中断请求
	;clr	rs1
	;setb	rs0
	MOV R6,#10
SB:
	CALL YS1;		调用882微秒延时子程序
	JB P3.2,EXIT;		延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
	DJNZ R6, SB;		重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
				;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
	JNB P3.2, $ ;		等待高电平避开9毫秒低电平引导脉冲
	MOV	R6,#4
WAIT4MS:
	CALL YS1 ;		WAIT 4MS
	JNB	P3.2,EXIT
	DJNZ	R6,WAIT4MS
	JB	P3.2,$

	;MOV R7,#16;		忽略前16位系统识别码

	;JJJJA:JNB P3.2,$;	等待地址码第一位的高电平信号
	;LCALL YS1;		高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
	;MOV C,P3.2;		将P3.2引脚此时的电平状态0或1存入C中
	;JNC UUUA;		如果为0就跳转到UUUA
	;LCALL YS3;		检测到高电平1的话延时1毫秒等待脉冲高电平结束
	;UUUA: DJNZ R7,JJJJA
	MOV R1,#23H ;		设定1AH为起始RAM区
	MOV R2,#4;		接收从1AH到1BH的2个内存,用于存放操作码和操作反码
PP:
	 MOV R3,#8;		每组数据为8位

JJJJ:
	JNB P3.2,$;	等待地址码第一位的高电平信号
	LCALL YS1;		高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
	MOV C,P3.2;		将P3.2引脚此时的电平状态0或1存入C中
	JNC UUU;		如果为0就跳转到UUU
	LCALL YS3;		检测到高电平1的话延时1毫秒等待脉冲高电平结束
UUU:
	 MOV A,@R1;		将R1中地址的给A
	RRC A;			将C中的值0或1移入A中的最低位
	MOV @R1,A;		将A中的数暂时存放在R1数值的内存中
	DJNZ R3,JJJJ;		接收满8位换一个内存
	INC R1;			对R1中的值加1,换下一个RAM
	DJNZ R2,PP ;		接收完8位数据码和8位数据反码,存放在1AH/1BH中

	MOV A,25H
	CPL A;			对1AH取反后和1BH比较
	CJNE A,26H,EXIT;	如果不等表示接收数据发生错误,放弃
;========================================操作程序
send:
	clr	status.3	; clr banduan dismian
	mov	a,25h
	cjne	a,#07h,send_1	;
	ljmp	voladd
send_1:
	cjne	a,#06h,send_2
	jmp	VOLMIUS
send_2:
	cjne	a,#0fh,send_3
	ljmp	NEXTTRACK
send_3:
	cjne	a,#03h,send_4
	jmp	PRETRACK
send_4:
	cjne	a,#0bh,send_5
	setb	status.3	; clr banduan dismian
	ljmp	PLAYPAUSE
send_5:
	cjne	a,#05h,send_6
	 call	sendpower
  	call	sendpower
   	call	sendpower
	ljmp	tvmode
send_6:
	mov	a,25h
	cjne	a,#08h,send_7
	; call	sendpower
  	;call	sendpower
   	;call	sendpower
	ljmp	miusemode
;------------------------------------
send_7:
       ;   call	sendpower
        ;  call	sendpower
        ;  call	sendpower
send_7_1:
          mov    a,25h
	jb	status.0,tvmodesend	; miuse mode;
miusesend:
	cjne	a,#01h,miusesend1
	jmp	NEXTLIST
miusesend1:
	cjne	a,#09h,miusesend2
	jmp	PRELIST
miusesend2:
	cjne	a,#00h,miusesend3
	jmp	uparrow
miusesend3:
	cjne	a,#0ah,miusesend4
	jmp	downarrow
miusesend4:
	cjne	a,#04h,miusesend5
	jmp	menu
miusesend5:
	cjne	a,#02h,miusesend6
	jmp	select
miusesend6:
	jmp	exit
;=======================
tvmodesend:
	jb	searchstaus.2,searchstaussend
	;cjne	a,#01h,tvmodesend1	; no searchstaus
	;jmp	NEXTLIST
tvmodesend1:
	;cjne	a,#09h,tvmodesend2
	;jmp	PRELIST
tvmodesend2:
	;cjne	a,#00h,tvmodesend3
	;jmp	uparrow
tvmodesend3:
	;cjne	a,#0ah,tvmodesend4
	;jmp	downarrow
tvmodesend4:
	cjne	a,#04h,tvmodesend5
	jmp	search
tvmodesend5:
	;cjne	a,#02h,tvmodesend6
	;jmp	ensure
tvmodesend6:
	jmp	exit
;------------------------------------
searchstaussend:
	jb	searchstaus.3,selectstaussend
	cjne	a,#01h,searchstaussend1
	jmp	 rightarrow
searchstaussend1:
	cjne	a,#09h,searchstaussend2
	jmp	leftarrow
searchstaussend2:
	cjne	a,#00h,searchstaussend3
	jmp	shangarrow
searchstaussend3:
	cjne	a,#0ah,searchstaussend4
	jmp	xianarrow
searchstaussend4:
	cjne	a,#04h,searchstaussend5
	jmp	search
searchstaussend5:
	cjne	a,#02h,searchstaussend6
	jmp	ensure
searchstaussend6:
	jmp	exit
;---------------------------------------------------------
selectstaussend:
	cjne	a,#01h,selectstaussend1
	jmp	searchstaussend6
selectstaussend1:
	cjne	a,#09h,selectstaussend2
	jmp	searchstaussend6
selectstaussend2:
	cjne	a,#00h,selectstaussend3
	jmp	shangselect
selectstaussend3:
	cjne	a,#0ah,selectstaussend4
	jmp	xianselect
selectstaussend4:
	cjne	a,#02h,selectstaussend5
	jmp	selecttrack
selectstaussend5:
	;cjne	a,#02h,selectstaussend6
	;jmp	ensure
selectstaussend6:
	jmp	exit
;****************************************************
;***************************************************remote lose key programm
losekey:
        clr     ea
	setb	status.1
	mov	r7,#37
       ; CALL      YS3
losekey_1:
	call	D39MS
	jnb	p3.2,losekey_2
	djnz	r7,losekey_1
losekey_1_1:		;lose key
	clr	status.1
	jmp	loseexit
losekey_2:
        CALL    YS1
	mov	losetimes,#6
losekey_2_1:
	call	YS1
	jb	p3.2,losekey_1_1; if low 9ms, is high to exit
	djnz	 losetimes,losekey_2_1
	jnb	p3.2,$	; wait low 9ms
;----------------------------------- repeat high 2ms
	;mov	losetimes,#2
losekey3:
	;call	YS1
	;jnb	p3.2,loseexit
	;djnz	losetimes,losekey3
	;clr	status.1	; lose key
loseexit:
	ret
;================================================  remote delay
YS1: MOV R4,#18 ;	延时子程序1,精确延时882微秒
D1: MOV R5,#21
DJNZ R5,$
DJNZ R4,D1
RET
;------------------------------------
YS2:
	 MOV R4,#10 ;	延时子程序2,精确延时4740微秒
D2:
	MOV R5,#217
	DJNZ R5,$
	DJNZ R4,D2
RET
;-------------------------------------------
YS3:
	MOV R4,#2;		延时程序3,精确延时1000微秒
D3:
	MOV R5,#228
DJNZ R5,$
DJNZ R4,D3
RET
;--------------------------------------
D39MS:
	MOV R4,#6;		延时程序3,精确延时1000微秒
D39:
	MOV R5,#228
        DJNZ R5,$
DJNZ R4,D39
RET
;*******************************************************remote lose key programm end
;*******************************************************select status
selecttrack:
	call	losekey
	jb	status.1,selecttrack; no losekey go on
	mov	r0,searchcount
	mov	a,@r0
	mov	senddata,a
	mov	dptr,#exttab26
	call	writebd
	call	delay20ms
	call	displaymain
	mov    searchstaus,#0
	jmp	exit
;-------------------------------------------------
xianselect:
	call	losekey
	jb	status.1,xianselect; no losekey go on
xianselect_1:
	mov	disdata,#10h
	lcall	displaychar
	mov	a,nby
	cjne	a,searchtime,xianselect_1_1
	mov	nby,#0
	mov	searchcount,#4ch
	jmp	xianselectend
xianselect_1_1:
	INC	searchcount
	inc	nby
xianselectend:
	mov	disdata,#3bh
	call	displaychar
	jmp	exit
;------------------------------------------------
shangselect:
	call	losekey
	jb	status.1,shangselect; no losekey go on
shangselect_1:
	mov	disdata,#10h
	lcall	displaychar
	mov	a,nby
	cjne	a,#0,shangselect_1_1
	mov	nby,searchtime
	mov	a,searchtime
	add	a,searchcount
	mov	searchcount,a
	jmp	shangselectend
shangselect_1_1:
	dec	searchcount
	dec	nby
shangselectend:
	mov	disdata,#3bh
	call	displaychar
	jmp	exit
;****************************************************seacrh status
leftarrow:
	call	losekey
	jb	status.1,leftarrow; no losekey go on
leftarrowend:
	mov	nby,udcurson
	mov	nbx,lrcurson
	mov	disdata,#10h
	call	displaychar
	mov	a,lrcurson
	cjne	a,#4,leftarrowend_1
	mov	lrcurson,#12
	JMP	leftarrowend_2
leftarrowend_1:
	dec	lrcurson
leftarrowend_2:
	mov	nby,udcurson
	mov	nbx,lrcurson
	mov	disdata,#3dh
	call	displaychar
	jmp	exit
;------------------------------------------------------
rightarrow:
	call	losekey
	jb	status.1,rightarrow; no losekey go on

rightarrowend:
	mov	nby,udcurson
	mov	nbx,lrcurson
	mov	disdata,#10h
	call	displaychar
	mov	a,lrcurson
	cjne	a,#12,rightarrowend_1
	mov	lrcurson,#4
	JMP	rightarrowend_2
rightarrowend_1:
	INC	lrcurson
rightarrowend_2:
	mov	nby,udcurson
	mov	nbx,lrcurson
	mov	disdata,#3dh
	call	displaychar
	jmp	exit
;---------------------------------------------------
shangarrow:
	call	losekey
	jb	status.1,shangarrow; no losekey go on
shangarrowend:
	mov	nby,udcurson
	mov	nbx,lrcurson
	mov	disdata,#10h
	call	displaychar
	mov	a,udcurson
	cjne	a,#4,shangarrowend_1
	mov	udcurson,#10
	JMP	shangarrowend_2
shangarrowend_1:
	dec	udcurson
	dec	udcurson
shangarrowend_2:
	mov	nby,udcurson
	mov	nbx,lrcurson
	mov	disdata,#3dh
	call	displaychar
	jmp	exit
;----------------------------------
xianarrow:
	call	losekey
	jb	status.1,xianarrow; no losekey go on
xianarrowend:
	mov	nby,udcurson
	mov	nbx,lrcurson
	mov	disdata,#10h
	call	displaychar
	mov	a,udcurson
	cjne	a,#10,xianarrowend_1
	MOV	udcurson,#4
	JMP	xianarrowend_2
xianarrowend_1:
	INC	udcurson
	INC	udcurson
xianarrowend_2:
	mov	nby,udcurson
	mov	nbx,lrcurson
	mov	disdata,#3dh
	call	displaychar
	jmp	exit
;===========================================
	; function
	;1 .in search modle setb searchstatus.2
	;2. no search status exit search modle
search:
	call	losekey
	jb	status.1,search; no losekey go on
;---------------------------------------------------------
	jnb	searchstaus.5,search_1
exitsearch:		;------------------no search dao exit search status
	clr	searchstaus.2
	call	displaymain
	mov	searchstaus,#0
	jmp	exit
;================================
search_1:
	setb	searchstaus.2
	call	clrscreen
	mov	nby,#0
	mov	nbx,#6
	mov	disdata,#23h	;S
	LCALL   displaychar
	;mov	nby,#0
	mov	nbx,#7
	mov	disdata,#55h	;e
	LCALL   displaychar
	;mov	nby,#1
	mov	nbx,#8
	mov	disdata,#51h	;a
	LCALL   displaychar
	;mov	nby,#1
	mov	nbx,#9
	mov	disdata,#62h	;r
	LCALL   displaychar
	;mov	nby,#1
	mov	nbx,#10
	mov	disdata,#53h	;c
	LCALL   displaychar
	;mov	nby,#1
	mov	nbx,#11
	mov	disdata,#58h	;h
	LCALL   displaychar
;---------------------------------------display 0-10 a-z
	mov	count,#0
	mov	dptr,#searchtab
	mov	nby,#3
	mov	nbx,#3
seardisloop:
	mov	a,count
	movc	a,@a+dptr
	cjne	a,#88h,nextline
	jmp	displayend
nextline:
	cjne	a,#99h,huanling
	inc	nby
	inc	nby
	mov	nbx,#3
	inc	count
	jmp	seardisloop
huanling:
	inc	nbx
	mov	disdata,a
	call	displaychar
	inc	count
	jmp	seardisloop
displayend:
	mov	nby,#4
	mov	nbx,#4
	mov	disdata,#3dh
	call	displaychar
	mov	lrcurson,#4
	mov	udcurson,#4
	jmp	exit
;================================================
ensure:
	call	losekey
	jb	status.1,ensure; no losekey go on
	mov	searchtime,#0
	mov	searchcode,#4bh	; ji lu search code  chu zhi
        inc      searchcode
	setb	searchstaus.4	; enter search select status
	mov	flashtime,#3
ensureend:			; flash 3 time start
	mov	nby,udcurson
	mov	nbx,lrcurson
	mov	disdata,#10h
	call	displaychar
	call	delay100ms
;----------------------------------
	mov	nby,udcurson
	mov	nbx,lrcurson
	mov	disdata,#3dh
	call	displaychar
	call	delay100ms
;----------------------------------
	djnz	flashtime,ensureend
;----------------------------------------------
search_2:				;  计算相配的数据
	call	clrscreen
	mov	a,udcurson		; 0-9
	cjne	a,#4,search_2_1
	mov	dptr,#searchtab
	JMP	search_2_4
search_2_1:
	cjne	a,#6,search_2_2		; a-j
	mov	dptr,#searchtab1
	JMP	search_2_4
search_2_2:
	cjne	a,#8,search_2_3		;h-q
	mov	dptr,#searchtab2
	JMP	search_2_4
search_2_3:
	mov	dptr,#searchtab3	;r-z
search_2_4:
	DEC	lrcurson	; dec ini data
	DEC	lrcurson	;
	DEC	lrcurson         ;
	DEC	lrcurson	;
	mov	a,lrcurson
	movc	a,@a+dptr
	add	a,#30h
	mov	titlechar,a
	ADD	A,#20H
	MOV	titlechar1,a
	mov	nby,#0
titlesearch:
	call	delay40ms
	mov	dptr,#exttab25       ; get numplaying tyracks
	mov	duizao,#36h
	call	readwriteipod
        mov     r0,#89h
        mov     a,@r0
	mov	searchcount,a	;numplaying tyracks
	mov	searchsx,#0ffh
titleseachloop:
	call	delay80ms
	inc	searchsx
	mov	senddata,searchsx
	mov	dptr,#exttab17	;
	mov	duizao,#21h
	call	readwritebd
;---------------------------------------------------------------
        mov     r0,#86h
        mov	a,@r0
        cjne	a,titlechar1,titleseachloop_1
        jmp	titleseachloop_2
titleseachloop_1:
	cjne	a,titlechar,titlesearch_1	; no xiang den
titleseachloop_2:
	inc	searchtime
	SETB	searchstaus.0
	setb	searchstaus.3	; in selece module
	mov	r0,searchcode	; 找到
	mov	@r0,searchsx        ;?记录找到的 索引值
	inc	searchcode		; ji lu xia yi time
	call	disoktitlename
	djnz	searchcount,contineseach
	inc	searchsx
	mov	senddata,searchsx
	mov	dptr,#exttab17
	mov	duizao,#21h	;
	call	readwritebd
	mov	r0,#86h
	mov	a,@r0
	cjne	a,titlechar1,titleseachloop_3
	jmp	titleseachloop_4
titleseachloop_3:
	cjne	a,titlechar,searchend
titleseachloop_4:
	inc	searchtime
	SETB	searchstaus.0
	setb	searchstaus.3		; 找到 in selece module
	mov	r0,searchcode
	mov	@r0,searchsx			;?记录找到的 索引值
	;inc	searchcode			; end time bu jilu
	call	disoktitlename
	jmp	searchend
;----------------------------------------------
contineseach:
	inc	nby
	jmp	titleseachloop
titlesearch_1:
	djnz	searchcount,titleseachloop
	mov	senddata,searchsx
	mov	dptr,#exttab17
	mov	duizao,#21h	;
	call	readwritebd
	mov	r0,#86h
	mov	a,@r0
	cjne	a,titlechar1,titleseachloop_5
	jmp	titleseachloop_6
titleseachloop_5:
	cjne	a,titlechar,searchend
titleseachloop_6:
	SETB	searchstaus.0
	setb	searchstaus.3		; 找到 in selece module
	mov	r0,searchcode
	mov	@r0,searchsx		; 记录找到的 索引值
	;inc	searchcode
	inc	searchtime
	call	disoktitlename
	;jmp	searchend
;-------------------------------------------
searchend:
	JB	searchstaus.0,DISNOSEARCHend
;--------------------------------------------   DISPLAY "NO SEARCH "
	cpl	searchstaus.5
	mov	count,#0
	mov	dptr,#NOSEAVHTAB
	mov	nby,#5
	mov	nbx,#1
DISNOSEARCH:

⌨️ 快捷键说明

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