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

📄 51bc.asm

📁 本程序使用于爱思51-B型高级用户板功能测试及演示,是用asm写的
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;the file is demo for SuperICES 51-B board
;本文件使用于爱思51-B型高级用户板功能测试及演示
            DAT_8279  EQU 0C000H
            COM_8279  EQU 0C001H
            PA_8255   EQU 8000H
            PB_8255   EQU 8001H
            PC_8255   EQU 8002H
            COM_8255  EQU 8003H
            STR_574   EQU 0A000H
            HI_574    EQU 0A002H
            LO_574    EQU 0A003H
            CS0832    EQU 0B000H         
            CS_LCD    EQU 0D000H   
            cs_0832   equ 0b000h

		org	0000h
		nop
		ajmp	main
		org	0030h
main:		clr	EA
            MOV SP,#60H
		clr	A
		mov	PSW,a
		mov	IE,a
		mov	R0,#7fh             ;清CPU RAM
INIT1:	mov	@R0,a
		DJNZ  R0,INIT1
init8279:	mov	dptr,#COM_8279      ;初始化8279
		movx	@dptr,a
		mov	a,#32h
		movx	@dptr,a
		acall	offled
		mov	dptr,#COM_8279
		mov	a,#80h
		movx	@dptr,a
		mov	dptr,#DAT_8279
		mov	a,#0c8h
		movx	@dptr,a
		mov	30h,#80h
		mov	31h,#40h
wait:		acall	scankey
		jnc	wait
		mov	a,r1
		jb	0e4h,commkey
keynum:	mov	a,30h	        	;have key
		mov	dptr,#COM_8279
		movx	@dptr,a
		mov	a,r1
		mov	r0,31h
		mov	@r0,a
		inc	31h
		mov	dptr,#dispcode
		movc	a,@a+dptr
		mov	dptr,#DAT_8279
		movx	@dptr,a
		inc	30h
		mov	a,30h
		cjne	a,#88h,wait
		mov	30h,#80h
		mov	31h,#40h
		sjmp	wait
commkey:	mov	dptr,#progcomm	;命令键处理
		mov	a,r1
		anl	a,#03h
		rl	a
		jmp	@a+dptr
progcomm:	ajmp	lastp	      	;last key
		ajmp	nextp	      	;next key
		ajmp	execp	      	;exec key
lastp:	setb	7fh	      	;last key
		ajmp	last1
lasta:	mov	a,dpl	      	;dptr-1==>dptr
lastb:	subb	a,#01h
		jc	lastd
lastc:	mov	dpl,a
		ajmp	last3
lastd:	dec	dph
		ajmp	lastc
nextp:	clr	7fh	      	;NEXT KEY
last1:	acall	offled
		acALL	pickdata
		mov	a,48h
		cjne	a,#55h,last2
		jb	7fh,lasta
		inc	dptr
last3:	acall	savedata
		acall	dispall
		ajmp	last4
last2:	mov	48h,#55h
		ajmp	last3
last4:	mov	30h,#84h
		mov	31h,#44h
waitwr: 	acall	scankey      	;l00d0
		jnc	waitwr
		mov	a,r1
		jnb	0e4h,waitwra
		ajmp	commkey
waitwra:	mov	a,30h	      	;have key
		mov	dptr,#COM_8279
		movx	@dptr,a
		mov	a,r1
		mov	r0,31h
		mov	@r0,a
		inc	31h
		mov	dptr,#dispcode
		movc	a,@a+dptr
		mov	dptr,#DAT_8279
		movx	@dptr,a
		inc	30h
		mov	a,30h
		cjne	a,#86h,waitwrb
		acall	pickdata
		ajmp	last4
waitwrb:	acall	pickdata
		ajmp	waitwr
execp:	acall	offled
		acall	pickdata
		push	dpl
		push	dph
		ret
delay:	mov	r6,#0ffh
delay1: 	mov	r7,#0ffh
		djnz	r7,$
		djnz	r6,delay1
		ret
keycode:	db	0c1h,0c8h,0c9h,0d0h,0d8h,0e0h,0c2h,0cah
		db	0d1h,0d9h,0dah,0c3h,0cbh,0d2h,0d3h,0dbh
comcode:	db	0e3h,0e2h,0e1h,00h		;last next exec
dispcode:	db	0ch,9fh,4ah,0bh,99h,29h,28h,8fh
		db	08h,09h,88h,38h,6ch,1ah,68h,0e8h
		db	0c8h,3ah,0ech,0ffh
offled: 	mov    a,#0dfh
		mov    dptr,#COM_8279
		movx   @dptr,a
offled1:	movx   a,@dptr
		jb 0e7h,offled1
		ret
scankey:	mov	dptr,#COM_8279    ;等待按键
		movx	a,@dptr
		anl	a,#07h
		cjne	a,#00h,havekey
		clr	c
		ret		        	;无键则循环
havekey:	mov	dptr,#DAT_8279	;有键
		movx	a,@dptr     	;读键值
		mov	b,a
		mov	r1,#00h
		mov	dptr,#keycode	;查键值表
keyloop:	clr	a
		movc	a,@a+dptr
		cjne	a,b,nokey   	;
		ajmp	foundkey    	;数字键处理
nokey:	inc	dptr
		inc	r1
		ajmp	keyloop
foundkey:	mov	a,r1
		setb	c
		ret
pickdata:	mov	r0,#41h
		acall	pickone
		mov	dph,a
		mov	r0,#43h
		acall	pickone
		mov	dpl,a
		mov	a,48h
		cjne	a,#55h,pickret
		mov	r0,#45h
		acall	pickone
		movx	@dptr,a
pickret:	ret
pickone:	mov	a,@r0
		anl	a,#0fh
		mov	r1,a
		dec	r0
		mov	a,@r0
		swap	a
		anl	a,#0f0h
		orl	a,r1
		ret
savedata:	movx	a,@dptr
savedata1:	mov	r0,#45h
		acall	saveone
		mov	a,dpl
		acall	saveone
		mov	a,dph
saveone:	mov	r1,a
		acall	savehalf
		mov	a,r1
		swap	a
savehalf:	anl	a,#0fh
		mov	@r0,a
		dec	r0
		ret
dispall:	mov	30h,#80h
		mov	31h,#40h
		mov	r7,#08h
disp1:	mov	dptr,#COM_8279
		mov	a,30h
		movx	@dptr,a
		mov	r0,31h
		mov	a,@r0
		mov	dptr,#dispcode
		movc	a,@a+dptr
		mov	dptr,#DAT_8279
		movx	@dptr,a
		inc	31h
		inc	30h
		djnz	r7,disp1
		ret
;-------------------0200H------------------------------
		ORG	0200H
disp8:	mov	sp,#60h     	;'8'字循环
		mov	dptr,#COM_8279
		clr	a
		movx	@dptr,a
		mov	a,#22h
		movx	@dptr,a
		mov	a,#0dfh
		movx	@dptr,a     	;初始化8279
disp9:	movx	a,@dptr
		jb	0e7h,disp9  	;关8279
dispa:	mov	r2,#80h
dispb:	mov	a,r2
		mov	dptr,#COM_8279
		movx	@dptr,a     	;在哪一位
		mov	a,#08h
		mov	dptr,#DAT_8279
		movx	@dptr,a     	;显示'8'
		lcall	delay	      	;延时
		mov	a,#0ffh
		mov	dptr,#DAT_8279
		movx	@dptr,a     	;消隐
		inc	r2
		cjne	r2,#88h,dispb	;不到则循环
		ajmp	dispa	      	;再从第一位开始
;-------------------0a00H--------------------------------
		org	0a00h             ;演示爱思通用串行键盘显示接口
	CS     BIT    P1.0            ;请将爱思通用串行键盘显示器插入
	CLK    BIT    P1.1
	DIO    BIT    P1.2
	KEY    BIT    P1.3
	BIT_N  EQU    3aH
	DEL    EQU    3bH
	SND_BUF   EQU  3cH
	REC_BUF   EQU  3dH
	DECI      EQU  3eH
	
keybord:;clr rs0
        ;setb rs1 
      MOV P1,#0FFH
	LCALL DEL_key
	MOV SND_BUF,#10100100B    ;7289清除指令
	LCALL  SEND_key
	SETB CS
	MOV  SND_BUF,#10111111B   ;测试LED
	LCALL  SEND_key
	SETB CS
	LCALL DEL_key
      MOV SND_BUF,#10100100B    ;7289清除指令
	LCALL  SEND_key
	SETB CS
      MOV R0,#00H
      MOV R1,#08h                 ;8-1位显示'7-0'
      MOV SND_BUF,#11001000B
DIS7_0:MOV  R7,SND_BUF
	LCALL   SEND_key
      INC R7
      MOV SND_BUF,R0
      LCALL SEND_key
	INC R0
      MOV SND_BUF,R7
      DJNZ R1,DIS7_0
	SETB CS
	LCALL DEL_key
      MOV R0,#08H
      MOV R1,#08h                 ;8-1位显示'F-8'
      MOV SND_BUF,#11001000B
DISF_8:MOV  R7,SND_BUF
	LCALL   SEND_key
      INC R7
      MOV SND_BUF,R0
      LCALL SEND_key
	INC R0
      MOV SND_BUF,R7
      DJNZ R1,DISF_8
	SETB CS
	LCALL DEL_key
	MOV SND_BUF,#10100100B    ;清屏指令
	LCALL  SEND_key
	SETB CS
	MOV SND_BUF,#10010111B    ;D8显示‘P’
	LCALL  SEND_key
	MOV  SND_BUF,#01100111B   ;'P'
	LCALL  SEND_key
	SETB   CS
	MOV SND_BUF,#10001000B    ;‘P’闪烁
	LCALL  SEND_key
	MOV  SND_BUF,#01111111B    
	LCALL  SEND_key
	SETB   CS

K_DEMO:JB KEY,$                 ;键盘演示,读键
	MOV  SND_BUF,#00010101B   ;读键值
	LCALL SEND_key
	LCALL RECIV
	SETB CS
	MOV SND_BUF,#10010000B    ;D1显示‘H.’
	LCALL  SEND_key
	MOV  SND_BUF,#10110111B   ;'H.'
	LCALL  SEND_key
	SETB   CS
	MOV SND_BUF,#11001001B    ;D2显示键值低半位
	LCALL  SEND_key
	MOV SND_BUF,REC_BUF
	LCALL SEND_key
	SETB CS
	MOV SND_BUF,#11001010B    ;D3显示键值高半位
	LCALL  SEND_key
	MOV  A,REC_BUF
	ANL A,#0F0H
	SWAP A
	MOV SND_BUF,A
	LCALL SEND_key
	SETB CS
	JNB KEY,$
      AJMP K_DEMO
SEND_key: MOV  BIT_N,#8
	CLR CS
	LCALL   DEL50
S_LP:	MOV A,SND_BUF
	RLC  A
	MOV  SND_BUF,A
	MOV DIO,C
	NOP
	NOP
	SETB CLK
	LCALL   DEL10
	CLR  CLK
	LCALL  DEL10
	DJNZ   BIT_N,S_LP	
	CLR   DIO
	RET

RECIV:MOV  BIT_N,#8
	SETB  DIO
R_LP:	SETB CLK
	LCALL DEL10
	MOV C,DIO
	MOV A,REC_BUF
	RLC  A
	MOV  REC_BUF,A
	CLR  CLK
	LCALL DEL10
	DJNZ   BIT_N,R_LP
	CLR DIO
	RET
DEL50:MOV DEL,#50
	DJNZ DEL,$
	RET
DEL10:MOV DEL,#10
	DJNZ DEL,$
	RET
	

DEL_key:MOV 7AH,#10
DEL1S:MOV 7BH,#0FFH
 D1S1:MOV 7CH,#0FFH
      DJNZ 7CH,$
      DJNZ 7BH,D1S1
	DJNZ 7AH,DEL1S
	RET

;---------------c00h-----------------------------
		org	0c00h

test8255:     acall ho1o          ;调用一级库打印

⌨️ 快捷键说明

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