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

📄 h.asm

📁 汇编程序(cygnal c8051f021)
💻 ASM
字号:
$INCLUDE(C8051F020.INC)
DAT3 DATA 030H
DAT4 DATA 031H
BIT1 DATA 032H
BIT2 DATA 033H
BIT3 DATA 034H
BIT4 DATA 035H
C1 DATA 036H
CC DATA 037H
C2 DATA 038H
RESULT DATA 039H


DATIN DATA 021H
DATOUT DATA 022H
DAT1 DATA 023H
DAT2 DATA 024H

DIN BIT P1.1
LOAD BIT P1.2
CLK BIT P1.3

ORG 0000H
AJMP START
ORG 0100H

START:		MOV WDTCN,#0DEH
					MOV WDTCN,#0ADH
					CLR EA
CLOCK:		MOV OSCXCN,#67H
					CLR A
					DJNZ ACC,$
					DJNZ ACC,$
WAIT:			MOV A,OSCXCN
					JNB ACC.7,WAIT
					ORL OSCICN,#08H
					ORL OSCXCN,#80H
SETT: 		MOV XBR2,#40H
					MOV P1MDOUT,#0FFH
					MOV P2MDOUT,#0FFH				
					MOV TMOD,#11H
					MOV DAT1,#09H //硬件译码
					MOV DAT2,#0FFH 
					LCALL SEND
					MOV DAT1,#0AH //强度5
					MOV DAT2,#04H
					LCALL SEND
					MOV DAT1,#0BH //限扫4
					MOV DAT2,#03H
					LCALL SEND						
					MOV DAT1,#0CH// 启动	
					MOV DAT2,#01H
					LCALL SEND
					CLR PSW.1
MAIN:			LCALL RESET				//reset
					JNB PSW.1,MAIN
					CLR PSW.1

					MOV DAT1,#01H// 
					MOV DAT2,#01H
					LCALL SEND
					MOV DAT1,#02H// 	
					MOV DAT2,#00H
					LCALL SEND
					MOV DAT1,#03H// 
					MOV DAT2,#00H
					LCALL SEND
					MOV DAT1,#04H
					MOV DAT2,#01H
					LCALL SEND
					MOV C2,#20
					LCALL DEL50M
					MOV DATIN,#0CCH  //skip rom
					LCALL WRITE
CONVERT:	MOV DATIN,#044H		//convert
					LCALL WRITE
WAT:			MOV C2,#12				//WAIT FOR CONVERTING
					LCALL DEL50M
CNVTOK:   CLR PSW.1
					LCALL RESET				// RESET
					JNB PSW.1,MAIN
					CLR PSW.1
					MOV DATIN,#0CCH		//skip rom
					LCALL WRITE
					MOV DATIN,#0BEH		//read code
					LCALL WRITE
			;	  CALL READT				//READ TIME
;SST:			JNB P2.0,SST
					LCALL READ				//read data(dat4,dat3)
					MOV DAT3,DATOUT
					LCALL READ
					MOV DAT4,DATOUT
					MOV A,DAT4
					ANL A,#0F0H
					CLR C
					ADD A,#010H     	//P or N,
					JC NEG
POSITIVE: MOV A,DAT3				//positive    小数位   
					ANL A,#0FH
					MOV B,#10
					MUL AB
					MOV B,#16
					DIV AB
					MOV R7,A
					MOV A,B
					CLR C
					CJNE A,#08,POS1
POS1:			JC POS2
					INC R7
					MOV DAT1,#01H
					MOV DAT2,R7
					LCALL SEND
					SJMP POS3
POS2:			MOV DAT1,#01H
					MOV DAT2,R7
					LCALL SEND
POS3:			MOV A,DAT3
					ANL A,#0F0H
					RR A
					RR A
					RR A
					RR A
					MOV R6,A
					MOV A,DAT4
					ANL A,#00FH
					RL A
					RL A
					RL A
					RL A
					ORL A,R6
					ADD A,#00H
					CLR C
					DA A
					MOV BIT3,A
					ANL BIT3,#00FH
					ANL A,#0F0H
					RR A
					RR A
					RR A
					RR A
					MOV BIT4,A
					MOV DAT1,#02H
					MOV DAT2,BIT3
					ORL DAT2,#80H
					LCALL SEND
					MOV DAT1,#03H
					MOV DAT2,BIT4
					LCALL SEND
					JNC ENDD
					MOV DAT1,#04H
					MOV DAT2,#01H
					LCALL SEND
ENDD:			LJMP MAIN
NEG:			CLR C
					MOV A,DAT3
					CPL A
					ADD A,#01H
					MOV A,DAT4
					CPL A
					ADDC A,#00H
					MOV DAT1,#04H
					MOV DAT2,#0AH
					LCALL SEND
					JMP POSITIVE
					
										



	//************************************************//RESET DS18B20
RESET:		SETB P2.0
					MOV CC,#7
R2US1:		DJNZ CC,R2US1					//2 US
					CLR P2.0	
					MOV C1,#8			    		//480 US
					LCALL DEL60US
					SETB P2.0
					MOV C1,#03H						//60 US
					LCALL DEL60US
					JBC P2.0,RETT
					SETB PSW.1						// OK PSW.1=1;	
RETT:			MOV C1,#6     				//480 US
					LCALL DEL60US
   				RET
	//************************************************//READ DS18B20 DATA
READ:			MOV R2,#08H
READLOOP:	CLR P2.0         //P2.0=0
					MOV CC,#04H
R1US1:		DJNZ CC,R1US1
					SETB P2.0       
					MOV CC,#04H			 //1.4 US
R1US2:		DJNZ CC,R1US2
					CLR C
					MOV C,P2.0			 //START READ
					MOV DATOUT.7,C
					MOV A,DATOUT
					RR A
					MOV DATOUT,A
					MOV C1,#01H
					LCALL DEL60US			//60US
					DJNZ R2,READLOOP
					SETB P2.0
					MOV CC,#04H				//1.4 US
R1US3:		DJNZ CC,R1US3					
					RET
	//*************************************************//写数据   P2.0=1
WRITE:		MOV R3,#08H
WRITELOOP:CLR P2.0				 		//P2.0=0
					MOV CC,#04H			 		//*****************   ALMOST   *******************//
W1US1:		DJNZ CC,W1US1				//*****************   1.4 US   *******************//			
					JNB DATIN.0,WRT0
WRT1:			SETB P2.0			 			//START WRITE
					MOV C1,#001H
					LCALL DEL60US    		//60 US 
					MOV CC,#030H
W1US4:		DJNZ CC,W1US4			//10 US
					SJMP WRLOP
WRT0:			MOV C1,#001H
					LCALL DEL60US				//60 US
					MOV CC,#030H
W1US3:		DJNZ CC,W1US3			//10 US
WRLOP:		MOV A,DATIN
					RR A
					MOV DATIN,A
					DJNZ R3,WRITELOOP
					SETB P2.0
					MOV CC,#04H
W1US2:		DJNZ CC,W1US2			//1.4 US
					RET
	//**************************************************//读时间间隙  
;READT:		CLR EA
;					CLR P2.0         //P2.0=0
;R1US4:		MOV CC,#04H
;					DJNZ CC,R1US1
;					SETB P2.0        //P2.0=1
;R1US5:		MOV CC,#55H
;					DJNZ CC,R1US5
;					SETB P2.0     
;					RET
	//**************************************************//MAX7219SEND
SEND:			MOV R0,#08H       //7219 SEND
					CLR LOAD
SENDLOOP: CLR CLK										
					MOV C,DAT1.7
					MOV DIN,C
					SETB CLK
					MOV A,DAT1
					RL A
					MOV DAT1,A
					DJNZ R0,SENDLOOP
SEND1:		MOV R3,#08H
SENDLOOP1:CLR CLK
					MOV C,DAT2.7
					MOV DIN,C
					SETB CLK
					MOV A,DAT2
					RL A
					MOV DAT2,A
					DJNZ R3,SENDLOOP1
					SETB LOAD
					RET
	//******************************************************//50MS
DEL50M:		MOV TH1,#03CH  
					MOV TL1,#0B1H
					SETB TR1
LOOP3:		JBC TF1,LOOP4
					SJMP LOOP3
LOOP4:		CLR TR1
					CLR TF1
					DJNZ C2,DEL50M
					RET
	//*******************************************************//delay 60us

DEL60US:	MOV TH0,#0FFH
					MOV TL0,#0C5H
					SETB TR0
LOOP5:		JBC TF0,LOOP6
					SJMP LOOP5
LOOP6:		CLR TF0
					CLR TR0
					DJNZ C1,DEL60US
					RET
EX:
					END

⌨️ 快捷键说明

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