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

📄 m_master.asm

📁 合泰单片机汇编程序,摩托车防盗器主机程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	 		NOP				;NOP				           
        	JMP		$+1		;GOTO      $+1
         	JMP		$+1		;GOTO      $+1
         	JMP		$+1		;GOTO      $+1
         	SNZ		[CNT1].3	;BTFSS	  CNT1,3		
	     	JMP		RCV3	;GOTO      RCV3  		
	 		JMP		RMT_0	;GOTO	  RMT_0 	       ; 计时指令 Total = 32
RCV6:
	 		CLR		C		;CLRC			       ; CNT1:CNT0 / 16  --> 1/2LCK
	 		RRC		[CNT1]	;RRF       CNT1,F			    
	 		RRC		[CNT0]	;RRF       CNT0,F			    
	 		CLR		C		;CLRC				           
	 		RRC		[CNT1]	;RRF       CNT1,F			    
	 		RRC		[CNT0]	;RRF       CNT0,F			    
	 		CLR		C		;CLRC				            
	 		RRC		[CNT1]	;RRF       CNT1,F			    
	 		RRC		[CNT0]	;RRF       CNT0,F  
			CLR		C		;CLRC
	 		RRC		[CNT1]	;RRF		  CNT1,F
			RRC		[CNT0]	;RRF		  CNT0,F                        
					
	 		MOV		A,[CNT0]	;MOVLW     MIN/.8	       ; 判断同步头合法性(MIN为同步头最小时间)
	 		SUB		A,30d;MIN/8D	;SUBWF     CNT0,W	
	 		SNZ		C		;BTFSS     STATUS,C	       
	     	JMP		RMT_0	;GOTO      RMT_0             ; 小于MIN, 错误


; *************** 有效同步头接收 *********************
RCV7:
	 		MOV		A,24d;NBITS	;MOVLW     NBITS               ; 位接收计数器
	 		MOV		[CNT1],A	;MOVWF     CNT1			       
	 		MOV		A,[CNT0]	;MOVF      CNT0,W			
	 		MOV		[CNT2],A	;MOVWF     CNT2                ; CNT2 = CNT0
	 		MOV		A,[CNT2]	;MOVLW     6H			 
	 		SUB		A,6H	;SUBWF     CNT2,F			  
	 		JMP		DL1		;GOTO      DL1                 ; 补偿第一位

RCV8:					
	 		MOV		A,4H	;MOVLW	   4H	               ; 最大等待4个LCK
	 		MOV		[TMP_CNT],A	;MOVWF	   TMP_CNT	       
RCV10A:
	 		MOV		A,[CNT0]	;MOVF	   CNT0,W              
	 		MOV		[CNT2],A	;MOVWF      CNT2		       
RCV10B:      
	 		SZ		RF	;BTFSC      RFIN                ; 等待高电平?
	     	JMP		RCV11	;GOTO       RCV11           
	 		SDZ		[CNT2]	;DECFSZ     CNT2,1              
	     	JMP		RCV10B	;GOTO       RCV10B          
	 		SDZ		[TMP_CNT]	;DECFSZ	   TMP_CNT,1	       
	     	JMP		RCV10A	;GOTO       RCV10A          
	 		JMP		RMT01	;GOTO       RMT01               ; 时间溢出,错误
RCV11:
	 		MOV		A,[CNT0]	;MOVLW	   3H	               ; 补偿时间   #####332223333;;;;;;;;;;;;;;;;;;
	 		SUB		A,3H	;SUBWF	   CNT0,W
	 		MOV		[CNT2],A	;MOVWF	   CNT2	

DL1:
	 		NOP				;CLRWDT                        ; 清看门狗
	 		SDZ		[CNT2]	;DECFSZ     CNT2,1               
	     	JMP		DL1		;GOTO       DL1             ; CNT0 * 4 us
SAMPLE1:
	 		SNZ		RF	;BTFSS      RFIN                ; 2LCK处为高电平?                                   
	     	JMP		RMT01	;GOTO       RMT01           ; 否,错误数据                                
	 		MOV		A,[CNT0]	;MOVF       CNT0,W              ; 调整时间        #####3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	 		MOV		[CNT2],A	;MOVWF      CNT2                ; 
	 		DEC		[CNT2]	;DECF       CNT2,F		
	 		JMP		$+1		;GOTO	   $+1			
	 		NOP				;NOP				
DL2:
		CLR	WDT				;CLRWDT                        ; 清看门狗
	 		JMP		$+1		;GOTO	   $+1		       ; 消耗2uS
	 		JMP		$+1		;GOTO	   $+1		       ; 消耗2uS
	 		JMP		$+1		;GOTO	   $+1		       ; 消耗2uS
	 		JMP		$+1		;GOTO	   $+1		       ; 消耗2uS
	 		SDZ		[CNT2]	;DECFSZ     CNT2,1
	     	JMP		DL2		;GOTO       DL2             ; CNT0 * 12
SAMPLE2:
	 		CLR		[FLAGS].BITIN	;BCF        FLAG1,BITIN         ; 读入数据(8LCK处)                                
	 		SZ		RF		;BTFSC      RFIN                ; 
	     	SET		[FLAGS].BITIN	;BSF        FLAG1,BITIN     ; 
         	RLC		[DATA3]	;RLF        CSR0,F              ; 左移                                     
         	RLC		[DATA2]	;RLF        CSR1,F
         	RLC		[DATA1]	;RLF        CSR2,F
	 		CLR		[DATA3].0	;BCF	       CSR0,0			   
	 		SZ		[FLAGS].BITIN	;BTFSC      FLAG1,BITIN		   
	     	SET		[DATA3].0	;BSF        CSR0,0
  
	 		MOV		A,[CNT0]	;MOVF       CNT0,W              ; 调整时间
	 		MOV		[CNT2],A	;MOVWF      CNT2                
	 		SUB		A,3H		;MOVLW	   3			
	 		MOV		[CNT2],A	;SUBWF	   CNT2,1		
			CLR	WDT				;NOP				

DL3:
         	JMP		$+1		;GOTO	   $+1		       ; 消耗2uS
	 		JMP		$+1		;GOTO	   $+1		       ; 消耗2uS
	 		JMP		$+1		;GOTO	   $+1		       ; 消耗2uS
	 		JMP		$+1		;GOTO	   $+1		       ; 消耗2uS
	 		NOP				;CLRWDT                        ; 清除看门狗
	 		SDZ		[CNT2]	;DECFSZ     CNT2,1               
	     	JMP		DL3		;GOTO       DL3             ; CNT0 * 12 us 
SAMPLE3:
	 		SZ		RF	;BTFSC      RFIN                ; 14LCK输入低电平? <<6>> 
	     	JMP		RMT0	;GOTO       RMT0            ; [0] NO--RECEIVE ERROR
	 						;CALL       TST_TMR0_PAGE0            ; [11] CHECK RTCC
			JMP		$+1
			JMP		$+1
			JMP		$+1
			JMP		$+1
			JMP		$+1
			NOP
	 		SDZ		[CNT1]	;DECFSZ    CNT1,F              ; 最后一位?
	     	JMP		RCV8	;GOTO      RCV8            ; 否,继续
RMT1:	
         	;set   pb.1;打开喇叭;BSF       LED                 ; 表示有效数据
        	CLR		C		; CLRC			       
 	 		RET				;RETLW     0                   ; RETURN 
         
RMT_0:
RMT0:	
RMT01:
	 		SET		C		;BSF	   STATUS,C	       ; 非法数据		
            RET		;      
;======================================================================


;====================================================================
;      E2ROM段
;====================================================================

;----------- 防止复位清除使用的遥控器码,不能正确的回传----
WriteRemote:

   	mov 	a,20h
	mov	[dataaddr],a
	mov 	a,[Tx_Data1]
	mov	[tempdata2],a
	call WriteOneByte
   	mov 	a,21h
	mov	[dataaddr],a
	mov 	a,[Tx_Data2]
	mov	[tempdata2],a
	call WriteOneByte
   	mov 	a,22h
	mov	[dataaddr],a
	mov 	a,[Tx_Data3]
	mov	[tempdata2],a
	call WriteOneByte

    ret
ReadRemote:
	mov 	a,20h
       mov	[dataaddr],a     	
	call 	ReadOneByte
	mov 	a,[read_out]
	mov	    [Tx_Data1],a
	mov 	a,21h
       mov	[dataaddr],a     	
	call 	ReadOneByte
	mov 	a,[read_out]
	mov	    [Tx_Data2],a
	mov 	a,22h
       mov	[dataaddr],a     	
	call 	ReadOneByte
	mov 	a,[read_out]
	mov	    [Tx_Data3],a
  
    ret
 ;--------------------------------------------------------
   
;----------------------------------------------
WRITEBYTE1:
    MOV     A,1FH                 ;断电记忆
    MOV     [DATAADDR],A
    MOV     A,MEMORY_RET
    MOV     [TEMPDATA2],A
    CALL    WRITEONEBYTE
    RET
READBYTE1:
	mov 	a,1fh
       mov	[dataaddr],a     	
	call 	ReadOneByte
	mov 	a,[read_out]
	mov	 MEMORY_RET,a

    RET
;--------------------------------------------

WRITEBYTE:
	mov 	a,16h
	mov	[dataaddr],a
	mov 	a,[CHKData1]
	mov	[tempdata2],a
	call WriteOneByte
	mov 	a,17h
	mov	[dataaddr],a
	mov 	a,[CHKData2]
	mov	[tempdata2],a
	call WriteOneByte
	mov 	a,18h
       mov	[dataaddr],a
	mov 	a,[CHKData3]
       mov	[tempdata2],a 
	call WriteOneByte
	mov 	a,19h
       mov	[dataaddr],a
	mov 	a,[CHKData4]
       mov	[tempdata2],a
	call WriteOneByte
	mov 	a,1ah
       mov	[dataaddr],a
	mov 	a,[CHKData5]
       mov	[tempdata2],a
	call WriteOneByte
	mov 	a,1bh
       mov	[dataaddr],a
	mov 	a,[CHKData6]
       mov	[tempdata2],a
	call WriteOneByte
	mov 	a,1ch
       mov	[dataaddr],a
	mov 	a,[CentreConlTime]
       mov	[tempdata2],a
	call WriteOneByte

;	mov 	a,1dh		;;;;;;;;;;;;;;;;
;       mov	[dataaddr],a	;;;;;;;;;;;;;;;;
;	mov 	a,[flag7]		;;;;;;;;;;;;;;;;	
;      mov	[tempdata2],a;;;;;;;;;;;;;;;
;	call WriteOneByte	;;;;;;;;;;;;;;;;

	ret

READBYTE:	 
	mov 	a,16h
       mov	[dataaddr],a     	
	call 	ReadOneByte
	mov 	a,[read_out]
	mov	[CHKData1],a

	mov 	a,17h
       mov	[dataaddr],a     	
	call 	ReadOneByte
	mov 	a,[read_out]
	mov	[CHKData2],a

	mov 	a,18h
       mov	[dataaddr],a     	
	call 	ReadOneByte
	mov 	a,[read_out]
	mov	[CHKData3],a

	mov 	a,19h
       mov	[dataaddr],a     	
	call 	ReadOneByte
	mov 	a,[read_out]
	mov	[CHKData4],a

	mov 	a,1ah
       mov	[dataaddr],a     	
	call 	ReadOneByte
	mov 	a,[read_out]
	mov	[CHKData5],a

	mov 	a,1bh
       mov	[dataaddr],a     	
	call 	ReadOneByte
	mov 	a,[read_out]
	mov	[CHKData6],a

	mov 	a,1ch
       mov	[dataaddr],a     	
	call 	ReadOneByte
	mov 	a,[read_out]
	mov	[CentreConlTime],a

;	mov 	a,1dh			;;;;;;;;;;;;;;;;;;;
 ;      mov	[dataaddr],a     	;;;;;;;;;;;;;;;;;;;
;	call 	ReadOneByte		;;;;;;;;;;;;;;;;;;;
;	mov 	a,[read_out]		;;;;;;;;;;;;;;;;;;;
;	mov	[flag7],a			;;;;;;;;;;;;;;;;;;;

	ret       	
;====================================================================
;====================================================================        	      
WriteOneByte:               
    CLR  WDT        
	clr scl
	clr sda
ht24_write_byte:	
	clr	sda_c
	clr	scl_c           	
	set	sda
	set	scl
	clr	sda                   	;起始信号
	clr	scl       
    	
	set	sda                   	;1
	set	scl
	clr	scl           	
	clr	sda                   	;0
	set	scl
	clr	scl          	
	set	sda                   	;1
	set	scl
	clr	scl	          	
	clr	sda                   	;0
	set	scl
	clr	scl           	
	clr	sda                   	;a2,a1,a0=000
	set	scl
	clr	scl          	
	set	scl
	clr	scl	          	
	set	scl
	clr	scl          	
	set	scl                   	;写0,给出写模式
	clr	scl
           	
	set	sda_c
	set	scl	
wait_ack0:  	
	sz 	sda                   	;等待应答信号
	jmp	wait_ack0
	clr	scl
	clr	sda_c
;====================================================================

	mov	a,08h                ;写E2ROM中的地址	
	mov	[Temp3],a
Lpwrite0:
	clr	sda
	sz 	[dataaddr].7
	set	sda
	set	scl
	clr	scl
	   	
	rl 	[dataaddr]
	sdz	[Temp3]
	jmp	Lpwrite0
	set	sda_c
	set	scl	
wait_ack1:
	sz 	sda                   	;等待应答信号
	jmp	wait_ack1
	clr	scl
	clr	sda_c

;====================================================================
	mov	a,08h		;写数据
	mov	[Temp3],a
Lpwrite1:   	
	clr	sda
	sz 	[tempdata2].7
	set	sda
	set	scl
	clr	scl
	rl 	[tempdata2]
	sdz	[Temp3]
	jmp	Lpwrite1

	set	scl
	clr	scl           	
	clr	sda
	set	scl
	set	sda		;停止信号
 CLR    SCL;;;;;;;???????退出时,拉低,防止电流过高,一直维持高,耗电大,不能拉低
	         	
	mov	a,30h
	MOV [COUNT_IIC0],A;mov	[count0],a
	mov	a,05h
	MOV [COUNT_IIC1],A;mov	[count1],a
LpDly1:    	
    CLR  WDT
	SDZ [COUNT_IIC0];sdz	[count0]
	jmp	LpDly1
	SDZ [COUNT_IIC1];sdz	[count1]
	jmp	LpDly1 

	ret		

;====================================================================

;====================================================================
ReadOneByte:
    CLR   WDT
	clr scl
	clr sda 
ht24_read_byte:
	do_read:
	clr	[read_out]

	clr	sda_c		
	clr	scl_c
           	
	set	sda
	set	scl														
	clr	sda			;起始信号          	
	clr	scl
	set	sda			;1
	set	scl
	clr	scl          	
	clr	sda			;0
	set	scl
	clr	scl           	
	set	sda			;1
	set	scl
	clr	scl          	
	clr	sda			;0
	set	scl
	clr	scl
	clr	sda
	set	scl			;a0,a1,a2=0
	clr	scl          	
	set	scl			;0
	clr	scl           	
	set	scl			;0
	clr	scl
           	
	clr	sda			;写模式,写地址
	set	scl
	clr	scl
           	
	set	sda_c
	set	scl
           	
wait_ack2:      	
	sz 	sda
	jmp	wait_ack2
	clr	scl	
;====================================================================	
	mov	a,08h
	mov	[Temp3],a
	clr	sda_c
Lpread0:
	clr	sda
	sz 	[dataaddr].7
	set	sda
	set	scl
           	
	clr	scl
	rl 	[dataaddr]
	sdz	[Temp3]
	jmp	Lpread0

	set	sda_c	
	set	scl           	
wait_ack3:       	
	sz 	sda
	jmp	wait_ack3
	clr	scl
	clr	sda_c

;====================================================================
read_data:
	set	sda
	set	scl
	clr	sda			;start bit
	clr	scl
           	
	set	sda			;1
	set	scl
	clr	scl           	
	clr	sda			;0
	set	scl
	clr	scl           	
	set	sda			;1
	set	scl
	clr	scl	          	
	clr	sda			;0
	set	scl
	clr	scl
	clr	sda			;a2,a1,a0
	set	scl
	clr	scl          	
	set	scl
	clr	scl          	
	set	scl
	clr	scl          	
	set	sda			;读模式
	set	scl
	clr	scl
           	
	set	sda_c
	;set	scl
wait_ack4:
	sz	sda
	jmp     wait_ack4 ;wait_ack2   改的.gao
	;clr	scl
	set	scl			;down_edge data out

	mov	a,08h
	mov	[Temp3],a
	set	sda_c
Lp_readout:
	set	scl
	NOP;call 	del
    NOP
    NOP
	clr	scl 	
	NOP;call 	del
    NOP
    NOP
    rl	[read_out]
	clr	[read_out].0
	sz	sda
	set	[read_out].0
	sdz	[Temp3]
	jmp     Lp_readout
	
	clr	sda_c			;for stop
	clr	scl
	set	scl
	set	sda
	clr	sda
	set	sda			;stop end
 CLR    SCL;;;;;;;???????退出时,拉低,防止电流过高,一直维持高,耗电大,不能拉低
 
	ret		
;====================================================================
;====================================================================  
;del:                   ;for delay
;	nop
;	nop
;	nop
;	ret
 END

⌨️ 快捷键说明

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