📄 intsub.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 + -