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

📄 93c46adc.asm

📁 93c46用于温控器的显示编程
💻 ASM
字号:
;0123456789012345;
;  Wang fucheng  ;
;TEL:13891968864 ;
;0123456789012345;

;+++++++++++++++++++++++++
;位定义
;显示
	RS      bit P2.5
       	R_W     BIT P2.6
       	ADD_LCD BIT P2.7			
;采样
       ADC_OE	BIT	P2.1	;1:正跳延数据输出
       ADC_EOC	BIT	P2.2	;数据输入	1:有效
       ADC_STR	BIT	P2.3	;1:正跳延数据输出

       WR_DATA	BIT	22H.2	;adc地址写入但未完成
       QUSHU	BIT	22H.1	;0:取数完成可以下一次取数,1:正在取数中
       ADC_ADD	EQU	1CH	;当前访问ADC地址
	   ADC_0ADD	EQU	0X10
      ADCJISH	EQU	1DH	;ADC读数不成功时的循环复位次数

;存储
       C46_CS	BIT	P2.4	;
       C46_SK	BIT	P0.0
       C46_DI	BIT	P0.1
       C46_DO	BIT	P0.2

		C46_FAL	BIT	21H.3	;93C46故障

                            	
;++++++++++++++++++++++++++
;寄存器定义
		DIS_RAM		EQU	30H		 ;30H~4FH
		DIS_ADD		EQU	50H		;显示地址
;_____________________________
				



		org		0h
		jmp		begin
;:::::::::::::::::::::::::::::::::::::::::::::::
		org	30h
dis_WR:		setb	R_W
			MOVX	A,@R0
			ANL		A,#80H
			JNZ		DIS_WR
			CLR		R_W
			MOV		A,B
			MOVX	@R0,A
			RET
;________________________________________________
INIT_LCD: clr add_lcd
         clr rs
         clr R_W
		 MOV	B,#38H	   ;模式;8位2行显示
		 LCALL	DIS_WR
		 mov	B,#01h	   ;清除显示
		 lcall	dis_WR
		 MOV	B,#03H		;归位
		 LCALL	DIS_WR
		 MOV	B,#06H		;自动加1
		 LCALL	DIS_WR
		 MOV	B,#0CH		;开显示,无光标,不闪烁
		 LCALL	DIS_WR
;		 MOV	B,#0C0H		;
;		 LCALL	DIS_WR
		 SETB	ADD_LCD
		 SETB	RS
		 SETB	R_W
		RET
;+++++++++++++++++++++++++++++++++++++++++++++++++++
DELAY0: MOV R6,#0aH       ;  5 ms
DELAY1: MOV R7,#0EAH      ;  0.5 ms
       DJNZ R7,$
       DJNZ R6,DELAY1
       RET

;::::::::::::::::::::::::::::::::::::::
XIANSHI:	CLR	RS
			SETB	R_W
			CLR		ADD_LCD
			MOVX	A,@R0
			ANL		A,#80H
			JNZ		XIANSHIEND
			MOV		A,DIS_ADD
			CJNE	A,#50H,XIANSHI1
			MOV		DIS_ADD,#30H
			CLR		RS
			CLR		R_W
			CLR		ADD_LCD
		 	MOV	B,#80H		;第一行
		 	LCALL	DIS_WR
			LCALL	DELAY0
XIANSHI1:	MOV		A,DIS_ADD
			cjne	a,#40h,xianshi2
		 	MOV	B,#0c0H		;第二行
		 	LCALL	DIS_WR
			LCALL	DELAY0
xianshi2:	mov		a,DIS_ADD
			mov	r1,a
			INC		A
			MOV		DIS_ADD,A
			SETB	RS
			CLR		R_W
			CLR		ADD_LCD
			mov	a,@r1
			MOVX	@R0,A
XIANSHIEND:	SETB	RS
			SETB	R_W
			SETB	ADD_LCD
			RET
;==========================================================================
;RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
;93c46操作程序,初始化C46_SK=0,C46_CS=0,C46_DI=0,C46_DO=1
;93C46读操作
C46_RD:		;地址=A,取回数据在=A
		LCALL	C46_STR
		LCALL	CMD_RD
		LCALL	C46_ADD
		nop
		nop
		nop
		MOV	R0,#80H
C46_RD2:	JNB	C46_DO,C46_RD3
		DJNZ	R0,C46_RD2
		SETB	C46_FAL
		CLR	C46_CS
		RET
C46_RD3:	MOV	R0,#08H
C46_RD1:	LCALL	RD_BIT
		RLC	A
		DJNZ	R0,C46_RD1
		CLR	C46_CS
		RET
;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
;写入数据
C46_WD:		;地址=A,数据=R1,使用R0,R1,R2
		LCALL	C46_WY
		LCALL	C46_WD0
		LCALL	C46_WN
		RET
;93C46写入的允许10011、禁止10000
C46_WY:	LCALL	C46_STR
		SETB	C
		LCALL	WD_BIT
		CLR	C
		LCALL	WD_BIT
		LCALL	WD_BIT
		SETB	C
		MOV	R0,#07H
C46_WY1:	LCALL	WD_BIT
		DJNZ	R0,C46_WY1
		CLR	C46_CS
		RET
;93C46写入的允许10011、禁止10000
C46_WN:		LCALL	C46_STR
		SETB	C
		LCALL	WD_BIT
		CLR	C
		MOV	R0,#09H
C46_WN1:	LCALL	WD_BIT
		DJNZ	R0,C46_WN1
		CLR	C46_CS
		RET
;93C46写入操作
C46_WD0:		;地址=A,数据=R1,使用R0,R1,R2
		MOV	R2,A
		LCALL	C46_STR
		LCALL	CMD_WD
		LCALL	C46_ADD
		MOV	R0,#08H
		MOV	A,R1
C46_WD1:	RLC	A
		LCALL	WD_BIT
		DJNZ	R0,C46_WD1
		CLR	C46_CS		;保持0.5
		mov	r0,#04h
		DJNZ	R0,$	
		SETB	C46_CS
		mov	r0,#04h
		DJNZ	R0,$
		MOV	R0,#80H
C46_WD2:	JNB	C46_DO,C46_WD5		;2*0.83μ需要5ms
		DJNZ	R0,C46_WD2		;2	=5ms*Fosc/(12*N)
C46_WD4:	CLR	C46_CS
		MOV	A,R2
		LCALL	C46_RD
		CLR	C
		SUBB	A,R1
		JZ	C46_WD8
C46_WD3:	SETB	C46_FAL
C46_WD8:	CLR	C46_CS
		RET
C46_WD5:	MOV	A,#10H
		mov	r0,#0E2H
C46_WD6:	JB	C46_DO,C46_WD4		;2
		DJNZ	R0,C46_WD6		;2
		djnz	ACC,c46_wd6		;2
		LJMP	C46_WD4

C46_ADD:	MOV	R0,#07H
		RLC	A
C46_ADD1:	RLC	A
		LCALL	WD_BIT
		DJNZ	R0,C46_ADD1
		RET
C46_STR:	SETB	C46_DO
		CLR	C46_SK
		SETB	C46_CS
		RET
CMD_RD:		SETB	CY
		LCALL	WD_BIT
		LCALL	WD_BIT
		CLR	CY
		LCALL	WD_BIT
		RET
CMD_WD:		SETB	C
		LCALL	WD_BIT
		CLR	C
		LCALL	WD_BIT
		SETB	C
		LCALL	WD_BIT
		RET
WD_BIT:		MOV	C46_DI,C
		SETB	C46_SK
		NOP
		NOP
		NOP
		CLR	C46_SK
		RET
RD_BIT:		SETB	C46_SK
		NOP
		NOP
		NOP
		CLR	C46_SK
		MOV	C,C46_DO
		RET
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
;模拟量取数
ADC_RW:		LCALL	ADC_WR
		LCALL	ADC_RD
		LCALL	ADC_ERR
		RET
ADC_ERR:	JNB	WR_DATA,ADC_ERR1
ADC_ERR3:	DJNZ	ADCJISH,ADC_ERR2
		CLR	QUSHU
		CLR	WR_DATA
ADC_ERR2:	RET
ADC_ERR1:	MOV	ADCJISH,#05H
		JB	QUSHU,ADC_ERR3
		RET
ADC_WR:	JB	QUSHU,ADC_WR5	   ;正在取数
		JB	WR_DATA,ADC_WR2
		MOV	A,ADC_ADD

ADC_WR1:	LCALL	ADC_WR10
ADC_WR2:	SETB	WR_DATA
		JB	ADC_EOC,ADC_WR5
		CLR	WR_DATA
		SETB	QUSHU
ADC_WR5:	RET
ADC_WR10:	MOV	P0,A
		NOP
		NOP
		NOP
		SETB	ADC_STR
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		CLR	ADC_STR
		RET
ADC_RD:		JNB	QUSHU,ADC_RD5
		JNB	ADC_EOC,ADC_RD5
		LCALL	ADC_RD10
		MOV		B,A
		MOV		A,ADC_ADD
		CLR	C
		ADD		A,#ADC_0ADD
		MOV		R1,A
		MOV	@R1,B
		MOV		A,ADC_ADD
		INC		A
		ANL		A,#07H
		MOV		ADC_ADD,A
		CLR	QUSHU
ADC_RD5:	RET
ADC_RD10:	MOV	P0,#0FFH
		SETB	ADC_OE
		NOP
		NOP
		NOP
		MOV	A,P0
		CLR	ADC_OE
		RET

;+++++++====== =++++++++++++++++++++++++++++++
begin:      LCALL 	INIT_LCD
			MOV		DIS_ADD,#30H 		;显示指针初始化
;			MOV		DPTR,#BIAOTI
			MOV		DPTR,#SHUIWEN_DIS

			MOV		R1,#30H
BEGIN1:		CLR		A					 ;显示区初始化
			MOVC	A,@A+DPTR	
			MOV		@R1,A
			INC		DPTR
			INC		R1
			CJNE	R1,#50H,BEGIN1
			MOV		R4,#0FFH
DIS_BIAOTI0:	MOV		R3,#0FFH
DIS_BIAOTI:	LCALL	XIANSHI
			DJNZ	R3,DIS_BIAOTI
			DJNZ	R4,DIS_BIAOTI0
WORK:		LCALL	XIANSHI
			LCALL	ADC_RW
			JMP		WORK

;____________________0123456789abcdef0123456789abcdef_________________
BIAOTI:			DB 	"  Wang fucheng  TEL: 13891968864"
SHUIWEN_DIS:		DB	"lengquye:  ___  kai:___ guan:___"
yeyawendu:		db	"yeya:      ___  kai:___ guan:___"
jiezhi:			db	"jiezhi:    ___  kai:___ guan:___"
END

⌨️ 快捷键说明

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