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

📄 speedo1.asm

📁 speedometer cum odometer with asm and hex files
💻 ASM
📖 第 1 页 / 共 2 页
字号:
          SETB RS ;RS=1 DATA
          CLR RW ;RW=0 FOR WRITE
          MOV LCD,A ;MOVE ACC.DATA TO PORT
          CLR EN
          NOP
          LCALL READY
          RET
;****************************LCD SUBROUTINES****************************************

   CMD:      SETB EN ;H->L PULSE ON E
             CLR RS  ;RS=0 FOR COMMAND
             CLR RW ;RW=0 FOR WRITE
             MOV LCD,A ;MOVE ACC. DATA TO PORT
             CLR EN
             NOP
             LCALL READY
             RET
 ;****************************LCD SUBROUTINES****************************************
        
INIT:           MOV A,#030H   ;INITIALIZE LCD BY SENDING 30H THREE TIMES. 
                LCALL  CMD
                ACALL DDELAY  ;INITIAL DELAY 4.1MSEC
                MOV A,#030H   
                LCALL  CMD
                ACALL DDELAY  
                MOV A,#030H   
                LCALL  CMD
                ACALL DDELAY 
                
                MOV A,#038H   ; INITIALIZE, 2-LINES, 5X7 MATRIX.
                LCALL  CMD
                ACALL DDELAY 
                
                MOV A,#0CH    ;  INVISIBLE CURSOR ON;
                LCALL  CMD
                MOV A,#01H    ; CLEAR LCD SCREEN
                LCALL  CMD
                MOV A,#06H    ; SHIFT CURSOR RIGHT
                LCALL  CMD
                
                MOV A,#80H       ; LINE 1
                LCALL CMD         
               
                MOV DPTR,#MSG_1
        LINE1:  CLR A
                MOVC A,@A+DPTR
                JZ NEXTLINE
                ACALL DAT
                INC DPTR
                SJMP LINE1
     
      NEXTLINE: MOV A,#0C0H       ; LINE 2 
                LCALL CMD        
               
                MOV DPTR,#MSG_2
        LINE11: CLR A
                MOVC A,@A+DPTR
                JZ DONE
                ACALL DAT
                INC DPTR
                SJMP LINE11
                               
                
         DONE:  RET
                
;****************************LCD SUBROUTINES****************************************
               
CLEAR:  MOV A,#01H
        LCALL  CMD
        RET

;****************************LCD SUBROUTINES****************************************

DDELAY:  MOV R5,#41D           ; 4.1 mS DELAY
    QT2: MOV R6,#50D
    QT1: DJNZ R6,QT1
         DJNZ R5,QT2                 
         RET

;***********************************************************************
;                I2C - SERIAL EEPROM ROUTINES
;***********************************************************************
;**********************************************************	
; THIS SUB READS ONE BYTE OF DATA FROM THE EEPROM
;**********************************************************

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 EEPROM
; *********************************************************

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
; *********************************************************************
;  SUB READS FROM THE EEPROM AND WRITES IT TO THE SCRATCHPAD MEMORY
; *********************************************************************
READEEPROM:
         MOV         R1,#POINT      ;  START FROM POINT STORAGE LOCATION
         MOV         BYTECNT,#00H
         CLR         LASTREAD
         LCALL       SEND_START
         MOV         A,#EEPROMW      
         LCALL       SEND_BYTE
         MOV         A,#00H         ; POINT TO 00H ADDRESS OF EEPROM
         LCALL       SEND_BYTE
         LCALL       SEND_STOP
         
         LCALL       SEND_START
         MOV        A,#EEPROMR      ; READ COMMAND
         LCALL       SEND_BYTE

READ_LOOP:
         MOV         A,BYTECNT
         CJNE        A,#06H,NOT_LAST  ;  CHECK FOR THE LAST BYTE
         SETB        LASTREAD

NOT_LAST:
         LCALL       READ_BYTE
         MOV         @R1,A
         MOV         A,BYTECNT
         CJNE        A,#00H,NOT_FIRST
         MOV         A,@R1
         MOV         @R1,A
NOT_FIRST:
         INC         R1              ;** INC RAM LOCATION **
         INC         BYTECNT
         MOV         A,BYTECNT
         CJNE        A,#07H,READ_LOOP  ; CHECK FOR 7th BYTE,IF 7th BYTE THEN STOP TRANSFER
         LCALL       SEND_STOP
         RET
;****************************************************************************************************************************    
	
SEND2EEPROM:  
		
	LCALL SEND_START 		; SEND 2WIRE START CONDITION
	MOV A,#EEPROMW 			; LOAD EEPROM WRITE COMMAND
	LCALL SEND_BYTE 		; SEND WRITE COMMAND
	
	MOV A,#00H                      ; SET EEPROM DATA POINTER TO 00H (ADDRESS LOCATION)
	LCALL SEND_BYTE
	
	MOV A,POINT                     ; Send POINT
	LCALL SEND_BYTE
	
	MOV A,KM			; Send KM
	LCALL SEND_BYTE 		 
	
	MOV A,TKM			; Send TKM
	LCALL SEND_BYTE 
	
	MOV A,HKM			; Send HKM
	LCALL SEND_BYTE 		
	
	MOV A,KKM 	                ; Send KKM
	LCALL SEND_BYTE			
	
	MOV A,TKKM			; Send TKM
	LCALL SEND_BYTE
	
		
	LCALL SEND_STOP 		; SEND 2WIRE STOP CONDITION
	
	RET
	

	
;************************************************************************************
	
PWR_DELAY:                       ; 15 mSec DELAY FOR LCD TO INTIALIZE AFTER POWER-ON
          MOV R4,#30D
H2:       MOV R3,#250D
H1:       DJNZ R3,H1
          DJNZ R4,H2
          RET



;************************************************************************************

 ORG 0350H
 
MSG_1: DB 'Kms:',00H
MSG_2: DB 'Speed-Kmph:',00H


FIRST: 
DB 0H,0H,1H,2H,2H,3H,4H,4H,5H,6H,6H,7H,8H,8H,9H,0H

SECOND:
DB 0H,6H,3H,0H,7H,4H,0H,7H,4H,1H,8H,4H,1H,8H,5H,0H

THIRD:
DB 0H,8H,6H,4H,2H,0H,8H,6H,4H,2H,0H,8H,6H,4H,2H,0H

END
  

⌨️ 快捷键说明

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