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

📄 ch14_b11-10.asm

📁 51单片机基础篇 对于有一定基础的人看看 包含书中所以的源代码
💻 ASM
字号:
;PROGRAM NAME B11-10.ASM
MS10	EQU	9217	        ;APPROXIMATELY 10ms INTERRUPR
INTR_CNT EQU	30H	        ;CNT STORIAGE
BUFFER	EQU	31H	        ;DISPLAY BUFFER
BINARY	EQU	32H	        ;BINARY DATA STORIAGE
;
CNTH_L	EQU	33H
CNTH_H	EQU	34H	        ;COUNTER FOR DUTY HI
CNTT_L	EQU	35H
CNTT_H	EQU	36H	        ;COUNTER FOR DUTY HI+LO
;
SMT160	REG	P3.2	        ;TEMP SENSOR
SCOPE	REG	P3.3	        ;CHECK BY SCOPE
BUZZER	REG	P3.4
CHKPUL	REG	P3.5	        ;CHECK BY SCOPE
LED	REG	P3.7
KEY	REG	P3.7
;
SAMPLING REG	20H.0
;
	ORG	0000H
	JMP	START
	ORG	0003H	        ;[DISABLE]  EXTERNAL INT0 INTERRUPT
	RETI
	ORG	000BH	        ;[ENABLE]  TIMER0 OVERFLOW INTERRUPT
	JMP	T0_ISR
;
	ORG	0013H
	RETI		        ;[DISABLE] EXTERNAL INT1 INTERRUPT
	ORG	001BH
	RETI		        ;[DISABLE] TIMER1 OVERFLOW INTERRUPT
	ORG	0023H
	RETI		        ;[DISABLE] SERIAL INTERRUPT
;
	ORG	30H
START	MOV	R0,#00H
	DJNZ	R0,$	        ;DELAY A WHILE
	MOV	SP,#60H
	MOV	P1,#FFH
	MOV	P3,#FFH
	MOV	INTR_CNT,#00H
	CLR	BUZZER	        ;P3.4=0,BUZZER OFF
	CLR	LED	        ;P3.7=0,LED OFF
	CALL	SET_TMR0
	MOV	BINARY,#00H	;BINARY DATA FOR DISPLAY
	ACALL	CONV	        ;CONVERT BINARY TO BCD
	CLR	SAMPLING
$WAIT	JNB	SAMPLING,$WAIT
	SETB	LED
	CALL	READ_TEMP
	CLR	LED
	CLR	SAMPLING
	SJMP	$WAIT
;
;MEASURE PULSE
READ_TEMP
	CLR	EA
$HI	JB	SMT160,$HI
$LO	JNB	SMT160,$LO
;LOW TO	HIGH TRANSITION
H_ONLY	MOV	DPTR,#0000H
	MOV	R0,#10	        ;READ COUNT
	SETB	SCOPE
$0	INC	DPTR
	JB	SMT160,$0
$1	JNB	SMT160,$1	;SKIP LO
	DJNZ	R0,$0
	MOV	R4,DPL
	MOV	R5,DPH
	CLR	SCOPE
;
H_L	MOV	DPTR,#0000H
	MOV	R0,#10
$HI	JB	SMT160,$HI
$LO	JNB	SMT160,$LO
	SETB	SCOPE
$0	INC	DPTR
	JB	SMT160,$0
$1	INC	DPTR
	JNB	SMT160,$1
	DJNZ	R0,$0
	MOV	R6,DPL
	MOV	R7,DPH
	SETB	EA
	CLR	SCOPE
;
	MOV	CNTH_L,R4
	MOV	CNTH_H,R5
	MOV	CNTT_L,R6
	MOV	CNTT_H,R7
;
	MOV	R4,CNTH_L
	MOV	R5,CNTH_H
	MOV	R7,#00H		;(07H 06H 05H 04H)=DUTY HI
	MOV	R6,#00H
;
	MOV	0FH,#00H	;(0FH 0EH 0DH 0CH)=212 CONSTANT
	MOV	0EH,#00H
	MOV	0DH,#00H
	MOV	0CH,#212
	CALL	MUL_4BYTE	;RESULT IN (07H 06H 05H 04H)
;
	MOV	0FH,#00H
	MOV	0EH,#00H
	MOV	0CH,CNTT_L
	MOV	0DH,CNTT_H
	CALL	DIV_4BYTE	;(7)(6)(5)(4)/=(F)(E)(D)(C)
	MOV	A,04H		;GET LOWER BYTE ONLY
	SUBB	A,#68		;A=(212*HI)/(HI+LO)-68
	MOV	BINARY,A
TEST	CALL	CONV
	CLR	SCOPE
	RET
;
;
CONV	MOV	A,BINARY
	MOV	B,#10
	DIV	AB	        ;A=A/10,B=A MOD 10
	ANL	A,#0FH	        ;A=A AND 0FH
	JNZ	$1
	MOV	A,#0FH	        ;IF A=00H THEN A=0FH LEADING BLANK
$1	SWAP	A
	ORL	A,B	        ;A AS BCD FORM
	MOV	BUFFER,A	;SAVE AT BUFFER
	RET
;
DELAY	MOV	R7,#00H
$1	MOV	R6,#00H
	DJNZ	R6,$
	DJNZ	R7,$1
	RET
;
T0_ISR
	MOV	TH0,#(65536-MS10) / 256	;RELOAD TH0
	MOV	TL0,#(65536-MS10) .MOD. 256
	PUSH	A
	PUSH	PSW
	PUSH	00H
;
	MOV	A,BUFFER
	ANL	A,#0FH	        ;GET LOW NIBBLE
	SETB	ACC.5	        ;BIT5=1
	MOV	P1,A	        ;SHOW 1 DIGIT
	MOV	R0,#30H
	DJNZ	R0,$	        ;DELAY
;inter-blanking
	CLR	ACC.4
	CLR	ACC.5
	MOV	P1,A	        ;ALL DIGIT BLANK
	MOV	R0,#04H
	DJNZ	R0,$	        ;DELAY
;
	MOV	A,BUFFER
	ANL	A,#F0H	        ;GET HIGH NIBBLE
	SWAP	A	        ;SWAP A
	SETB	ACC.4	        ;BIT4=1
	MOV	P1,A	        ;SHOW ANOTHER DIGIT
	MOV	R0,#30H
	DJNZ	R0,$	        ;DELAY
;
	CLR	ACC.4
	CLR	ACC.5
	MOV	P1,A	        ;ALL DIGIT BLANK
;
;INTR_CNT+1
	MOV	A,INTR_CNT
	JNZ	$NEXT
	SETB	SAMPLING	;IF A=0 OR A=50 THEN SAMPLING=1
	SJMP	$INC
$NEXT	CJNE	A,#50,$INC
	SETB	SAMPLING
$INC	INC	INTR_CNT
	MOV	A,INTR_CNT
	CJNE	A,#100,$T0_END
	MOV	INTR_CNT,#00H
$T0_END	POP	00H
	POP	PSW
	POP	A
	RETI
;
SET_TMR0
	MOV	A,#01H	        ;TIMER MODE 1
	MOV	TMOD,A
	MOV	TH0,#(65536-MS10) / 256	;RELOAD TH0
	MOV	TL0,#(65536-MS10) .MOD. 256
	CLR	TF0	        ;CLEAR TIMER0 FLAG
	SETB	TR0	        ;TIMER0 START COUNT
	SETB	ET0	        ;ENABLE TIMER0 INTERRUPT
	SETB	EA	        ;ENABLE SYSTEM INTERRUPT
	RET
;
;ROUTINES FOR AT2051 KIT
;
;FUNCTION NAME : CLEAR_INTERNAL_DATA_MEMORY
;FUNCTION : CLEAR 4 BYTES DATA MEMORY 08H,09H,0AH,0BH
;
CLEAR_INTERNAL_DATA_MEMORY
	MOV	R0,#08H	;DATA MEMORY ADDR
	MOV	R2,#04H	;COUNT
$1 	CLR	A
	MOV	@R0,A
	INC	R0
	DJNZ	R2,$1
	RET
;
;FUNCTION NAME : DATA_ADD_4BYTE
;FUNCTION : ADD 4 BYTES IN DATA MEMORY
;(R0+3)(R0+2)(R0+1)(R0)=(R0+3)(R0+2)(R0+1)(R0)+(R1+3)(R1+2)(R1+1)(R1)
;
DATA_ADD_4BYTE
	MOV	R2,#04H
	CLR	C
$1	MOV	A,@R0
	ADDC	A,@R1
	MOV	@R0,A
	INC	R0
	INC	R1
	DJNZ	R2,$1
	RET
;
;
;FUNCTION NAME : DATA_SUBTRACT
;FUNCTION : SUBTRACT 4 BYTES,RESULT IN DATA MEMORY
;(R0+3)(R0+2)(R0+1)(R0)=(R0+3)(R0+2)(R0+1)(R0)-(R1+3)(R1+2)(R1+1)(R1)
;
DATA_SUBTRACT
	MOV	R2,#04H
	CLR	C
$1	MOV	A,@R0
	SUBB	A,@R1
	MOV	@R0,A
	INC	R0
	INC	R1
	DJNZ	R2,$1
	RET
;
;FUNCTION NAME : DATA_COMPLEMENT
;FUNCTION : COMPLEMENT 4 BYTES IN (07)(06)(05)(04)
;
DATA_COMPLEMENT
	MOV	R0,#04
	MOV	R2,#04H		;COUNT
	SETB	C		;CY=1
$1	MOV	A,@R0
	CPL	A
	ADDC	A,#00H		;A=A+CY
	MOV	@R0,A
	INC	R0
	DJNZ	R2,$1
	RET
;
;
;FUNCTION NAME : INTERNAL_DATA_COMPARE
;FUNCTION : COMPARE 2 BLOCKS INTERNAL DATA MEMORY (R2) TIMES
;
INTERNAL_DATA_COMPARE
$1	MOV	A,@R0
	MOV	B,@R1
	CJNE	A,B,$2
	DEC	R0
	DEC	R1
	DJNZ	R2,$1
$2      RET
;
;FUNCTION NAME : ACC_COMPARE
;FUNCTION : COMPARE ACC WITH (R0) IN DATA MEMORY (R2) TIMES
;
ACC_COMPARE
$1	MOV	B,@R0
	CJNE	A,B,$2
	INC	R0
	DJNZ	R2,$1
	CLR	A
	SJMP	$3		;IF FOUND THEN A=0
$2	MOV	A,#01H		;ELSE          A=1
$3	RET
;
;FUNCTION NAME :MUL_4BYTE
;FUNCTION : UNSIGNED 4 BYTE MULTIPLY
;(07H)(06H)(05H)(04H)=(07H)(06H)(05H)(04H) X (0FH)(0EH)(0DH)(0CH)
;WORKING AREA DATA MEMORY : (0BH),(0AH),(09H),(08H)
;
MUL_4BYTE
	LCALL	CLEAR_INTERNAL_DATA_MEMORY
	MOV	R3,#33		;SHIFT COUNT
	CLR	C
$1	MOV	R1,#0BH
	MOV	R2,#08H
$2	MOV	A,@R1
	RRC	A
	MOV	@R1,A
	DEC	R1
	DJNZ	R2,$2
	JNC	$3
	CLR	C
	MOV	R0,#08H
	MOV	R1,#0CH
	LCALL	DATA_ADD_4BYTE
$3	DJNZ	R3,$1
	RET
;
;FUNCTION NAME :DIV_4BYTE
;FUNCTION : UNSIGNED 4 BYTE DIVIDE
;(07H)(06H)(05H)(04H)=(07H)(06H)(05H)(04H) / (0FH)(0EH)(0DH)(0CH)
;WORKING AREA DATA MEMORY :(0BH),(0AH),(09H),(08H)
;
DIV_4BYTE
	LCALL	CLEAR_INTERNAL_DATA_MEMORY
	MOV	R3,#32		;SHIFT COUNT
	CLR	C
$1	MOV	R1,#04H
	MOV	R2,#08H
$2	MOV	A,@R1
	RLC	A
	MOV	@R1,A
	INC	R1
	DJNZ	R2,$2
	MOV	R0,#0BH
	MOV	R1,#0FH
	MOV	R2,#04H
	LCALL	INTERNAL_DATA_COMPARE
	JC	$3
	MOV	R0,#08H
	MOV	R1,#0CH
	LCALL	DATA_SUBTRACT
$3	CPL	C
	DJNZ	R3,$1
	MOV	R1,#04H
	MOV	R2,#04H
$4	MOV	A,@R1
	RLC	A
	MOV	@R1,A
	INC	R1
	DJNZ	R2,$4
	RET
;

⌨️ 快捷键说明

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