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

📄 cs1821_20060106_ok.asm

📁 本人写的CS1821测试DEMO程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*******************************************************************
;-------------------------------------------------------------------
;-----CS1821_TEST.ASM-----------------------------------------------
;-----AUTHOR:TAOXY@20060104-----------------------------------------
;-----MCU:AT89C2051@12MHz-------------------------------------------
;-------------------------------------------------------------------
;*******************************************************************

;*******************************************************************
;-----------------------相关管脚的位定义----------------------------
	
	;CS1821_RD	EQU	P2.4
	;CS1821_CS	EQU	P2.5
	;CS1821_WR	EQU	P2.6	
	;CS1821_DATA	EQU	P2.7
	
	;CS1821_CS	EQU	P1.7
	;CS1821_RD	EQU	P1.6
	;CS1821_WR	EQU	P1.5
	;CS1821_DATA	EQU	P1.4
	
	CS1821_CS	EQU	P3.1
	CS1821_RD	EQU	P3.7
	CS1821_WR	EQU	P3.0
	CS1821_DATA	EQU	P1.7

	COUNT		EQU	30H	;COUNTER FOR LOOP
	READ_TEMP	EQU	31H
	
	TEMP_1		EQU	32H	;TEMP REGISTER RAM
	TEMP_2		EQU	33H
	TEMP_3		EQU	34H
	TEMP_4		EQU	35H
	
	ERROR_FLAG	EQU	36H

	MRD		EQU	40H	;读取数据缓冲区首地址
	MTD		EQU	50H
	
	STACK		EQU	60H	
		
;**************************************************************************
;***************************************************************************
;----------------------------HT1621命令字定义-------------------------------
	ID_COMMAND	EQU	80H
	ID_DATA		EQU	0A0H
	ID_READ		EQU	0C0H	;110 00000  读RAM ID
	X		EQU	00H	
	RAM_ADD		EQU	00H	
;----------------------------HT1621 COMMAND--------------------------------
	SYS_DIS		EQU	00H	
	SYS_EN		EQU	01H     
	
	LCD_OFF		EQU	02H	
	LCD_ON		EQU	03H     
	
	TIMER_DIS	EQU	04H	
	TIMER_EN	EQU	06H     
	
	WDT_DIS		EQU	05H	
	WDT_EN		EQU	07H     
	
	TONE_OFF	EQU	08H	
	TONE_ON		EQU	09H    	
	
	XTAL_32K	EQU	14H	
	RC_256K		EQU	18H     
	EXT_256K	EQU	1CH	
	
	BIAS_2		EQU	28H	
	BIAS_3		EQU	29H     
	
	TONE_4K		EQU	40H	
	TONE_2K		EQU	60H     

	IRQ_DIS		EQU	80H  	
	IRQ_EN		EQU	88H     
	
	F1		EQU	0A0H	
	F2		EQU	0A1H	
	F4		EQU	0A2H	
	F8		EQU	0A3H	
	F16		EQU	0A4H	
	F32		EQU	0A5H	
	F64		EQU	0A6H	
	F128		EQU	0A7H	
	
	TOPT		EQU	0E0H	
	TNORMAL		EQU	0E3H	
	
;***************************************************************************
;---------------------------------------------------------------------------
	ORG	0000H
	AJMP	MAIN
;----------------------------------------------------------------------------
	ORG	0030H
MAIN:
	MOV	R7,#00H			
	DJNZ	R7,$
		
	MOV	SP,#STACK		
	
	MOV	R0,#20H			
	CLR	A
CLR_RAM:
	MOV	@R0,A
	INC	R0
	CJNE	R0,#80H,CLR_RAM

	MOV	A,#0FFH			
	;MOV	P0,A
	MOV	P1,A
	;MOV	P2,A
	MOV	P3,A
	
	MOV	ERROR_FLAG,#00H
;****************************************************************************
;----------------------------------------------------------------------------
MAIN_LOOP:	
	NOP
	NOP
	LCALL	CS1821_INIT
	
	LCALL	CS1821_DIS_1		;DISPLAY 'CS1821 ----- -----'
	LCALL	DELAY_400MS		;DELAY ABOUT 800MS		
	LCALL	DELAY_400MS
	LCALL	DELAY_400MS
		
	LCALL	CS1821_DIS_2		;显示A,B,C,D,E,F,G,H共8个笔画		
	;LCALL	DELAY_20MS				
		
	LCALL	CS1821_DIS_3		;显示10次9~0共10个数字	
	LCALL	DELAY_400MS			
	LCALL	DELAY_400MS
	LCALL	DELAY_400MS
	;LCALL	DELAY_400MS
	;LCALL	CS1821_DIS_4		;显示16次F~0共16个字符
	;LCALL	DELAY_20MS
	
	LCALL	CS1821_DIS_5		;显示F~0共16个字符
	LCALL	DELAY_400MS
	LCALL	DELAY_400MS
	LCALL	DELAY_400MS
	;LCALL	DELAY_400MS
	
	LCALL	DIS_RAM_READ		;READ RAM SUB
	LCALL	LOOK_UP_TAB5
	LCALL	DATA_COMPARE
	
	MOV	A,ERROR_FLAG
	JB	ACC.7,MAIN_EXIT_1
	LCALL	READ_MODIFY_WRITE	;READ_MODIFY_WRITE
	LJMP	MAIN_EXIT_2
MAIN_EXIT_1:
	LCALL	DIS_ERROR
	LJMP	MAIN_EXIT_3
MAIN_EXIT_2:
	;LCALL	CS1821_DIS
	LCALL	DELAY_400MS
	LCALL	DELAY_400MS
	LCALL	DELAY_400MS
	;LCALL	DELAY_400MS
MAIN_EXIT:
	SJMP	$
	;SJMP	MAIN_LOOP
main_exit_3:
	sjmp	$
	NOP
	NOP
;--------------------------------------------------------------------------
;***************************************************************************
CS1821_INIT:
	SETB	CS1821_CS
    	SETB	CS1821_WR 
    	LCALL	DELAY
    	CLR	CS1821_CS		;CS EN
        
	MOV	R1,#ID_COMMAND		
	LCALL	ID_WR			
	
	MOV	R2,#SYS_EN		
	MOV	R3,#X			
	LCALL	COMMAND_WR		
	LCALL	X_WR			
	
	MOV	R2,#LCD_ON		
	MOV	R3,#X
	LCALL	COMMAND_WR
	LCALL	X_WR
	
	MOV	R2,#TIMER_EN		;允许时间基准输出
	MOV	R3,#X
	LCALL	COMMAND_WR
	LCALL	X_WR
	
	MOV	R2,#BIAS_3		;LCD 1/3 BIAS 1/4 DUTY
	MOV	R3,#X
	LCALL	COMMAND_WR
	LCALL	X_WR
	
	MOV	R2,#RC_256K		;系统时钟为片内RC振荡器256K
	MOV	R3,#X
	LCALL	COMMAND_WR
	LCALL	X_WR

	;MOV	R2,#XTAL_32K		;系统时钟为晶体振荡器32.768K
	;MOV	R3,#X
	;LCALL	COMMAND_WR
	;LCALL	X_WR

	MOV	R2,#IRQ_DIS		;禁止IRQ输出
	MOV	R3,#X
	LCALL	COMMAND_WR
	LCALL	X_WR
	
	MOV	R2,#TONE_ON		;开启蜂鸣输出
	MOV	R3,#X
	LCALL	COMMAND_WR
	LCALL	X_WR
		
	;MOV	R2,#TONE_4K		;蜂鸣频率:4KHz
	MOV	R2,#TONE_2K
	MOV	R3,#X
	LCALL	COMMAND_WR
	LCALL	X_WR

	LCALL	DELAY_20MS		;蜂鸣时间160MS
	LCALL	DELAY_20MS
	LCALL	DELAY_20MS
	LCALL	DELAY_20MS
	LCALL	DELAY_20MS
	LCALL	DELAY_20MS
	LCALL	DELAY_20MS
	LCALL	DELAY_20MS
					
	;MOV	R2,#TONE_OFF		;禁止蜂鸣输出
	;MOV	R3,#X
	;LCALL	COMMAND_WR
	;LCALL	X_WR

	MOV	R2,#IRQ_EN		;允许IRQ输出
	MOV	R3,#X
	LCALL	COMMAND_WR
	LCALL	X_WR
	
	SETB	CS1821_CS
	NOP
	NOP
	NOP
	NOP
	RET

;---------------------------------------------------------------------------
;***************************************************************************
CS1821_DIS_1:
	SETB	CS1821_CS
	LCALL	DELAY
	CLR	CS1821_CS		;CS EN		
	
	MOV	R1,#ID_DATA		
	LCALL	ID_WR
	
	MOV	R5,#06H			
	MOV	R2,#RAM_ADD		
	LCALL	COMMAND_WR_1
;---------------------------------------------------------------------------				
	MOV	COUNT,#10H		;共显示"CS1821 2006- 01-05"十六个字符
	MOV	R7,#00H
CS1821_DIS_1_1:
	LCALL	DIS_DATA_WR_1		
	nop
	INC	R7			
	DJNZ	COUNT,CS1821_DIS_1_1	
	NOP
	NOP
	RET
	
;---------------------------------------------------------------------------
;****************************************************************************
CS1821_DIS_2:				;显示A,B,C,D,E,F,G,H共8个笔画
	SETB	CS1821_CS
	LCALL	DELAY
	CLR	CS1821_CS		
		
	MOV	R1,#ID_DATA		;将数据ID(101)写入CS1821
	LCALL	ID_WR
	
CS1821_DIS_2_1:	
	MOV	R5,#06H			;将显示RAM的六位地址写入CS1821
	MOV	R2,#RAM_ADD		;地址从00H开始
	LCALL	COMMAND_WR_1
;---------------------------------------------------------				
	MOV	COUNT,#0BH
	MOV	R7,#00H
CS1821_DIS_2_2:
	LCALL	DIS_DATA_WR_2
	LCALL	DELAY_400MS
	LCALL	DELAY_20MS
	LCALL	DELAY_20MS
	;LCALL	DELAY_20MS
	INC	R7
	DJNZ	COUNT,CS1821_DIS_2_2
	RET
;-----------------------------------------------------------------------------
;*****************************************************************************
CS1821_DIS_3:				;共显示9~0十个数字
	SETB	CS1821_CS
	LCALL	DELAY
	CLR	CS1821_CS		;CS EN		
	
	MOV	R1,#ID_DATA		
	LCALL	ID_WR
	
	MOV	R5,#06H			
	MOV	R2,#RAM_ADD		
	LCALL	COMMAND_WR_1
;---------------------------------------------------------------------------				
	MOV	COUNT,#10H		
	MOV	R7,#00H
CS1821_DIS_3_1:
	LCALL	DIS_DATA_WR_3		
	;LCALL	DELAY_400MS
	;LCALL	DELAY_20MS
	;LCALL	DELAY_20MS
	INC	R7			;显示下一个数据
	DJNZ	COUNT,CS1821_DIS_3_1	
	RET
;-------------------------------------------------------------------------
;**************************************************************************
CS1821_DIS_4:
	SETB	CS1821_CS
	LCALL	DELAY
	CLR	CS1821_CS		;CS EN		
	
	MOV	R1,#ID_DATA		
	LCALL	ID_WR
	
	MOV	R5,#06H			
	MOV	R2,#RAM_ADD		
	LCALL	COMMAND_WR_1
;---------------------------------------------------------------------------				
	MOV	COUNT,#11H		;
	MOV	R7,#00H
CS1821_DIS_4_1:
	LCALL	DIS_DATA_WR_4		
	LCALL	DELAY_400MS
	INC	R7			;显示下一个数据
	DJNZ	COUNT,CS1821_DIS_4_1	;
	RET
;--------------------------------------------------------------------------
;***************************************************************************
CS1821_DIS_5:
	SETB	CS1821_CS
	LCALL	DELAY
	CLR	CS1821_CS		;CS EN		
	
	MOV	R1,#ID_DATA		
	LCALL	ID_WR
	
	MOV	R5,#06H			
	MOV	R2,#RAM_ADD		
	LCALL	COMMAND_WR_1
;---------------------------------------------------------------------------				
	MOV	COUNT,#10H		;
	MOV	R7,#00H
CS1821_DIS_5_1:
	LCALL	DIS_DATA_WR_5		
	INC	R7			;显示下一个数据
	DJNZ	COUNT,CS1821_DIS_5_1	;
	RET
;--------------------------------------------------------------------------
;**************************************************************************
CS1821_DIS_CLR:
	SETB	CS1821_CS
	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	R7,#00H
	MOV	DPTR,#DIS_TAB_CLR	;20050907 ADD
	MOV	A,R7
	MOVC	A,@A+DPTR
	MOV	B,A			;另存显示数据
;---------------------------------------------------------
	MOV	R0,#10H			;共16个字节,32个显示RAM
CS1821_DIS_CLR_1:
	MOV	A,B
	ANL	A,#0F0H			;取显示数据的的高四位
	MOV	R3,A			;将高四位查表显示数据送入R3	
	LCALL	DATA_WR
		
	MOV	A,B
	ANL	A,#0FH			;取显示数据的低四位
	SWAP 	A
	MOV	R3,A			;将低四位查表显示数据送入R3
	LCALL	DATA_WR
	DJNZ	R0,CS1821_DIS_CLR_1
	RET
;---------------------------------------------------------------------------
;***************************************************************************
DIS_ERROR:
	SETB	CS1821_CS
	LCALL	DELAY
	CLR	CS1821_CS		;CS EN		
	
	MOV	R1,#ID_DATA		
	LCALL	ID_WR
	
	MOV	R5,#06H			
	MOV	R2,#RAM_ADD		
	LCALL	COMMAND_WR_1
;---------------------------------------------------------------------------				
	MOV	COUNT,#10H		
	MOV	R7,#00H
DIS_ERROR_1:
	LCALL	DIS_ERROR_WR		
	nop
	INC	R7			
	DJNZ	COUNT,DIS_ERROR_1	
	NOP
	NOP
	RET
;---------------------------------------------------------------------------
;***************************************************************************
DIS_RIGHT:
	SETB	CS1821_CS
	LCALL	DELAY
	CLR	CS1821_CS		;CS EN		
	
	MOV	R1,#ID_DATA		
	LCALL	ID_WR
	
	MOV	R5,#06H			
	MOV	R2,#RAM_ADD		
	LCALL	COMMAND_WR_1
;---------------------------------------------------------------------------				
	MOV	COUNT,#10H		
	MOV	R7,#00H
DIS_RIGHT_1:
	LCALL	DIS_RIGHT_WR		
	nop
	INC	R7			
	DJNZ	COUNT,DIS_RIGHT_1	
	NOP
	NOP
	RET	
	
;---------------------------------------------------------------------------
;****************************************************************************
;-------------------显示数据写入子程序--------------------------------------
;-----------------------------------------------------------------------------

DIS_DATA_WR_1:
	MOV	DPTR,#DIS_TAB_1		;20051130 ADD
	MOV	A,R7
	MOVC	A,@A+DPTR
	MOV	B,A			;另存显示数据
;---------------------------------------------------------------------------
	MOV	R0,#01H			;每次写入一个数据

⌨️ 快捷键说明

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