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

📄 logger.a51

📁 data aquistion system project on vb
💻 A51
字号:
INCLUDE REG_51.PDF

RB0     EQU     000H    ; Select Register Bank 0
RB1     EQU     008H    ; Select Register Bank 1  ...poke to PSW to use

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		PORT DECLERATION
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

DS1621W   EQU    90H     ; SLAVE ADDRESS 1001 000 + 0 TO WRITE
DS1621R   EQU    91H   ; SLAVE ADDRESS 1001 000 + 1 TO READ

DS1621W1   EQU    92H     ; SLAVE ADDRESS 1001 001 + 0 TO WRITE
DS1621R1   EQU    93H   ; SLAVE ADDRESS 1001 001 + 1 TO READ

SDA 	EQU 	P1.7  
SCL 	EQU 	P1.6		

DIS_A	EQU	P0.2		
DIS_B	EQU	P0.3		
DIS_C	EQU	P0.4
DIS_D	EQU	P0.6
DIS_E	EQU	P0.5
DIS_F	EQU	P0.1
DIS_G	EQU	P0.0

DIS1	EQU	P0.7
DIS2	EQU	P2.7                
DIS3	EQU	P2.6
DIS4	EQU	P2.5

RB0     EQU     000H    ; Select Register Bank 0
RB1     EQU     008H    ; Select Register Bank 1  ...poke to PSW to use


DSEG            ; This is internal data memory
ORG     20H     ; Bit adressable memory
FLAGS:	DS		1
LASTREAD  BIT    FLAGS.0
SQW 	    BIT    FLAGS.4
ACK       BIT    FLAGS.5
BUS_FLT   BIT    FLAGS.6
_2W_BUSY  BIT    FLAGS.7
CANCEL    BIT    FLAGS.1
CANCEL1   BIT    FLAGS.2
ALARM	    BIT    FLAGS.3
COUNT:	DS	1
SPEED:	DS	1
VALUE_1:	DS	1
VALUE_2:	DS	1
VALUE_3:	DS	1
VALUE_4:	DS	1

NUMB1:	DS	1
NUMB2:	DS	1
NUMB3:	DS	1
NUMB4:	DS	1

TEMPM:		DS	1
TEMPL:		DS	1
TEMPM1:		DS	1
TEMPL1:		DS	1
ALRMTEMP:	DS	1
BITCNT:	DS	1
TEM1:		DS	1
TEM2:		DS	1

STACK:		DS	1
; ***MACRO'S***

SCL_HIGH  MACRO
          SETB   SCL      ; SET SCL HIGH
          JNB    SCL,$    ; LOOP UNTIL STRONG 1 ON SCL
          ENDM
CSEG     AT      0        ; RESET VECTOR
;---------==========----------==========---------=========---------
;              PROCESSOR INTERRUPT AND RESET VECTORS
;---------==========----------==========---------=========---------
 
		ORG     00H    		; Reset
		JMP     MAIN

		ORG 	000BH		;Timer Interrupt0
		JMP 	REFRESH
  
;---------==========----------==========---------=========---------
MAIN:
		MOV SP,#60H
      MOV PSW,#RB0   
		MOV SPEED,#00H
		MOV COUNT,#00H

		MOV VALUE_1,#15H			;Switch off all displays
		MOV VALUE_2,#15H
		MOV VALUE_3,#15H
		MOV VALUE_4,#15H
		CLR DIS1
		CLR DIS2
		CLR DIS3
		CLR DIS4
		MOV TMOD,#21H		;enable timer0 for scanning
	
		MOV TL0,#00H
		MOV TH0,#0FDH
		SETB ET0
		SETB EA
		
		SETB TR0		;Start the Timer 
		MOV TH1,#0FDH
		MOV SCON,#50H
		SETB TR1
		
	
		
YHY:
		CALL SEND_START
		MOV A,#DS1621W
      ACALL SEND_BYTE
      MOV A,#0EEH
      ACALL SEND_BYTE
      ACALL SEND_STOP
      
      ACALL SEND_START
      MOV A,#DS1621W
      ACALL SEND_BYTE
      MOV A,#0AAH
      ACALL SEND_BYTE
      ACALL SEND_STOP
      
      ACALL SEND_START
      MOV A,#DS1621R
      ACALL SEND_BYTE
      ACALL READ_BYTE
      MOV TEMPM,A
      ACALL READ_BYTE
      MOV TEMPL,A
      ACALL SEND_STOP   
  
 ;second IC   
      CALL SEND_START
		MOV A,#DS1621W1
      ACALL SEND_BYTE
      MOV A,#0EEH
      ACALL SEND_BYTE
      ACALL SEND_STOP
      
      ACALL SEND_START
      MOV A,#DS1621W1
      ACALL SEND_BYTE
      MOV A,#0AAH
      ACALL SEND_BYTE
      ACALL SEND_STOP
      
      ACALL SEND_START
      MOV A,#DS1621R1
      ACALL SEND_BYTE
      ACALL READ_BYTE
      MOV TEMPM1,A
      ACALL READ_BYTE
      MOV TEMPL1,A
      ACALL SEND_STOP   
      
      MOV A,#254
		ACALL TRANS
		MOV A,TEMPM
		ACALL TRANS
		MOV A,#253
		ACALL TRANS
		MOV A,TEMPM1
		ACALL TRANS
		
			
		MOV R2,TEMPM
		CJNE R2,#0FFH,FVB2
		MOV VALUE_1,#01H
		MOV VALUE_2,#15H
		MOV VALUE_3,#15H
		MOV VALUE_4,#15H
		CALL DELAY  
		CALL DELAY
		CALL DELAY  
		CALL DELAY
		CALL DELAY  
		CALL DELAY
		CALL DELAY  
		CALL DELAY
		AJMP YHY1
		
FVB2:  MOV R1,#00H
      CALL HEX2BCD
	   MOV VALUE_1,#01H
      MOV VALUE_4,R3
	   MOV VALUE_3,R4
	   MOV VALUE_2,R5  
	   
	
		
		
	   CALL DELAY  
		CALL DELAY
		CALL DELAY  
		CALL DELAY
		CALL DELAY  
		CALL DELAY
		CALL DELAY  
		CALL DELAY
				
YHY1:	MOV R2,TEMPM1
		CJNE R2,#0FFH,FVB1
		MOV VALUE_1,#02H
		MOV VALUE_2,#15H
		MOV VALUE_3,#15H
		MOV VALUE_4,#15H
		CALL DELAY  
		CALL DELAY
		CALL DELAY  
		CALL DELAY
		CALL DELAY  
		CALL DELAY
		CALL DELAY  
		CALL DELAY
		AJMP YHY
		
FVB1: MOV R1,#00H
      CALL HEX2BCD
	   MOV VALUE_1,#02H
      MOV VALUE_4,R3
	   MOV VALUE_3,R4
	   MOV VALUE_2,R5  
	   	
		CALL DELAY  
		CALL DELAY	   
  	   CALL DELAY  
		CALL DELAY
		CALL DELAY  
		CALL DELAY
		CALL DELAY  
		CALL DELAY
		AJMP YHY
TRANS:
		MOV SBUF,A
		JNB TI,$
		CLR TI
		RET				
;**************************************************
HEX2BCD: 
		MOV R3,#00D
      MOV R4,#00D
      MOV R5,#00D
      MOV R6,#00D
      MOV R7,#00D
      
		  MOV B,#10D
        MOV A,R2
        DIV AB
        MOV   R3,B              ;   
        MOV   B,#10             ; R7,R6,R5,R4,R3
        DIV   AB
        MOV   R4,B
        MOV   R5,A
        CJNE R1,#0H,HIGH_BYTE   ; CHECK FOR HIGH BYTE
        SJMP ENDD
 
HIGH_BYTE:
			MOV   A,#6
        	ADD   A,R3
			MOV   B,#10
			DIV   AB
        	MOV   R3,B
			ADD   A,#5
        	ADD   A,R4
			MOV   B,#10
			DIV   AB
        	MOV   R4,B
			ADD   A,#2
        	ADD   A,R5
			MOV   B,#10
			DIV   AB
        	MOV   R5,B
        	CJNE R6,#00D,ADD_IT
        	SJMP CONTINUE
ADD_IT:
        	ADD A,R6
CONTINUE:
       	 MOV R6,A
       	 DJNZ R1,HIGH_BYTE
       	 MOV B, #10D
      	 MOV A,R6
       	 DIV AB
       	 MOV R6,B
       	 MOV R7,A
ENDD:  	 RET
; **********************************************************	
; THIS SUB READS ONE BYTE OF DATA FROM THE DS1307
; **********************************************************

READ_BYTE:
         MOV         BITCNT,#08H; SET COUNTER FOR 8-BITS DATA
         MOV         A,#00H
         SETB        SDA        ; SET SDA HIGH TO ENSURE LINE
                                ; FREE
READ_BITS:
         SCL_HIGH               ; TRANSITION SCL LOW-TO-HIGH
         MOV         C,SDA      ; MOVE DATA BIT INTO CARRY
         RLC         A          ; ROTATE CARRY-BIT INTO ACC.0
         CLR         SCL        ; TRANSITION SCL HIGH-TO-LOW
         DJNZ        BITCNT,READ_BITS
                                ; LOOP FOR 8-BITS
         JB          LASTREAD,ACKN
                                ; CHECK TO SEE IF THIS IS
                                ; THE LAST READ
         CLR         SDA        ; IF NOT LAST READ SEND ACK-BIT

ACKN:
         SCL_HIGH               ; PULSE SCL TO TRANSMIT ACKNOWLEDGE
         CLR         SCL        ; OR NOT ACKNOWLEDGE BIT
         RET		
; **********************************************************
; SUB SENDS START CONDITION
; **********************************************************

SEND_START:
         SETB        _2W_BUSY   ; INDICATE THAT 2-WIRE
         CLR         ACK        ; OPERATION IS IN PROGRESS
         CLR         BUS_FLT    ; CLEAR STATUS FLAGS
         JNB         SCL,FAULT
         JNB         SDA,FAULT
         SETB        SDA        ; BEGIN START CODITION
         SCL_HIGH
         CLR         SDA
         ACALL       DEELAY
         CLR         SCL
         RET
FAULT:
         SETB        BUS_FLT
         RET

; **********************************************************
; SUB SENDS STOP CONDITION
; **********************************************************
SEND_STOP:
         CLR         SDA
         SCL_HIGH
         SETB        SDA
         CLR         _2W_BUSY
         RET
; **********************************************************
; SUB DELAYS THE BUS
; **********************************************************
DEELAY:
         NOP                    ; DELAY FOR BUS TIMING
         RET
; **********************************************************
; THIS SUB SENDS 1 BYTE OF DATA TO THE DS1307
; CALL THIS FOR EACH REGISTER SECONDS TO YEAR
; ACC MUST CONTAIN DATA TO BE SENT TO CLOCK
; **********************************************************
SEND_BYTE:
         MOV         BITCNT,#08H; SET COUNTER FOR 8-BITS
SB_LOOP:
         JNB         ACC.7,NOTONE; CHECK TO SEE IF BIT-7 OF
         SETB        SDA        ; ACC IS A 1, AND SET SDA HIGH
         JMP         ONE
NOTONE:
         CLR         SDA        ; CLR SDA LOW
ONE:
         SCL_HIGH               ; TRANSITION SCL LOW-TO-HIGH
         RL          A          ; ROTATE ACC LEFT 1-BIT
         CLR         SCL        ; TRANSITION SCL LOW-TO-HIGH
         DJNZ        BITCNT,SB_LOOP; LOOP FOR 8-BITS
         SETB        SDA        ; SET SDA HIGH TO LOOK FOR
         SCL_HIGH               ; ACKNOWLEDGE PULSE
         CLR         ACK
         JNB         SDA,SB_EX  ; CHECK FOR ACK OR NOT ACK
         SETB        ACK        ; SET ACKNOWLEDGE FLAG FOR
                                ; NOT ACK
SB_EX:
         ACALL       DEELAY      ; DELAY FOR AN OPERATION
         CLR         SCL        ; TRANSITION SCL HIGH-TO-LOW
         ACALL       DEELAY      ; DELAY FOR AN OPERATION
         RET
; **********************************************************		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
; 	7 SEGMENT DISPLAY ROUTINE
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DISP:
	MOV R2,SPEED
	CJNE R2,#00H,AAS1
	CLR DIS_A
	CLR DIS_B
	CLR DIS_C
	CLR DIS_D
	CLR DIS_E
	CLR DIS_F
	SETB DIS_G
	RET
AAS1:	CJNE R2,#01H,AS2
	CLR DIS_B
	CLR DIS_C
	SETB DIS_A
	SETB DIS_D
	SETB DIS_E
	SETB DIS_F
	SETB DIS_G
	RET
AS2:	CJNE R2,#02H,AS3
	CLR DIS_A
	CLR DIS_B
	CLR DIS_D
	CLR DIS_E
	CLR DIS_G
	SETB DIS_C
	SETB DIS_F
	RET
AS3:	CJNE R2,#03H,AS4
	CLR DIS_A    
	CLR DIS_B
	CLR DIS_C
	CLR DIS_D
	CLR DIS_G
	SETB DIS_E
	SETB DIS_F
	RET
AS4:	CJNE R2,#04H,AS5
	CLR DIS_B
	CLR DIS_C
	CLR DIS_F
	CLR DIS_G
	SETB DIS_A
	SETB DIS_D
	SETB DIS_E
	RET
AS5:	CJNE R2,#05H,AS6
	CLR DIS_A
	CLR DIS_C
	CLR DIS_D
	CLR DIS_F
	CLR DIS_G
	SETB  DIS_B
	SETB DIS_E
	RET
AS6:	CJNE R2,#06H,AS7
	CLR DIS_A
	CLR DIS_C
	CLR DIS_D
	CLR DIS_E
	CLR DIS_F
	CLR DIS_G
	SETB DIS_B
	RET
AS7:	CJNE R2,#07H,AS8
	CLR DIS_A
	CLR DIS_B
	CLR DIS_C
	SETB DIS_D
	SETB DIS_E
	SETB DIS_F
	SETB DIS_G
	RET
AS8:	CJNE R2,#08H,AS9
	CLR DIS_A
	CLR DIS_B
	CLR DIS_C
	CLR DIS_D
	CLR DIS_E
	CLR DIS_F
	CLR DIS_G
	RET
AS9:	CJNE R2,#09H,AS10
	CLR DIS_A
	CLR DIS_B
	CLR DIS_C
	CLR DIS_D
	CLR DIS_F
	CLR DIS_G
	SETB DIS_E
	RET
AS10:	CJNE R2,#15H,AS11		;symbol for -
	SETB DIS_A
	SETB DIS_B
	SETB DIS_C
	SETB DIS_D
	SETB DIS_E
	SETB DIS_F
	CLR DIS_G
	RET
AS11:	CJNE R2,#16H,AS12		;switch off all disp
	SETB DIS_A
	SETB DIS_B
	SETB DIS_C
	SETB DIS_D
	SETB DIS_E
	SETB DIS_F
	SETB DIS_G
	RET
AS12:	MOV SPEED,#00H
	AJMP DISP
;**********************************************************	
;		INTRRUPT ROUTINE TO REFRESH THE DISPLAY
;**********************************************************	
REFRESH:
	PUSH   PSW           ; save current registerset
   MOV    PSW,#RB1
   PUSH   ACC
	INC COUNT
	MOV R4,COUNT
QA1:	CJNE R4,#01H,QA2
	MOV SPEED,VALUE_1
	SETB DIS1
	CLR DIS2
	CLR DIS3
	CLR DIS4
	CALL DISP 
	AJMP DOWN   
QA2:	CJNE R4,#02H,QA3
	MOV SPEED,VALUE_2
	CLR DIS1
	SETB DIS2
	CLR DIS3
	CLR DIS4
	CALL DISP 
	AJMP DOWN
QA3:	CJNE R4,#03H,QA4
	MOV SPEED,VALUE_3
	CLR DIS1
	CLR DIS2
	SETB DIS3
	CLR DIS4
	CALL DISP 
	AJMP DOWN
QA4:	CJNE R4,#04H,QA5
	MOV SPEED,VALUE_4
	CLR DIS1
	CLR DIS2
	CLR DIS3
	SETB DIS4
	CALL DISP 
	AJMP DOWN
QA5:	MOV COUNT,#01H
	MOV R4,COUNT
	AJMP QA1
DOWN:	
	MOV TL0,#0FFH
	MOV TH0,#0F0H
	POP    ACC
   POP    PSW
	RETI
;**********************************************************	
;**********************************************************
DELAY:
		MOV R1,#0FFH
REP2:	MOV R2,#0FFH
REP1:	NOP
	DJNZ R2,REP1
	DJNZ R1,REP2
	RET
  END

⌨️ 快捷键说明

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