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

📄 cs1821_20060106_ok.asm

📁 本人写的CS1821测试DEMO程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
DIS_DATA_WR_1_1:
	MOV	A,B
	ANL	A,#0F0H			
	MOV	R3,A			
	LCALL	DATA_WR
	
	MOV	A,B
	ANL	A,#0FH			
	SWAP 	A
	MOV	R3,A			
	LCALL	DATA_WR
	NOP
	DJNZ	R0,DIS_DATA_WR_1_1
	RET
	
;---------------------------------------------------------------------------
;***************************************************************************
DIS_DATA_WR_2:
	MOV	DPTR,#DIS_TAB_2		;20051130 ADD
	MOV	A,R7
	MOVC	A,@A+DPTR
	MOV	B,A			;另存显示数据
;---------------------------------------------------------------------------
	MOV	R0,#10H			;每次写入一个数据
DIS_DATA_WR_2_1:
	MOV	A,B
	ANL	A,#0F0H			
	MOV	R3,A			
	LCALL	DATA_WR
	
	MOV	A,B
	ANL	A,#0FH			
	SWAP 	A
	MOV	R3,A			
	LCALL	DATA_WR
	NOP
	DJNZ	R0,DIS_DATA_WR_2_1
	RET
;--------------------------------------------------------------------------
;**************************************************************************
DIS_DATA_WR_3:
	MOV	DPTR,#DIS_TAB_3		;20051130 ADD
	MOV	A,R7
	MOVC	A,@A+DPTR
	MOV	B,A			;另存显示数据
;---------------------------------------------------------------------------
	MOV	R0,#01H			;共16个字节,32个显示RAM
DIS_DATA_WR_3_1:
	MOV	A,B
	ANL	A,#0F0H			
	MOV	R3,A			
	LCALL	DATA_WR
	
	MOV	A,B
	ANL	A,#0FH			
	SWAP 	A
	MOV	R3,A			
	LCALL	DATA_WR
	NOP
	DJNZ	R0,DIS_DATA_WR_3_1
	RET
;---------------------------------------------------------------------------
;***************************************************************************
DIS_DATA_WR_4:
	MOV	DPTR,#DIS_TAB_4		;20051130 ADD
	MOV	A,R7
	MOVC	A,@A+DPTR
	MOV	B,A			;另存显示数据
;---------------------------------------------------------------------------
	MOV	R0,#10H			;共16个字节,32个显示RAM
DIS_DATA_WR_4_1:
	MOV	A,B
	ANL	A,#0F0H			
	MOV	R3,A			
	LCALL	DATA_WR
	
	MOV	A,B
	ANL	A,#0FH			
	SWAP 	A
	MOV	R3,A			
	LCALL	DATA_WR
	NOP
	DJNZ	R0,DIS_DATA_WR_4_1
	RET
;---------------------------------------------------------------------------
DIS_DATA_WR_5:
	MOV	DPTR,#DIS_TAB_5		;20051130 ADD
	MOV	A,R7
	MOVC	A,@A+DPTR
	MOV	B,A			;另存显示数据
;---------------------------------------------------------------------------
	MOV	R0,#01H			
DIS_DATA_WR_5_1:
	MOV	A,B
	ANL	A,#0F0H			
	MOV	R3,A			
	LCALL	DATA_WR
	
	MOV	A,B
	ANL	A,#0FH			
	SWAP 	A
	MOV	R3,A			
	LCALL	DATA_WR
	NOP
	DJNZ	R0,DIS_DATA_WR_5_1
	RET	
;---------------------------------------------------------------------------
;**************************************************************************** 
DIS_ERROR_WR:
	MOV	DPTR,#ERROR_TAB		;20051130 ADD
	MOV	A,R7
	MOVC	A,@A+DPTR
	MOV	B,A			;另存显示数据
;---------------------------------------------------------------------------
	MOV	R0,#01H			
DIS_ERROR_WR_1:
	MOV	A,B
	ANL	A,#0F0H			
	MOV	R3,A			
	LCALL	DATA_WR
	
	MOV	A,B
	ANL	A,#0FH			
	SWAP 	A
	MOV	R3,A			
	LCALL	DATA_WR
	NOP
	DJNZ	R0,DIS_ERROR_WR_1
	RET
;----------------------------------------------------------------------------
;****************************************************************************
DIS_RIGHT_WR:
	MOV	DPTR,#RIGHT_TAB		;20051130 ADD
	MOV	A,R7
	MOVC	A,@A+DPTR
	MOV	B,A			;另存显示数据
;---------------------------------------------------------------------------
	MOV	R0,#01H			
DIS_RIGHT_WR_1:
	MOV	A,B
	ANL	A,#0F0H			
	MOV	R3,A			
	LCALL	DATA_WR
	
	MOV	A,B
	ANL	A,#0FH			
	SWAP 	A
	MOV	R3,A			
	LCALL	DATA_WR
	NOP
	DJNZ	R0,DIS_RIGHT_WR_1
	RET

;----------------------------------------------------------------------------
;****************************************************************************
DIS_RAM_READ:
	SETB	CS1821_CS
	SETB	CS1821_RD
	LCALL	DELAY
	CLR	CS1821_CS		
		
	MOV	R1,#ID_READ		;将读RAM ID(110)写入CS1821
	LCALL	ID_WR

	MOV	R5,#06H			;将显示RAM的六位地址写入CS1821
	MOV	R2,#RAM_ADD		;从地址00H开始
	LCALL	COMMAND_WR_1
		
	MOV	COUNT,#10H		;共读入16个字节
	MOV	R1,#MRD
DIS_RAM_READ_1:
	LCALL	DATA_READ
	MOV	A,READ_TEMP
	ANL	A,#0FH
	SWAP	A
	MOV	TEMP_1,A
	
	LCALL	DATA_READ
	MOV	A,READ_TEMP
	ANL	A,#0FH
	ORL	A,TEMP_1
	MOV	@R1,A	
	
	INC	R1			;调整存储数据指针
	DJNZ	COUNT,DIS_RAM_READ_1
	LCALL	DELAY_20MS
	RET	
;-------------------------------------------------------------
;*************************************************************
DATA_READ:
	;PUSH	ACC
	;PUSH	PSW
	;SETB	RS1
	;CLR	RS0
	;MOV	R5,#04H
	MOV	TEMP_3,#04H
	CLR	C
	MOV	R6,#00H
	MOV	A,R6
DATA_READ_1:
	CLR	CS1821_RD
	NOP
	NOP
	NOP
	SETB	CS1821_RD
	SETB	CS1821_DATA		;SET CS1821_DATA FOR INPUT
	NOP
	NOP
	MOV	C,CS1821_DATA
	RLC	A
	DJNZ	TEMP_3,DATA_READ_1
	MOV	READ_TEMP,A		;读入的四位数据存放在RAM_T
	;POP	PSW
	;POP	ACC
	RET
;---------------------------------------------------------
;*********************************************************
READ_MODIFY_WRITE:
	SETB	CS1821_CS
	SETB	CS1821_RD
	LCALL	DELAY
	CLR	CS1821_CS		
		
	MOV	R1,#ID_DATA		;将数据ID(101)写入CS1821
	LCALL	ID_WR

	MOV	R5,#06H			;将显示RAM的六位地址写入CS1821
	MOV	R2,#RAM_ADD		;每次皆从地址00H开始
	LCALL	COMMAND_WR_1

	MOV	TEMP_4,#10H
	MOV	R7,#00H
	CLR	C
READ_MODIFY_WRITE_1:
	LCALL	DATA_READ
	MOV	DPTR,#RIGHT_TAB		;20051130 ADD
	MOV	A,R7
	MOVC	A,@A+DPTR
	MOV	B,A	
	ANL	A,#0F0H			
	MOV	R3,A			
	LCALL	DATA_WR
	
	LCALL	DATA_READ
	MOV	A,B
	ANL	A,#0FH
	SWAP	A		
	MOV	R3,A			
	LCALL	DATA_WR
	INC	R7
	DJNZ	TEMP_4,READ_MODIFY_WRITE_1
	RET

;----------------------------------------------------------
;**********************************************************
LOOK_UP_TAB5:				;TAB5中的数据发送到以MTD为首地址的缓冲区
	MOV	DPTR,#DIS_TAB_5
	MOV	R0,#MTD
	MOV	R6,#00H
	MOV	R7,#10H
LOOK_UP_TAB5_1:
	MOV	A,R6
	MOVC	A,@A+DPTR
	MOV	@R0,A
	INC	R6
	INC	R0
	DJNZ	R7,LOOK_UP_TAB5_1
	RET	
;---------------------------------------------------------
;*********************************************************
DATA_COMPARE:
	MOV	R0,#MTD
	MOV	R1,#MRD
	MOV	R7,#10H
DATA_COMPARE_1:
	MOV	A,@R0
	XRL	A,@R1
	JZ	DATA_COMPARE_2
	LJMP	DATA_COMPARE_EXIT
DATA_COMPARE_2:
	INC	R0
	INC	R1
	DJNZ	R7,DATA_COMPARE_1
	LJMP	DATA_COMPARE_EXIT_1
DATA_COMPARE_EXIT:
	MOV	ERROR_FLAG,#80H
DATA_COMPARE_EXIT_1:
	RET
		
;*********************************************************
;-----------------------ID写入子程序----------------------
ID_WR:				
	MOV	R5,#03H			;共写入三位ID码(100或101)
	MOV	A,R1
ID_WR_1:
	LCALL	CLOCK_WR
	DJNZ	R5,ID_WR_1
	RET
	
;---------------------命令写入子程序-----------------------
COMMAND_WR:
	MOV	R5,#08H			;八位命令
COMMAND_WR_1:
	MOV	A,R2			
COMMAND_WR_2:
	LCALL	CLOCK_WR		
	DJNZ	R5,COMMAND_WR_2
	RET
	
;--------------------无关位写入子程序----------------------
X_WR:
	MOV	A,R3			
	LCALL	CLOCK_WR
	RET
		
;-------------------RAM DATA写入子程序--------------------
DATA_WR:
	MOV	R4,#04H			;每次写入4位串行数据
	MOV	A,R3			
DATA_WR_1:
	LCALL	CLOCK_WR
	DJNZ	R4,DATA_WR_1
	RET
;----------------------写时钟子程序------------------------       
CLOCK_WR:							
	RLC	A			
	MOV	CS1821_DATA,C
	CLR	CS1821_WR		
	NOP
	SETB	CS1821_WR  		
    	NOP
	RET
;-----------------------------------------------------------
;***********************************************************
;-----------------------延时子程序--------------------------
DELAY_1MS:    			;选用第一组工作寄存器(RS0=1,RS1=0)        
	PUSH	PSW           
	SETB	RS0           
	CLR	RS1           
	MOV	R7,#50          
DELAY_1MS_1:          
	MOV	R6,#10          
DELAY_1MS_2:	        
	DJNZ	R6,$          
	DJNZ	R7,DELAY_1MS_1
	POP	PSW             
	RET                 
;------------------------------------------------
DELAY_10MS:
	PUSH	PSW
	SETB	RS0
	CLR	RS1            
	MOV	R5,#10           
DELAY_10MS_1:          
	LCALL	DELAY_1MS      
	DJNZ	R5,DELAY_10MS_1
	POP	PSW
	RET                  
;------------------------------------------------
DELAY_20MS:
	PUSH	PSW
	SETB	RS0
	CLR	RS1	
	MOV	R5,#20
DELAY_20MS_1:
	LCALL	DELAY_1MS
	DJNZ	R5,DELAY_20MS_1
	POP	PSW
	RET
;-------------------------------------------------
DELAY:
	PUSH	PSW
	SETB	RS0
	CLR	RS1
	MOV	R6,#0FFH
WAIT_1:
	DJNZ	R6,WAIT_1
	MOV	R6,#0FFH
WAIT_2:
	DJNZ	R6,WAIT_2
	POP	PSW
	RET
;----------------------------------------------------
DELAY_400MS:
	PUSH	PSW
	SETB	RS0
	CLR	RS1
	MOV	R0,#10H
DELAY_400MS_1:
	MOV	R1,#64H
DELAY_400MS_2:
	MOV	R2,#64H
	DJNZ	R2,$			;200US
	DJNZ	R1,DELAY_400MS_2	;203*100=20300US
	DJNZ	R0,DELAY_400MS_1	;(20300+3)*20+3=406063US=406MS
	POP	PSW
	RET
;***************************************************************
;---------------------------------------------------------------
DIS_TAB_1:
	DB	60H,3EH,7FH,60H		;1,2,8,1
	;DB	5BH,1DH,5BH,7DH		;S,C,5,0
	;DB	02H,60H,7DH,02H		;-,1,0,-
	;DB	5FH,7DH,7DH,3EH		;6,0,0,2
	DB	5BH,1DH,02H,5FH		;S,C,-,6 FOR TEST
	DB	7DH,7DH,3EH,5BH		;0,0,2,5
	DB	7DH,02H,60H,7DH		;0,-,1,0
	DB	00H,00H,00H,00H		;全灭

DIS_TAB_2:
	DB	10H,20H,40H,08H		;A,B,C,D
	DB	04H,01H,02H,80H		;E,F,G,H
	DB	0FFH,0FFH,00H,00H
	
DIS_TAB_3:
	;DB	7BH,7FH,70H,5FH		;9,8,7,6
	;DB	5BH,63H,7AH,3EH		;5,4,3,2
        ;DB	60H,7DH,00H,00H		;1,0
	DB	7FH,7DH,7FH,7DH		;8,0,8,0
	DB	7FH,7DH,7DH,7FH		;8,0,0,8
	DB	7DH,7FH,7DH,7FH		;0,8,0,8
	DB	7DH,7FH,7DH,7FH

DIS_TAB_4:
	DB	7DH,60H,3EH,7AH		;0,1,2,3
	DB	63H,5BH,5FH,70H		;4,5,6,7
	DB	7FH,7BH,77H,4FH		;8,9,A,b
	DB	1DH,6EH,1FH,17H		;C,d,E,F
	DB	02H,00H,00H,00H		

DIS_TAB_5:
	;DB	17H,1FH,6EH,1DH		;F,E,D,C
	;DB	4FH,77H,7BH,7FH		;B,A,9,8
	;DB	70H,5FH,5BH,63H		;7,6,5,4
	;DB	7AH,3EH,60H,7DH		;3,2,1,0
	DB	5BH,63H,7AH,3EH		;5,4,3,2
	DB	60H,7DH,77H,7BH		;1,0,A,9
	DB	7FH,70H,5FH,17H		;8,7,6,F
	DB	1FH,6EH,1DH,4FH		;E,D,C,B
	DB	00H,00H,00H,00H
	
ERROR_TAB:				;r,o,r,r,E
	DB	06H,4EH,06H,06H
	DB	1FH,00H,00H,00H
	DB	00H,00H,00H,00H
	DB	00H,00H,00H,00H

RIGHT_TAB:				;t,h,g,i,r
	;DB	70H,47H,7BH,60H
	;DB	15H,00H,00H,00H
	DB	7FH,7FH,7FH,7FH
	DB	7FH,7FH,7FH,7FH
	DB	7FH,7FH,7FH,7FH
	DB	7FH,7FH,7FH,7FH

DIS_TAB_CLR:
	DB	00H,00H,00H,00H
	DB	00H,00H,00H,00H
	DB	00H,00H,00H,00H
	DB	00H,00H,00H,00H
;----------------------------------------------------------------
	END
;----------------------------------------------------------------

⌨️ 快捷键说明

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