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

📄 avrd04debug.asm.bak

📁 upd 6464a 取得程序 51 汇编指令
💻 BAK
字号:

.include  "m16def.inc"
; ***** PORTD ************************
; PORTD - Port D Data Register
.equ	RX		= 0	; Port D Data Register bit 0
.equ	TX		= 1	; Port D Data Register bit 0
.equ	REM		= 2	; Port D Data Register bit 0
.equ	VOLADDKEY	= 3	; Port D Data Register bit 0
;.equ	VOLMIUSKEY	= 4	; Port D Data Register bit 0
.equ	upd_io		= 4	; Port D Data Register bit 0
.equ	upd_ncs		= 5	; Port D Data Register bit 0
.equ	upd_clk		= 6	; Port D Data Register bit 0
;-------------------------------------------------------------
.equ	nby				=0x60
.equ	nbx				=0x61
.equ	disdata			=0x62
.equ	clscerancount		=0x63
.equ	clscerancount1		=0x64  
.equ	inexmodule		=0X65
.equ	customercodeh		=0X66
.equ	customercodel		=0X67
.equ	keycodeh		=0X68
.equ	keycodel		=0X69
.equ	status			=0X69

;-------------------------------------------------------
;R20,R21,R22,R23,R24,R25 为专用寄存器 r16 ,R17,R18是 公共 寄存器 R16 IS 中转寄存器
;r5,r6,r7 IS DELAY 寄存器
;**********************************************************
     .org		0x0000

 	jmp		resert
 ; .org		0x0002
 ; 	JMP	int_0	
	.org	0x0100
resert:
	ldi	r16,0x04
	out	sph,r16
	ldi	r16,0x00
	out	spl,r16
;	SEI
	cbi	ddrd,rem
	sbi	portd,rem
;----------------------
;	ldi		r16,0xff
;	out		ddra,r16
;loop:
;	out		porta,r16
;	call	delay100ms
;	ldi		r16,0x00
;	out			porta,r16
;	call	delay100ms
;	ldi		r16,0xff
;	jmp	loop
;;-------------------   
;        call	cpuini
;        ldi	r16,0b01000101
;        sts	inexmodule,r16
;	call	ini6464  
;	ldi	r16,0x0  
	sbi	ddra,0
loopp: 
;	
;	sts	disdata,r16	
;	call	clrscreen 
;	call	delay100ms
;	lds	r16,disdata
;	inc	r16
;	sts	disdata,r16
;	jmp	loopp

	;sbic	pind,rem
	;jmp		loopp
	;jmp		int_0
	
;******************************************************remote program
exit:
;
;	RETI ;
	jmp	 loopp
int_0:
	LDI	R19,10
SB:
	CALL DELAY800US	;		调用882微秒延时子程序
	sbic	pind,rem 
	jmp	exit	;	延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
	dec	 R19	;	重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
	brne	SB			;以上完成对遥控信号的9000微秒的初始低电平信号的识别。
SB_1:
	sbis	pind,rem	;		等待高电平避开9毫秒低电平引导脉冲
	jmp	SB_1
	LDI	R19,14
WAIT4MS:
	CALL DELAY800US	;		调用882微秒延时子程序
	sbis	pind,rem
	jmp	exit
	dec	r19
	brne	WAIT4MS
WAIT4MS_1:
	sbic	pind,rem
	jmp	WAIT4MS_1
	ldi	r26,0x66
	ldi	r27,0x00
	ldi	r18,0x4	;	接收从1AH到1BH的2个内存,用于存放操作码和操作反码
PP:
	 ldi	r19,0x8	;	每组数据为8位

JJJJ:
	sbic	pind,rem	;	等待地址码第一位的高电平信号
	jmp	JJJJ
	CALL 	delay800us	;	高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
	sbis	pind,rem
	jmp	UUU
	CALL   Rdelay1ms	;	检测到高电平1的话延时1毫秒等待脉冲高电平结束
	sec	
	jmp	UUU_1
UUU:
	clc
UUU_1:
	ld	r1,x
	Ror	 r1;			将C中的值0或1移入A中的最低位
	st	x,r1
	dec	r19
	brne	JJJJ
	INC 	r26	;	对R1中的值加1,换下一个RAM
	brne	PP
	lds	r16,customercodeh
	cpi	r16,0x00
	brne	exit
	lds	r16,customercodel
	cpi	r16,0xff
	brne	exit
	lds	r16,keycodeh
	com	r16
	lds	r17,keycodel
	cp	r16,r17
	breq	send		;	对1AH取反后和1BH比较
	jmp	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
;----------------------------------------------
Rdelay1ms:
	 ldi 	r16,10
	 MOV	R6,R16
	 jmp	delay100US
delay800us:
         ldi 	r16,8
          MOV	R6,R16
delay100US:
	ldi	r16,255
	mov	r7,r16
delay100US_1:
	dec	r7
	brne	delay100US_1
	dec	R6
	brne	delay100US
	ret
;********************************************************** upd6464 program

;*****************************************************************
clrscreen:	;	clear screen
	;ldi	r16,0x18
	;sts	disdata,r16
	ldi	r16,0x0
	sts	nby,r16
	ldi	r16,12
	sts	clscerancount,r16
clrscreen_2:
	ldi	r16,24
	sts	clscerancount1,r16
	ldi	r16,0x0
	sts	nbx,r16
clrscreen_1:
	call	displaychar
	lds	r16,nbx
	inc	r16
	sts	nbx,r16
	lds	r16,clscerancount1
	dec	r16
	sts	clscerancount1,r16
	brne	clrscreen_1
	lds	r16,nby
	inc	r16
	sts	nby,r16
	lds	r16,clscerancount
	dec	r16
	sts	clscerancount,r16
	brne	clrscreen_2
	ret
;**************************************************************r1,r18 
displaychar:
	LDS	R16,nby
        ROR	R16   
        ROR	R16
        ROR	R16
        ANDI    R16, 0X01
        ORI     R16,0X88
        MOV     R17,R16
        LDS	R16,nby
        swap	R16
        rOL	R16
        ANDI	R16,0Xe0 
        LDS	R2,nbx
        or	R16,R2
        mov	R18,R16          
        call	writ16byt
        LDI	R17,0Xc0
        LDS	R18,disdata
        call	writ16byt            
        RET

;*****************************************************************r16 r17
writ8byt:	
	cbi	PORTD,upd_ncs
	ldi	r16, 0x08
ibit1:
	rol	r17
	brcs	ibit1_1
	cbi	PORTD,upd_io
	jmp	ibit1_2
ibit1_1:
         sbi	PORTD,upd_io
ibit1_2:
	nop
	cbi	PORTD,upd_clk
	nop
	sbi	PORTD,upd_clk
	nop
	dec	r16
	brne	ibit1
	nop
	cbi	PORTD,upd_clk
	nop
	nop
	sbi	PORTD,upd_ncs
	ret
;**********************************************************r16, r17,r18
writ16byt:
	cBI	PORTD,upd_ncs
	ldi	r16, 8
ibit2:  
	rol	r17
	brcs	ibit2_1 
	cbi	PORTD,upd_io	
	jmp	ibit2_2
ibit2_1:  
	sbi	PORTD,upd_io
ibit2_2:
	nop
	nop
	nop	
	cbi	PORTD,upd_clk
	nop	 
	nop
	nop
	sbi	PORTD,upd_clk
	nop  
	nop
	dec	r16     
	brne	ibit2
	nop
	nop
	nop
	nop
	nop
	nop
	sbi	PORTD,upd_clk
	ldi	r16, 8  
ibit3:  
	rol	r18
	brcs	ibit3_1 
	cbi	PORTD,upd_io  
	jmp	ibit3_2
ibit3_1:
	sbi	PORTD,upd_io
ibit3_2:
	NOP
	NOP
	nop
	CBI	PORTD,upd_clk
	nop 
	NOP
	NOP
	sBI	PORTD,upd_clk
	nop
	DEC	R16
	BRNE	ibit3
	SBI	PORTD,upd_clk
	nop
	SBI	PORTD,upd_ncs
	ret
;-------------------------------------------------------------------------------------------	
ini6464:
	cBI	PORTD,upd_ncs	;=0;
	call	Delay10ms;                         //程序开始时,要输入CS四次去清除上电复位,然后所作的设置才是有效的。
	SBI	PORTD,upd_ncs
	cBI	PORTD,upd_ncs	;=0;
	call	Delay10ms;
	SBI	PORTD,upd_ncs
	cBI	PORTD,upd_ncs	;=0;
	call	Delay10ms;
	SBI	PORTD,upd_ncs
	cBI	PORTD,upd_ncs;=0;
	call	Delay10ms;
	SBI	PORTD,upd_ncs
	cBI	PORTD,upd_ncs	;=0;
	call	Delay10ms;
	SBI	PORTD,upd_ncs
	LDI 	R17, 0X00	; video ram batch
	call 	writ8byt
	LDI 	R17, 0B00011100	;display control (D0 1,display on ;lc 1 LC oscillation on ;bl1,bl0 0,0 blinking off)
	call 	writ8byt
	LDI 	R17,0B00100000 	;internal video signal color control (grenn)
	call 	writ8byt
	LDI 	R17, 0B00110000 	;background control
	call 	writ8byt
	LDS	R17,inexmodule
	;mov	b, #01000101b	; internal/external mode control crystal control
	call	writ8byt
	LDI 	R17, 0B01010010 ; 晶振方式选择,4fsc方式
	call 	writ8byt
	LDI 	R17, 0B01001001	; video signal method control (pal)
	call 	writ8byt

	;mov temp,#10000000b ; 起始偏移位置h, 0
	;mov temp1,#1000011b ; 起始偏移位置l, 0
	LDI 	R17,0B10000001 ; 起始偏移位置h, 0
	LDI	R18,0B0000101 ; 起始偏移位置l, 0
	call writ16byt
	LDI 	R17,0B10001000 ; 显示行列位置h,0列
	LDI	R18,0B00000000 ; 显示行列位置l,0行
	call writ16byt
	LDI 	R17,0B10010001 ; 输出电平控制h,2vpp
	LDI	R18,0B00000001 ; 输出电平控制l,75ire
	call writ16byt
	LDI 	R17,0B10011000 ; 字符尺寸控制h,最小尺寸
	LDI	R18,0B00000000 ; 字符尺寸控制l,0行
	call writ16byt
	ret
;**************************************************************** count program
;4字节除4字节商为4字节除法子程序CHU40
;被除数放在内部8H.09H.0AH.0BH 单元中,除数放在0C.0D.0E.0F单元中
;商数放在内部R4.R5.R6.R7单元中,余数放在10H.11H.12H.13H单元中.
;----------------------------------------------------

;被除数放在内部r8.r9.r10.r11 单元中,除数放在r12.r13.r14.r15单元中
;商数放在内部R4.R5.R6.R7单元中,余数放在r16.r17.r18.r19单元中.
;使用 R0,R1,R4.R5.R6.R7,r8.r9.r10.r11,r12.r13.r14.r15,r16.r17.r18.r19,R20,R21,R22,R23
;-----------------------------------------------------------------------------------
CHU40:
	ldi	r16,0x20
	mov	R0, r16
	ldi	r16, 0x00
	ldi	r17, 0x00
	ldi	r18, 0x00
	ldi	r19, 0x00
CHU47:  
	Clc	
	rol	r11
	rol	r10
	rol	r9
	rol	r8
	rol	r19
	rol	r18
	rol	r17
	rol	r16
	rol	r7
	rol	r6
	rol	r5
	rol	r4
	clc
	mov	r23,r19
	sbc	r23,r15
	MOV	R1, r23
	mov	r23,r18
	sbc	r23,r14
	MOV	r20, r23
	mov	r23,r17
	sbc	r23,r13   
	MOV	r21, r23
	mov	r23,r16
        sbc	r23,r12  
        MOV 	r22,r23
        brcs	 LOP490
          INC R7
          MOV r19,R1; 建立余数
          MOV r18,r20
          MOV r17,r21
          MOV r16,r22
LOP490:   
	dec R0
	 brne	CHU47
	 ret
;**********************************************************************
; ;(17)  标号: HB2   功能:双字节十六进制整数转换成双字节BCD码整数
;
;;入口条件:待转换的双字节十六进制整数在R16、R17中。
;;出口信息:转换后的三字节BCD码整数在r16,r17,r18,r19,r20中。
;;影响资源:PSW、A、R2~R7    堆栈需求:  2字节
;使用 R16,R17,r18,r19,r20
hextobcd:
	ser	r20
hextobcd_1:
	inc	r20
	subi	r16,low(10000)
	sbci	r17,high(10000)
	brcc	hextobcd_1
	subi	r16,low(-10000)
	sbci	r17,high(-10000)
	ser	r19
hextobcd_2:
	inc	r19
	subi	r16,low(1000)
	sbci	r17,high(1000)
	brcc	hextobcd_2
	subi	r16,low(-1000)
	sbci	r17,high(-1000)	
	ser	r18
hextobcd_3:
	inc	r18
	subi	r16,low(100)
	sbci	r17,high(100)
	brcc	hextobcd_3
	subi	r16,low(-100)
	sbci	r17,high(-100)	
	ser	r17
hextobcd_4:
	inc	r17
	subi	r16,10
	brcc	hextobcd_4
	subi	r16,(-10)
	ret
;***********************************************delay program
;-----------------------------------------
delay3s:
	ldi	r16,200
delay3s_1:
	ldi	r17,150
delay3s_2:
	ldi	r18,76
delay3s_2_1:
	dec	r18
	brne	delay3s_2_1
	dec	r17
	brne	delay3s_2
	dec	r16
	brne	delay3s_1
	ret
;------------------------------
delay100ms:
	LDI	R16,100
	MOV	R5,R16
	JMP	delay1ms_1
delay80ms:
	LDI	R16,80
	MOV	R5,R16
	JMP	delay1ms_1
delay40ms:
	LDI	R16,40
	MOV	R5,R16
	JMP	delay1ms_1
delay20ms:
	LDI	R16,20
	MOV	R5,R16
	JMP	delay1ms_1
delay10ms:
	LDI	R16,10
	MOV	R5,R16
	JMP	delay1ms_1	
delay1ms:
	LDI	R16,1
	MOV	R5,R16
delay1ms_1:	
	LDI	R16,10
	MOV	R6,R16
	
delay:		;100US		
	LDI	R16,250
	MOV	R7,R16
delay_1:	
	dec	r7
	brne	delay_1
	dec	R6
	brne	delay
	DEC	R5
	BRNE	delay1ms_1
	ret
;**************************************
	NOP
	NOP
cpuini:
	sbi	ddrd, upd_io   
	sbi	ddrd, upd_ncs	
	sbi	ddrd,upd_clk	
	ret 
.EXIT

⌨️ 快捷键说明

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