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

📄 sky1.asm

📁 基于2051的数据记录仪汇编源码
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		MOV	R7, #02H
		ACALL WRITE_LED
	      JMP  	PG8
PG4:
		JMP  	PG1
PG2:
		CJNE	A, #0A0H, PG3		;编辑月份
		MOV   MAX_VL, #12
		MOV   MIN_VL, #1
		MOV	A, FUNREG
		ANL   A, #0FH
		CJNE	A, #01H, XD4
		MOV	A, MON_MD
		ACALL BCD_HEX
		ACALL DOWN_ROUTINE
		SJMP  XD5
XD4:
		MOV   A, MON_MD
		ACALL BCD_HEX
		ACALL UP_ROUTINE
XD5:
		ACALL HEX_BCD
		MOV	MON_MD, A
		MOV   LED_D2, R3
		MOV   LED_D3, R4
      	MOV   A, R3
		MOV	R7, #03H
		ACALL WRITE_LED
	      MOV   A, LED_D3
		MOV	R7, #04H
		ACALL WRITE_LED
	      SJMP  PG7
PG3:
		CJNE	A, #0C0H, PG7		;编辑年份	
	      MOV   MAX_VL, #63H
		MOV   MIN_VL, #00H
		MOV	A, FUNREG
		ANL	A, #0FH
		CJNE  A, #01H, XD6
		MOV	A, YEA_MD
		ACALL BCD_HEX
		ACALL DOWN_ROUTINE
		SJMP  XD7
XD6:
		MOV	A, YEA_MD
		ACALL BCD_HEX
		ACALL UP_ROUTINE
XD7:
		ACALL HEX_BCD
		MOV   YEA_MD, A
		MOV   LED_D4, R3
		MOV   LED_D5, R4
      	MOV   A, R3
		MOV 	R7, #05H
		ACALL WRITE_LED
	      MOV   A, LED_D5
		MOV	R7, #06H
		ACALL WRITE_LED
PG7:	
		JMP	PG8
PG1:  
		CJNE  A, #10H, PG1		;时间编辑
	      MOV   A, MODREG
		ANL	A, #0F0H
		CJNE	A, #90H, PG5		;编辑分钟
	      MOV   MAX_VL, #3BH
		MOV   MIN_VL, #00H
		MOV	A, FUNREG
		ANL 	A, #0FH
		CJNE	A, #01H, XD8
		MOV	A, MIN_MD
		ACALL BCD_HEX
		ACALL DOWN_ROUTINE
		SJMP 	XD9
XD8:
		MOV	A, MIN_MD
		ACALL BCD_HEX
		ACALL UP_ROUTINE
XD9:
		ACALL HEX_BCD
		MOV   MIN_MD, A
		MOV   LED_D0, R3
		MOV   LED_D1, R4
      	MOV   A, R3
		MOV	R7, #01H
		ACALL WRITE_LED
	      MOV   A, LED_D1
		MOV   R7, #02H
		ACALL WRITE_LED
	      SJMP  PG8
PG5:
		CJNE  A, #0A0H, PG9		;编辑小时
	      MOV   MAX_VL, #23
		MOV   MIN_VL, #0
		MOV	A, FUNREG
		ANL 	A, #0FH
		CJNE	A, #01H, XD10
		MOV	A, HOU_MD
		ACALL BCD_HEX
		ACALL DOWN_ROUTINE
		SJMP 	XD11
XD10:
		MOV	A, HOU_MD
		ACALL BCD_HEX
		ACALL UP_ROUTINE
XD11:
		ACALL HEX_BCD
		MOV   HOU_MD, A
		MOV   LED_D2, R3
		MOV   LED_D3, R4
      	MOV   A, R3
		MOV	R7, #03H
		ACALL WRITE_LED
	      MOV   A, LED_D3
		MOV	R7, #04H
		ACALL WRITE_LED
PG8:
		ACALL SET_TIME
PG9:	
		RET
;**************************************************************
; 显示记录数 			
;**************************************************************
DISP_ADS:
		ACALL R_AD_TAB
		MOV	B, A
		ANL   A, #0F0H
		SWAP	A
		MOV   LED_D1, A
		MOV	A, B
		ANL   A, #0FH
		MOV   LED_D0, A
		MOV	R7, #01H
		ACALL WRITE_LED
	      MOV   A, LED_D1
		MOV	R7, #02H
		ACALL WRITE_LED
		RET
;**************************************************************
; 显示记录数 			
;**************************************************************
DISP_REC:
		ACALL HEX_BCD
		MOV   LED_D4, R3
		MOV   LED_D5, R4
      	MOV   A, R3
		MOV	R7, #05H
		ACALL WRITE_LED
	      MOV   A, LED_D5
		MOV	R7, #06H
		ACALL WRITE_LED

		RET
;**************************************************************
; A/D 采样 			
;
; 返回 -- A: AD采样结果值
;**************************************************************
AD_SAMPLE:
		MOV   AD_CNT, #00H
		MOV   A, #00H
		
		CLR	AD_CS
		NOP				;>1.4us
		NOP
PP1:
		MOV	C, AD_DATA
		SETB  AD_CLK
		RLC	A
		CLR	AD_CLK
		INC 	AD_CNT
		MOV   R0, AD_CNT
		CJNE	R0,#08H, PP1
            SETB  AD_CS
		RET
;**************************************************************
; AD 采样处理例程
;**************************************************************
RUN_ADS:
		MOV	R5, #00H
Q5:
		ACALL AD_SAMPLE
		SETB 	C
		MOV	B, A
		SUBB	A, #0AH		;AD门限200mV
		JC    Q6
		SJMP  Q9
Q6:
		CJNE  R5, #00H, Q9
		SJMP  Q1
Q9:
		INC	R5
		CJNE  R5, #01H, Q2
		MOV	AD_VA1, B
		SJMP  Q5
Q2:
		CJNE  R5, #02H, Q3
		MOV	AD_VA2, B
		SJMP  Q5
Q3:
;		CJNE	R5, #03H, Q6
		MOV	AD_VA3, B
;		SJMP  Q5
;Q6:
;		MOV   DELAYC, #01H
		MOV	A, AD_VA1
		SETB	C
		SUBB	A, AD_VA2		
		JC	Q7			;AD_VA1<AD_VA2
		SETB 	C
		MOV   A, AD_VA1
		SUBB	A, AD_VA3
		JC	Q8			;AD_VA1<AD_VA3
		MOV	AD_VAL, AD_VA1
		SJMP  Q0
Q7:
		MOV	A, AD_VA2
		SETB	C
		SUBB  A, AD_VA3
		JC	Q8			;AD_VA2<AD_VA3
		MOV	AD_VAL, AD_VA2
		SJMP  Q0
Q8:
		MOV	AD_VAL, AD_VA3
Q0:		
		MOV	A, AD_VAL
		SETB	C
		SUBB	A, #0AH		;AD门限200mV
		JC	Q1
		INC	REC_NU
		MOV	A, REC_NU
		CJNE  A, #100, Q4
		MOV	A, #00H
		MOV	REC_NU, A
Q4:
		MOV	AT2408, #0AEH
		MOV	R7, #0F8H
		MOV	R6, A
		ACALL WRITE_ROM		;记录最大记录数

		MOV	A, REC_NU		
		ACALL	GET_ADDR
		MOV   R6, REC_NU
		ACALL WRITE_ROM		;记录当前的AD采样数据

		MOV	A, REC_NU
		ACALL DISP_REC
Q1:
		RET
;**************************************************************
; 计算E2PROM存储页地址及偏移地址
;
; 输入 --  A: 记录数
; 返回 -- AT2408: E2PROM页地址
;	    R7: E2PROM偏移地址
;**************************************************************
GET_ADDR:
		MOV	B, #25
		DIV	AB
		CJNE	A, #00, Z1
		MOV	AT2408, #0A8H
		SJMP	Z4
Z1:
		CJNE	A, #01, Z2
		MOV	AT2408, #0AAH
		SJMP	Z4
Z2:
		CJNE	A, #02, Z3
		MOV	AT2408, #0ACH
Z3:
		MOV	AT2408, #0AEH
Z4:		
		MOV	A, #08
		MUL	AB	
		MOV	R7, A	
		RET
;**************************************************************
; 时钟中断服务
;**************************************************************
CLOCK:
		PUSH  ACC
		PUSH  PSW
;		MOV   A, DELAYC
;		CJNE  A, #00H, KB
;		SJMP  KC
;KB:
	;	DEC   DELAYC
KC:
		MOV	A, FNDREG		;是否处于查寻状态
		CJNE	A, #01, TA4
		SJMP	TA3
TA4:
		ACALL	READ_TIME
		MOV	A, MODREG
		ANL	A, #0F0H
		JZ	TA1 
		CJNE	A, #90H, K4		;最低两位闪烁
		MOV   A, #01H
		ACALL CLR_LED
		MOV	A, #02H
		ACALL	CLR_LED
		SJMP	TA3
K4:		
		CJNE 	A, #0A0H, K5	;中间两位闪烁
		MOV   A, #03H
		ACALL CLR_LED
		MOV	A, #04H
		ACALL	CLR_LED
		SJMP	TA3
K5:
		CJNE  A, #0C0H, TA2	;最高两位闪烁
		MOV   A, #05H
		ACALL CLR_LED
		MOV	A, #06H
		ACALL	CLR_LED
		SJMP  TA3
TA1:
		MOV   A, LED_D6
	      ANL   A, #7FH
		CJNE  A, #20H, TA2	;日期状态,不显示秒点
		SJMP	TA3
TA2:
		ACALL DISP_SPT
TA3:		
		MOV	R4, #09H
		ACALL DELAY

		MOV	A, LED_D6
		CJNE	A, #40H, K10
		MOV	A, FNDREG
		CJNE  A, #01H, K8
		MOV	A, CU_REC
		ACALL	DISP_REC
		SJMP  K7
K8:
		SJMP  K6
K10:
		CJNE	A, #20H, K6
		ACALL	DISP_DATE
		SJMP	K7
K6:
		ACALL DISP_TIME
		MOV	A, FNDREG
		CJNE	A, #01H, K9
		ACALL DISP_SPT
		SJMP 	K7
K9:
		ACALL CLR_SPT
K7:
		POP	PSW
		POP	ACC
		RETI
;**************************************************************
; RS232串口中断服务
;**************************************************************
INT_RS232:
		CLR	RI			;清除接收中断标志
		PUSH	ACC
		PUSH	PSW
		MOV	@R1, SBUF		;将命令读入缓冲区
		INC	R1
		DJNZ  COM_LG, X0		;判断命令接收是否完成
X3:
		MOV	COM_LG, #08
		MOV	R1, #68H		;设置接收缓冲区
		MOV   A, @R1
		CJNE  A, #0AAH, X0	;无效的控制命令
		INC   R1
		MOV	A, @R1
		CJNE	A, #0AAH, X1	;是否是控制命令1
						;上报所有的记录数据
		JMP  X6
X1:
		CJNE  A, #0BBH, X2	;是否是控制命令2
		INC	R1			;上报指定的记录数据
		MOV	CU_REC, @R1
		MOV	A, CU_REC
		ACALL REP_DATA
		SJMP  X6
X2:
		CJNE	A, #0CCH, X4	;是否是控制命令3
		INC	R1			;设置日历
		MOV	A, @R1
		ACALL HEX_BCD
		MOV	YEA_MD, A
		INC	R1
		MOV	A, @R1
		ACALL HEX_BCD
		MOV	MON_MD, A
		INC	R1
		MOV	A, @R1
		ACALL HEX_BCD
		MOV	DAY_MD, A
		INC	R1
		MOV	A, @R1
		ACALL HEX_BCD
		MOV	HOU_MD, A
		INC	R1
		MOV	A, @R1
		ACALL HEX_BCD
		MOV	MIN_MD, A
		ACALL SET_TIME		;设置8563时间
		MOV	R4, #05FH
		ACALL DELAY
		SJMP  X6
X4:
		CJNE	A, #0DDH, X5	;是否是控制命令4
		ACALL READ_REC
		MOV	SBUF, REC_NU	;上报当前记录数
		JNB	TI, $
		CLR	TI
		SJMP  X6
X5:
		CJNE	A, #0EEH, X0	;是否是控制命令5
		MOV	REC_NU, #00H	;清除所有的记录数据
		MOV	AT2408, #0AEH
		MOV	R7, #0F8H
		MOV	R6, #00H
		ACALL WRITE_ROM		;记录最大记录数
X6:
		MOV	R1, #68H
X0:
		POP	PSW
		POP	ACC
		RETI
;**************************************************************
; 上报指定记录数据
;
; 输入 -- A:记录数
; 返回 -- 
;**************************************************************
REP_DATA:
		CLR	TI
		ACALL	GET_ADDR
		ACALL	READ_ROM
		MOV	R1, #78H
		MOV	A, R6
		MOV	@R1, A
		INC	R1
		MOV   @R1, YEA_MD
		INC	R1
		MOV	@R1, MON_MD
		INC	R1
		MOV	@R1, DAY_MD
		INC	R1
		MOV	@R1, HOU_MD
		INC	R1
		MOV	@R1, MIN_MD	
		INC	R1
		MOV	@R1, AD_VAL
		MOV	R4, #0AFH		;延时处理
		ACALL DELAY
		MOV	R1, #78H
		MOV	R7, #07H
X7:
		MOV	SBUF, @R1		;发送当前数据
		JNB	TI, $
		CLR	TI
		INC	R1
		DJNZ	R7, X7
            MOV     R1, #68H
		RET
;**************************************************************
; LED 字符表格
;**************************************************************
LED_TAB:  	DB	07EH, 030H, 06DH, 079H, 033H
	      DB 	05BH, 05FH, 070H, 07FH, 07BH
;**************************************************************
; AD 采样表格
;**************************************************************
AD_TAB:  	DB	 05H,  07H,  09H,  11H,  12H 
	      DB 	 13H,  14H,  16H,  18H,  20H
	      DB 	 22H,  24H,  26H,  28H,  30H
	      DB 	 32H,  34H,  36H,  38H,  40H
	      DB 	 42H,  44H,  46H,  48H,  50H
;**************************************************************
		END
;**************************************************************

⌨️ 快捷键说明

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