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

📄 intsub.asm

📁 一个功能完善的大型制冷设备控制程序
💻 ASM
字号:
          INCLUDE "SYSDEF.INC"        ;-------
	   ORG   0
STARTUP:   LJMP  START    ; %%
	   ORG   03H
           RETI
;-	   PUSH  ACC
;-         LJMP  uEXINT0    ; EXTERN INTERRUPT-0 FOR USER DEFINE 
	   ORG   0BH
	   PUSH  ACC
	   LJMP  TIMER_0    ; THE TIMER 0 INTERRUPT INTER 
	   ORG   13H
           RETI
;-	   PUSH  ACC
;-         LJMP  uEXINT1    ; EXTERN INTERRUPT-0 FOR USER DEFINE 
	   ORG   1BH
           RETI
;-         PUSH  ACC
;-         LJMP  uTIMER     ; THE TIMER 1 INTERRUPT FOR USER VDEFINE
	   ORG   23H
	   PUSH  ACC
	   LJMP  COMM     ; THE SEIRAL PORT INTERRUPT INTER
	   ORG   2BH
	   LJMP  I2CINT
	   ORG   33H
	   RETI
	   ;PUSH  ACC
	   ;MOV   A, #0 
	   ;LJMP  T2CGET
	   ORG   3BH
	   RETI
	   ;PUSH  ACC
	   ;MOV   A, #1 
	   ;LJMP  T2CGET
	   ORG   43H
	   RETI
	   ;PUSH  ACC
	   ;MOV   A, #2
	   ;LJMP  T2CGET
	   ORG   4BH
	   RETI
	   ;PUSH  ACC
	   ;MOV   A, #3
	   ;LJMP  T2CGET
	   ORG   53H
	   ;RETI
	   PUSH  ACC
	   LJMP  AD_INT   ; THE A/D CONVERT PORT INTERRUPT INTER
	   ORG   5BH
	   RETI
	   ORG   63H
	   RETI
	   ORG   6BH
	   RETI
	   ORG   73H
	   RETI
	   ;PUSH  ACC
	   ;LJMP  T2OVER
	   
	   ORG   78H
;###########################################################         
; FILE: INTSUB.ASM 
; NAME: AD_INT - THE A/D CONVERT INTERRUPT SERVICE
; PARMENTERS:  NONE
; RETURN: bISCONVT
;###########################################################
AD_INT:    CLR   B_EN_INT      ; PROVENT THE TIMER INT RE_ENTER
	   PUSH  PSW
	   MOV   A, rADCTRL       ;    GET ADCI BIT,
	   JNB   BA_ADCI, PassINT ;  CHECK THAT THE CONVERTER IS OVER?  
	   CLR   BA_ADCI          ; CLEAR THE CONVERTER OVER INT. ADCI BIT.
	   MOV   rADCTRL, A
	   JNB   bISCONVT, PassINT
	   SETB  bINCONVT
	   CLR   bISCONVT
PassINT:   CLR   B_EADINT
	   POP   PSW
	   POP   ACC
	   SETB  B_EN_INT   ;OPEN ALL INTERRUPT
	   RETI

;###########################################################         
; FILE: I2CSUB.ASM 
; NAME: I2CINT - THE I2C INTERRUPT ENTER 
; USING: SELRG1 - R0 - POINT TO THE BUFFER   R1 - USE IN TIMER0, T2CGET
;                 R2 - SAVE THE STATION 
;                 R3 - THE FLAG FOR OVER COMMUNCITION
;                 R5 - TEMPARE USE
;                 R6 - THE NUMBER OF BYTE (DEC COUNT) R7 - USE IN TIMER0
;###########################################################
	   PROC  I2CINT 
I2CINT:    PUSH  PSW
	   PUSH  rI2CSTAT         ; SAVE I2C STATUS REGISTER (0D9H)
	   MOV   PSW, #cSELRG1    ; SELECT SECOND GROUP REGISTER
           MOV   R5,  A
           MOV   A, #cI2C_ADDR_H  ;
	   PUSH  ACC              ; SAVE I2C PROCESS HIGH ADDRESS
	   MOV   A,   R5
           RET

	   ORG   0100H
SI00:      MOV   rI2CCTRL, #cI2C_RESET   ; RESET I2C BUS WORKING ENABLE
	   POP   PSW
	   RETI

	   ORG   0108H
SI08:      MOV   rI2CDATA, R2
	   MOV   rI2CCTRL, #cI2C_RESET   ; RESET I2C BUS WORKING ENABLE
	   POP   PSW
	   RETI
	 
	   ORG   110H
SI10:      MOV   rI2CDATA, R2
	   MOV   rI2CCTRL, #cI2C_RESET   ; RESET I2C BUS WORKING ENABLE
	   POP   PSW
	   RETI

	   ORG   118H
SI18:      PUSH  ACC
	   MOV   A, #cI2C_STOP           ; RESET I2C BUS STOP MODE 
	   AJMP  SendData
	   
	   ORG   120H
SI20:      MOV   rI2CCTRL, #cI2C_STOP    ; RESET I2C BUS STOP MODE 
	   MOV   R3, #0FFH
	   POP   PSW
	   RETI

	   ORG   128H
SI28:      PUSH  ACC
	   MOV   A, #cI2C_STOP           ; RESET I2C BUS STOP MODE 
	   AJMP SendData

	   ORG   130H
SI30:      MOV   rI2CCTRL, #cI2C_STOP     ; RESET I2C BUS STOP MODE 
	   MOV   R3, #0FFH
	   POP   PSW
	   RETI

	   ORG   138H
SI38:      MOV   rI2CCTRL, #cI2C_STOP     ; RESET I2C BUS RESTART MODE(I2CRESTA)
	   mov   R3, #0FFH
	   POP   PSW
	   RETI

	   ORG   140H
SI40:      MOV   rI2CCTRL, #cI2C_RESET
	   POP   PSW
	   RETI

	   ORG   148H
SI48:      MOV   rI2CCTRL, #cI2C_STOP     ; RESET I2C BUS STOP MODE 
	   MOV   R3, #0FFH
	   POP   PSW
	   RETI

	   ORG   150H
SI50:      PUSH  ACC
	   MOV   A, rI2CDATA
	   MOV   @R0, A
	   AJMP  Receive

	   ORG   158H
SI58:      MOV   @R0, rI2CDATA
	   MOV   R3, #0
	   AJMP  SetStop           

	   ORG   160H
SI60:      MOV   rI2CCTRL, #cI2C_STOP     ; RESET I2C BUS STOP MODE 
	   MOV   R3, #0FFH
	   POP   PSW
	   RETI
	   
	   ORG   168H
SI68:      MOV   rI2CCTRL, #cI2C_STOP     ; RESET I2C BUS STOP MODE 
	   MOV   R3, #0FFH
	   POP   PSW
	   RETI
	   ORG   170H
	   JMP   TT
	   ORG   178H
	   JMP   TT
	   ORG   180H
	   JMP   TT
	   ORG   188H
	   JMP   TT
	   ORG   190H
	   JMP   TT
	   ORG   198H
	   JMP   TT
	   JMP   TT
	   NOP
	   NOP
	   ORG   1A0H 
TT:        AJMP  SetStop

SendData:  CJNE  R6, #0, NextData
	   MOV   R3, #0
	   AJMP  NextSet
NextData:  MOV   A, @R0
	   MOV   rI2CDATA, A        ; GET ONE BYTE TO DATA REGISTER
	   INC   R0
	   DEC   R6
	   MOV   A, #cI2C_RESET      ; RESET I2C BUS WORKING ENABLE 
NextSet:   MOV   rI2CCTRL, A
	   POP   ACC
	   POP   PSW
	   RETI
Receive:   INC   R0
	   MOV   A, #cI2C_RESET    ; RESET I2C BUS WORKING ENABLE
	   DJNZ  R6, NextRecv 
	   MOV   A, #cI2C_NOACK    ; SET MASTER I2C AS NO ACK MODE
NextRecv:  MOV   rI2CCTRL, A    
	   POP   ACC
	   POP   PSW
	   RETI

SetStop:   MOV   rI2CCTRL, #cI2C_STOP     ; RESET I2C BUS STOP MODE 
	   POP   PSW
	   RETI
	   END

;#############################################################
; FILE NAME INTSUB.ASM
; INTERRUPT: TIMER_0 - WORKING FOR SYSTEM TIME, TIME_DELAY AND DISPLAY
; FUNCTION:  DEFUALT  
; USING REGISTER:  SELRG1 - R1, R7 
; CALL  SUBROUTE:  PUTEVENT
; PARMENTERS: NONE
;------------------------------------------------------------
	   PROC  TIMER_0
TIMER_0:   MOV   TH0,#04CH    ;    RESET THE TIMER 0 COUNT FOR 0.1 SECOND 
	   MOV   TL0,#06H     ;  AT 6MZH CPU TIME CLOCK
	   CLR   B_EN_INT     ; PROVENT THE TIMER INT RE_ENTER
	   PUSH  PSW
	   MOV   PSW, #cSELRG1 ;   SET THE WORK REGISTER GROUP = 1
	   MOV   R1, #cTIM_START_ADDR  ; 1. FRIST 0.1 SECOND CLOCKING POINTER
	   MOV   R7, #cTIM_TICK_NUM     ;    0.1 SECOND clocking ......
Clocking1: MOV   A, @R1
	   JZ    PassIt1 
	   DEC   @R1
PassIt1:   INC   R1
	   DJNZ  R7, Clocking1
	   DEC   R1
	   CJNE  @R1, #0, ClockEnd        ; 1 SECOND CLOCKING
	   MOV   R7, #cTIM_SECOND_NUM     ;  5. 1 SECOND clocking
Clocking2: INC   R1
	   MOV   A, @R1
	   JZ    PassIt2 
	   DEC   @R1
PassIt2:   DJNZ  R7, Clocking2
	   MOV   A, cTIM_START_ADDR+cTIM_TICK_NUM     ;read watchdog
	   JNZ   Clock3Is         ; %SS%  DogPass
	   POP   PSW
	   MOV   DPTR, #RESTART  ; %% RESTART THE SYSTEM
	   MOV   R1, SP
	   MOV   A, DPH
	   MOV   @R1, A
	   DEC   R1
	   MOV   A, DPL
	   MOV   @R1, A
	   RETI
Clock3Is:  CJNE  @R1, #0, ClockEnd
	   MOV   R7, #cTIM_MINUTE_NUM   ;  1 minites clocking...
Clocking3: INC   R1
	   MOV   A, @R1
	   JZ    PassIt3 
	   DEC   @R1
PassIt3:   DJNZ  R7, Clocking3

ClockEnd:  POP   PSW
	   POP   ACC
	   SETB  B_EN_INT        ; ENABLE THE ALL INSTALLED INTERRUPT
	   RETI
	   END
; END_TIMER0 - PROCESS
;#############################################################
; FILE NAME INTSUB.ASM
; INTERRUPT: COMM - WORKING FOR SYSTEM COMMUNICATION 
; FUNCTION:  DEFUALT
;------------------------------------------------------------
             PROC  COMM
COMM:      CLR   B_EN_INT  			; PROVENT THE TIMER INT RE_ENTER
	   PUSH  B
	   PUSH  PSW
	   MOV   PSW, #cSELRG2      		;   SET THE WORK REGISTER GROUP = 2
           JNB   B_IRECV, NxtRecvT  		;   NO RECEIVE INTER 
	   CLR   B_IRECV            		;   清已接收标志
           MOV   tCOMDELAY, #cCOMDELAYt 	;   Reset the time counter
           MOV   A,  SBUF           		;   Get the receive Byte data
	   MOV   R0, dCOMMODE
           JNB   B_RS232, IsRS485   		;   FOR RS232/RS485
           CJNE  R0, #cCOMMODE4, PassSyn
  PassSyn: JNC   IsRecvD                	;  大于通信模式4?
           CJNE  A, #cCOMRESET, IsSync  	;  是通信复位码?
	   MOV   dCOMMODE, #0           	;  复位通信模式
           SETB  B_ADDONLY           
	   CLR   bCOMMLCK               	;  CLEAR COMMOUNTION LOCK FLAG.
           JMP   NextRecv
  IsSync:  CJNE  A, #cCOMSYNC, ToComp  		;  	; 是同步码?
	   AJMP  CallAll
  ToComp:  cjne  R0,#0H,ToComp1
 ForSendER:SETB  B_RS_RW           		; 转发送方式as send mode 
	   MOV   dCOMMODE,#20H			; 去发送错误码
	   JMP   NextRecv
  ToComp1: CJNE  R0,#01H,IsSTAT1RST
	   JMP   ForSendER
IsSTAT1RST:CJNE  A,#cCOM_STAT1RST,IsSTAT2RST	;------------------------------------
	   MOV   R1, #cCOM_STAT1RST
	   mov   r7, #00h		        ;-  get one byte
	   MOV   dCOMMODE,#07H
	   SETB   bCOMMLCK			;-
	   JMP   ToSendData			;-  go send the order 81 82
IsSTAT2RST:CJNE  A,#cCOM_STAT2RST,IsRecvD	;-
	   MOV   R1, #cCOM_STAT2RST
	   mov   R7,#00h		        ;-
	   MOV   dCOMMODE,#07H	
	   SETB   bCOMMLCK		        ;-
	   JMP   ToSendData			;------------------------------------	
  IsRS485: JNB   B_DATA9, IsRecvD
	   JZ    CallAll          		; IS ALL CALL
	   XRL   A,  dSTATION
	   JZ    CallAll
  NxtRecvT:JMP   NextRecv
CallAll:   CJNE  R0, #0, AddrIs
	   setb  bCOMMLCK	   		;!!!!! 
IncOverT:  JMP   IncOver
AddrIs:    CJNE  R0, #1, NxtRecvT  		; 多余同步码,不作处理
           ;SETB  B_RS_RW           		; 转发送方式as send mode 
	   JMP   IncOver
IsRecvD:   CJNE  R0, #cCOMMODE7, DataRecv  	; 是校验和接收?
	   SUBB  A, R3          		;SUMMY   SUBB RECEIVE DATA
	   JNZ   ErrProc
ToSendData:SETB  B_RS_RW        		; as send mode 
	   JMP   IncOver
ErrProc:   JMP   ForSendER
DataRecv:  CJNE  R0, #cCOMMODE3, IsFuncRcv 	; 是包长接收?
	   MOV   R3, A       			; INITIALIZE SUMMAY
	   MOV   R2, A       			; RECEIVE COUNT
	   DJNZ  R2, IncOverT
	   JMP   ErrProc
IsFuncRcv: PUSH  ACC          			; 累加校验和
	   ADD   A,  R3       			; ADD THE SUMMAY
	   MOV   R3, A        			; SAVE THE SUMMY
	   POP   ACC
	   CJNE  R0, #cCOMMODE4, IsArgRcv   	; 是功能码接收?
	   MOV   R1, A        			; RECEIVE FUNC CODE
	   MOV   R4, #0       			; RESET THE SUB FUNCTION
	   MOV   R5, #0
	   MOV   R6, #0
	   JNB   BA_BLKSEND, FuncOver 		; 是(>80H)块发送
	   MOV   R4, #cCOMSNDBLK      		; (80H) 设置块接收标志 
	   MOV   R5, #HIGH(xCOMMBUF)  		; cSCDRAM+1 ; 8H + 1
	   MOV   R6, #LOW(xCOMMBUF)   		; GET THE Buffer Point
	   JMP   FuncOver
IsArgRcv:  CJNE  R0, #cCOMMODE5, IsSmode6   	; 参数1接收?
	   MOV   R7, A
FuncOver:  DJNZ  R2, IncOverT
	   JMP   EndRecv
RtnRecv:   CJNE  R0, #cCOMMODE18, IsSmode12  	; PROCESS ECHO or RETURN RECEIVE
           XCH   A, R1
           JNB   BA_DATARTN, ForEcho
           XCH   A, R1
           MOV   R0, #0
	   MOV   dCOMMODE, R0          		; RESET THE COMM MODE 
	   JMP   NextRecv               	; GOTO DATA RECEIVE
  ForEcho: XCH   A, R1
           SETB  B_ADDONLY
           SETB  B_RS232                	; 复位为RS232接收方式
	   CLR   bCOMMLCK               	; 清通信锁定标志.
	   CJNE  A, #cCOMSYNC, IsErrEcho
	   MOV   dCOMMODE, #0           	; THE bCOMMLCK 'SET' and dCOMMODE = 0 
          ; SETB  B_ADDONLY          		;!!!!! 
           JMP   NextRecv
IsErrEcho: JMP   IncOver                	; 转至Mode=19(发送不成功)
IsSmode12: CJNE  R0, #cCOMMODE12, NextRecv
	   CJNE  A, #cOKECHO, NextRecv  	; RECEIVE OKECHO AFTER SEND ADDRESS
           SETB  B_RS_RW                	; FOR SEND
	   SETB  bCOMMLCK
           MOV   iCTRYNUM, #cMAXTRY
           JMP   IncOver                	; 直至超时
IsSmode6:  CJNE  R0, #cCOMMODE6, RtnRecv
	   CJNE  R4, #cCOMSNDBLK, CmdRecv 	; NORMAL RECEIVE.
BlockSend: PUSH  DPH           
	   PUSH  DPL 
	   MOV   DPH, R5     			; COUNT
	   MOV   DPL, R6
	   MOVX  @DPTR, A
	   INC   DPTR
	   MOV   R6, DPL
	   MOV   R5, DPH
	   POP   DPL
	   POP   DPH
	   DJNZ  R2, NextRecv
	   JMP   EndRecv 
CmdRecv:   XCH   A,  R6         		; 参数接收至{R4,{R5,{R6}}}     
	   XCH   A,  R5
	   MOV   R4, A
	   DJNZ  R2, NextRecv  	 
EndRecv:   MOV   dCOMMODE, #cCOMMODE6
IncOver:   INC   dCOMMODE
NextRecv:  SETB  B_ENRECV
	   CLR   B_ITRAN            
	   POP   PSW
	   POP   B
	   POP   ACC
	   SETB  B_EN_INT   			;OPEN ALL INTERRUPT
           RETI
           END
          INCLUDE     "BASSUB.INC"
          INCLUDE     "BASSUB.ASM"
          INCLUDE     "LCDSUB.INC"
          INCLUDE     "LCDSUB.ASM"
          INCLUDE     "PAGSUB.INC"
	  INCLUDE     "PAGSUB.ASM"
          INCLUDE     "DATDEF.INC"       ;-------
	  INCLUDE     "SYSSUB.ASM"
	  INCLUDE     "CHKSUB.ASM"
	  INCLUDE     "EVTSUB.ASM"
	  INCLUDE     "IO_SUB.ASM"
          INCLUDE     "SVRSUB.ASM"
          INCLUDE     "ASCTAB.INC"
          INCLUDE     "USEDEF.INC"
          INCLUDE     "USESUB.ASM"
	  INCLUDE     "USEEVT.ASM"      ; INCLUDE  "GADSUB.ASM"
	  INCLUDE     "PAGTAB.def"
	  INCLUDE     "DOTTAB.def"
	  END

⌨️ 快捷键说明

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