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

📄 h2_3.asm

📁 这是光电编码器的汇编程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:

$INCLUDE(H2_DEF.ASM)

;*****************************************************************************************
;START AND INITIALIZE

          ORG	0000
          JMP	START

          ORG	0003H                       ;外部中断0
          RESTR

          ORG	000BH                       ;定时器0溢出
          JMP	T0_INT

          ORG	0013H                       ;外部中断1
          RESTR

          ORG	001BH                       ;定时器1溢出
          JMP	T1_INT

          ORG	0023H                       ;串行口
          JMP     SP_INT

          ORG	002BH                       ;定时器2溢出或T2EX端出现负调变
          RESTR

          ORG	050
   START: MOV	SP,#STACKTOP
          CLR	PSW.3
          CLR	PSW.4
      MAX7219	DISPTEST,#1
          CLR	BUZR
          MOV	A,#OUTMOD
          MOV	C,ACC.0
          MOV	OUTMOD_M,C
          JC	OM0
          CLR	OUT_P1
          CLR	OUT_P2
          CLR	OUT_SH
          CLR	OUT_JI
          JMP	OM1
     OM0: SETB	OUT_P1
          SETB	OUT_P2
          SETB	OUT_SH
          SETB	OUT_JI 
     OM1: CLR	LP1_BUZR_OK
          CLR	LP8_BUZR_OK
          MOV	P1,#0FFH
          MOV	P2,#0FFH
          CLR	SIGN
          CLR     SP_T_EN
          CLR     RCOM_EN
          CLR     RCOM_OK
          CLR     ALM_SH
          CLR     ALM_JI
          CLR	LED_SH
          CLR 	LED_JI
          CLR	LED_ALM_P1
          CLR	LED_ALM_P2
        
          CLR	ALM_P1
          CLR	ALM_P2
          CLR	ALMSODEN
          CLR	BUZR
          CLR	ZS_EN
          CLR     OK_X
          CLR     ZS_EN1
          SETB	SEQADJ_SW
          CLR	ADJBUF_PS_OK
          SETB	DESKTOP
          CLR     OK_Y
          CLR     HH1
          CLR     HH2
          CLR     HH3
          CLR	M1
          CLR	FS
          CLR	F1
          CLR	LP1
          CLR	LP2
          CLR	LP3
          CLR	LP4
          CLR	LP5
          CLR	F2
          CLR	PD
          CLR	DIRS
          CLR	LC
          CLR	L1
          CLR	L2
          CLR	L3
          CLR	L4
          CLR	L5
          CLR	L6
          CLR	L7
          CLR	L8
          CLR	L9
          CLR	L10
          CLR	L11
          CLR	L12
          CLR	L13
          CLR	L14
          CLR	L15
          CLR	CHPD
          CLR     ADDR
          CLR	PDSUCCESS
          CLR     PDSUCCESS1
          CLR     PD1
          CLR	ED
          CLR	ED_INT
          CLR	ED_OK
          CLR	ED_ESC
          CLR	DIGIT1
          CLR	DIGIT2
          CLR	DIGIT3
          CLR	DIGIT4
          CLR	F3
          CLR	F4
          CLR	DA_H
          CLR	DA_L
          CLR     HU
          CLR     HD
          CLR     HL
          MOV	TWINBIT1CNT,#TWINKLEINTVL1
          MOV	TWINBIT2CNT1,#TWINBIT2ON
          MOV	TWINBIT2CNT2,#TWINBIT2OFF
          MOV	TWINBIT3CNT1,#TWINBIT3ON
          MOV	TWINBIT3CNT2,#TWINBIT3OFF
          MOV	KMTCNT1,#KMT
          MOV	KMTCNT2,#20
          MOV	SHIFTDLYCNT,#SHIFTDLY*2
          MOV	LP1_BUZRCNT1,#LP1_BUZRTIM
          MOV	LP1_BUZRCNT2,#20
          MOV	LP8_BUZRCNT1,#LP8_BUZRTIM
          MOV	LP8_BUZRCNT2,#20
          MOV	VIEWLIM_REG,#1
          MOV	F1SEL_REG,#1
          MOV	F2SEL_REG,#1
          MOV	HEIGHT_H,#0
          MOV	HEIGHT_L,#0
          CALL	INT5045
          CALL	DISPSERV
          CALL	INT7219
          MOV     RCAP2H,#HIGH(-36)
          MOV     RCAP2L,#LOW(-36)
          SETB    RCLK
          SETB    TCLK
          SETB    TR2
          SETB    ES
          SETB    PS
          MOV     SCON,#50H
          MOV	TMOD,#11H
          SETB	PT1
          MOV	TH0,#HIGH(-SCANTIME)        ;DEFINE INTERVAL OF INTERRUPTION
          MOV	TL0,#LOW(-SCANTIME)
          SETB	TR0
          SETB    ET0
          MOV	TH1,#HIGH(-5*SCANTIME)      ;DEFINE INTERVAL OF INTERRUPTION
          MOV	TL1,#LOW(-5*SCANTIME)
          SETB	TR1
          SETB    ET1
          SETB 	EA
;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
    MAIN:  
          CALL	CYCSET7219
          CALL	KEYCTRL
          CALL	RST_WDOG
          CALL	ENCODER
          CALL	CMPHEIGHT
          CALL	DESKTOPDISP
          CALL	RST_WDOG
          CALL	HEIGHTMONITOR
          CALL	DACONV
          CALL    RST_WDOG
          CALL    COMMUNICATION
          CALL    ZEROSETDLY1
          CALL    CSET
          JMP	MAIN
;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM


;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

  T0_INT: PROTECT
          MOV	TH0,#HIGH(-SCANTIME)        ;DEFINE INTERVAL OF T0 INTERRUPTION
          MOV	TL0,#LOW(-SCANTIME)
          CALL	DISPSERV
          CALL	TWINK1
          CALL	TWINK2
          CALL	TWINK3
          CALL	ALARM
          CALL    ALARM1
          RESUME
          RETI

;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
T1_INT: PUSH	PSW
          MOV	TH1,#HIGH(-5*SCANTIME)      ;DEFINE INTERVAL OF T1 INTERRUPTION
          MOV	TL1,#LOW(-5*SCANTIME)
          CALL	KEYMONITOR
          CALL	SEQADJ
          CALL	ZEROSETDLY
          CALL	LP1_BUZR_DLY
          CALL	LP8_BUZR_DLY
          POP	PSW
          RETI
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
  SP_INT: PUSH	PSW
          PUSH	AR0
          PUSH	ACC
          CALL	RINT            
          POP	ACC
          POP	AR0
          POP	PSW
          RETI 

;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;COMMUNICATION

    RINT: JB	RI,RINT0
          RET
   RINT0: CLR	RI
          MOV	A,SBUF
          JB	RCOM_OK,RINT2
          JB	RCOM_EN,RINT3
   RINT1: CJNE	A,#'#',RINT2
          MOV	RDADR,#80H
          MOV	RDCNT,#4
          SETB	RCOM_EN
   RINT2: RET
   RINT3: MOV	R0,RDADR
          MOV	@R0,A
          DJNZ	RDCNT,RINT4
          CLR	RCOM_EN                     ;命令执行之前拒绝接收新命令 
          SETB	RCOM_OK
          RET         
   RINT4: INC	RDADR
          RET   

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

 COMMUNICATION: 
          JB	RCOM_OK,COMM0
          RET
 COMMOUT: CLR	RCOM_OK
          RET
   COMM0: MOV	DPTR,#ADDRSET_M
          CALL	BYTRD_VERIFY
          CJNE	A,#STOREMARK,COMMOUT 
          MOV	DPTR,#ADDRSET_ADR
          CALL	BYTRD_VERIFY
          MOV	R0,#80H
          MOV	AR1,@R0
          CJNE    A,AR1,COMMOUT
          INC	R0
          MOV	A,@R0         
          CJNE	A,#00,COMM1
          CALL	COMD00
          RET
   COMM1: CJNE	A,#01,COMM2
          CALL	COMD01
          RET	  	         
   COMM2: CJNE	A,#03,COMM3
          CALL	COMD03
          RET	  
   COMM3: CJNE	A,#05,COMM4
          CALL	COMD05
          RET
   COMM4: CJNE     A,#07,COMM12
          CALL     COMD07
          RET	  
  COMM12: JMP	COMMOUT	                       
          
;***************************************************************************************      
   COMD01: MOV	DPTR,#LP6_L              ;读高度上限U1  
          CALL	BYTRD_VERIFY
          MOV	R1,A
          MOV	DPTR,#LP6_H
          CALL	BYTRD_VERIFY
          MOV	R0,A
          MOV	R2,#0
          MOV	R3,AR0
          MOV	R4,AR1
          CALL	BCDBIN
          MOV	R0,#90H
          MOV	@R0,AR7
          INC	R0
          MOV	@R0,AR6
          CALL	TDATA
          RET                                              
;---------------------------------------------------------------------------------------         
  COMD00: MOV	R0,#90H
          MOV	A,HEIGHT_L             ;读高度  
          MOV	@R0,A
          MOV	A,HEIGHT_H
          INC	R0
          MOV	@R0,A
          CALL	TDATA
          RET                                  
          
;----------------------------------------------------------------------------------------  
  COMD03:
          MOV     DPTR,#LP7_L
          CALL    BYTRD_VERIFY
          MOV     R1,A
          MOV     DPTR,#LP7_H               ;读高度上限U2
          CALL    BYTRD_VERIFY
          MOV     R0,A
          MOV     R2,#0
          MOV     R3,AR0
          MOV     R4,AR1
          CALL    BCDBIN
          MOV     R0,#90H
          MOV	@R0,AR7
          INC	R0
          MOV	@R0,AR6
          CALL	TDATA
          RET                                  
  
;---------------------------------------------------------------------------------------  
  
  COMD05: MOV     DPTR,#LP8_L
          CALL    BYTRD_VERIFY
          MOV     R1,A
          MOV     DPTR,#LP8_H               ;读高度上限U3
          CALL    BYTRD_VERIFY
          MOV     R0,A
          MOV     R2,#0
          MOV     R3,AR0
          MOV     R4,AR1
          CALL    BCDBIN
          MOV     R0,#90H
          MOV	@R0,AR7
          INC	R0
          MOV	@R0,AR6
          CALL	TDATA
          RET                   
;---------------------------------------------------------------------------------------  
  COMD07: MOV     DPTR,#LP1_L
          CALL    BYTRD_VERIFY
          MOV     R1,A
          MOV     DPTR,#LP1_H               ;读高度下限L1
          CALL    BYTRD_VERIFY
          MOV     R0,A
          MOV     R2,#0
          MOV     R3,AR0
          MOV     R4,AR1
          CALL    BCDBIN
          MOV     R0,#90H
          MOV	 @R0,AR7
          INC	 R0
          MOV	 @R0,AR6
          CALL	 TDATA
          RET
          
;*******************************************************************************************    
          
   TDATA: SETB	SP_T_EN
          MOV	R0,#90H
          MOV	SBUF,@R0
          JNB	TI,$
          CLR	TI
          INC	R0
          MOV	SBUF,@R0
          JNB	TI,$
          CLR	TI
          CLR	SP_T_EN
          CLR	RCOM_OK
   TDOUT: RET    

;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

  
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

   DACONV: CALL	CMPDA
           CALL TLC5615
           RET
    
    CMPDA: MOV	DPTR,#DA_L_M
           CALL	BYTRD_VERIFY
           CJNE	A,#STOREMARK,CMPDA0
           MOV	DPTR,#DA_H_M
           CALL	BYTRD_VERIFY
           CJNE	A,#STOREMARK,CMPDA0        
           JMP	CMPDA2
   CMPDA0: MOV	R6,#0      
           MOV	R7,#0
           RET
   CMPDA1: MOV	R6,#HIGH(1023)
           MOV	R7,#LOW(1023)
           RET        
   CMPDA2: MOV	DPTR,#DA_L_H
           CALL	BYTRD_VERIFY
           MOV	R0,A
           MOV	DPTR,#DA_L_L
           CALL	BYTRD_VERIFY
           MOV	R2,#0
           MOV	R3,AR0
           MOV	R4,A           
           CALL	BCDBIN
           MOV	R0,AR6
           MOV	R1,AR7
           CLR	C
           MOV	A,HEIGHT_L
           SUBB	A,R1
           MOV	A,HEIGHT_H
           SUBB	A,R0
           JC	CMPDA0
           MOV	DPTR,#DA_H_H
           CALL	BYTRD_VERIFY
           MOV	R6,A
           MOV	DPTR,#DA_H_L
           CALL	BYTRD_VERIFY
           MOV	R2,#0
           MOV	R3,AR6
           MOV	R4,A           
           CALL	BCDBIN
           CLR	C
           MOV	A,R7
           SUBB	A,HEIGHT_L
           MOV	A,R6
           SUBB	A,HEIGHT_H
           JC	CMPDA1
           MOV	A,R7
           SUBB	A,R1
           MOV	R7,A
           MOV	A,R6
           SUBB	A,R0
           MOV	R6,A
           JC	CMPDA0
           MOV	A,HEIGHT_L
           SUBB	A,R1
           MOV	R5,A
           MOV	A,HEIGHT_H
           SUBB	A,R0
           MOV	R4,A
           MOV	R2,#HIGH(1023)
           MOV	R3,#LOW(1023)
           CALL	SCALE
           MOV	R6,AR4
           MOV	R7,AR5
           RET

  TLC5615: CLR	ET0
           CLR 	SCK
           CLR 	CS5615
           MOV	R0,#2
           CLR	C
  T5615_0: MOV	A,R7
           RLC	A
           MOV	R7,A
           MOV	A,R6
           RLC	A
           MOV	R6,A
           DJNZ	R0,T5615_0
           SWAP	A
           MOV	R0,#4
  T5615_1: RLC	A
           MOV	SI,C
           SETB	SCK
           CLR	SCK
           DJNZ	R0,T5615_1
           MOV	R0,#8
           MOV	A,R7
  T5615_2: RLC	A
           MOV	SI,C
           SETB	SCK
           CLR	SCK
           DJNZ	R0,T5615_2
           SETB	CS5615
           SETB	ET0
           RET

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;COMPUTE HEIGHT

 CMPHEIGHT:
          MOV	DPTR,#Z0_M
          CALL	BYTRD_VERIFY
          CJNE	A,#STOREMARK,CP0
          MOV	DPTR,#Z1_M
          CALL	BYTRD_VERIFY
          CJNE	A,#STOREMARK,CP0
          JMP	CP1
     CP0: MOV	HEIGHT_H,#0
          MOV	HEIGHT_L,#0
          RET
     CP1: MOV	DPTR,#Z0_1
          CALL	BYTRD_VERIFY
          MOV	R0,A
          MOV	DPTR,#Z0_2
          CALL	BYTRD_VERIFY
          MOV	R1,A
          MOV	DPTR,#Z0_3
          CALL	BYTRD_VERIFY
          MOV	R6,A
          MOV	DPTR,#Z0_4
          CALL	BYTRD_VERIFY
          MOV	R7,A                        ;R0R1R6R7=Z0
          
   CP1_0: CLR	C
          MOV	A,ENCODER_BUF4
          SUBB	A,R7
          MOV	R5,A
          MOV	A,ENCODER_BUF3
          SUBB	A,R6
          MOV	R4,A
          MOV	A,ENCODER_BUF2
          SUBB	A,R1
          MOV	R3,A
          MOV	A,ENCODER_BUF1
          SUBB	A,R0
          MOV	R2,A
          JNC	CP2
          SETB	SIGN
          MOV	DPTR,#A1_L                   

⌨️ 快捷键说明

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