|
От Keil166 кусок от монитора:
$IF (SERIAL2)
;********************************************************************
;* Initialization of simulated Serial Interface 2 *
;********************************************************************T_LINE BIT P3.9 ; Transmit Data Line TxD
T_OUT BIT DP3.9 ; Port direction register for TxD
R_LINE BIT P3.8 ; Receive Data Line RxD
R_IN BIT DP3.8 ; Port direction register for RxD
STATES_PER_BIT EQU (CPU_CLOCK / BAUDRATE)BSET T_LINE ;
BSET T_OUT ; set TxD to output
BCLR R_IN ; set RxD to input
CALL AFTER_GOJMP CC_UC,MON166
INSTAT: BSET R4.0 ; INPUT STATUS OF SERIAL INTERFACE
RETOUTSTAT: BSET R4.0 ; OUTPUT STATUS OF SERIAL INTERFACE
RET
;*************** CHARACTER INPUT-ROUTINE ************************INCHAR: PUSH R2
PUSH R3
MOV R3,#8 ; Bit counter
MOV R4,#00H
STARTBIT: JNB R_LINE,STARTBIT ; Wait until last data bit is over
STARTBIT1: JB R_LINE,STARTBIT1; Wait for startbit
MOV R2,DPP0:C_VAR1 ; Startbit valid, begin sampling !
WAIT1: SUB R2,#1 ;
JMPR CC_NZ,WAIT1 ;
RECEIVE: BMOV R4.8,R_LINE ; Bit input
SHR R4,#1
SUB R3,#1
JMPR CC_Z,LASTBIT ; Last bit ?MOV R2,DPP0:C_VAR2 ; Sample period generation
WAIT2: SUB R2,#1
JMPR CC_NZ,WAIT2
JMPR CC_UC,RECEIVELASTBIT: POP R3
POP R2
RET;*************** CHARACTER OUTPUT-ROUTINE *******************
OUTCHAR: PUSH R2
PUSH R3
PUSH R4
OR R4,#0100H ; Insert stopbit
SHL R4,#1 ; Insert startbit
MOV R3,#10 ; Bit counterNEXTBIT: ASHR R4,#1
BMOV T_LINE,C ; Bit outputMOV R2,DPP0:C_VAR3
WAIT: SUB R2,#1
JMPR CC_NZ,WAIT ; Baud rate generationSUB R3,#1
JMPR CC_NZ,NEXTBIT ; Last bit ?POP R4 ; Yes
POP R3
POP R2
RETCLR_TI: RET ; IS NOT USED
SET_TI: RET ; IS NOT USED
CLR_RI: RET ; IS NOT USED
CLR_SER_IE: RET ; IS NOT USED
SET_SER_IE: RET ; IS NOT USED
RD_RIE: RET ; IS NOT USED
RD_TIE: RET ; IS NOT USED
WR_RIE: RET ; IS NOT USED
WR_TIE: RET ; IS NOT USED
WR_RIR: RET ; IS NOT USED
WR_TIR: RET ; IS NOT USED
BEFORE_GO: RET ; IS NOT USED
AFTER_GO: SCXT MDC,#010H
PUSH MDH
PUSH MDL
MOV DPP0,#PAG MON166_W_DATA
MOV R1,DPP3:BUSCON0 ; Programmed number of waitstates
AND R1,#000FH
MOV R2,#15
SUB R2,R1 ; ACT = State times for one
ADD R2,#3 ; external memory access
MOV R1,DPP3:BUSCON0
SHR R1,#5
AND R1,#0001H
SUB R2,R1
JNB BUSCON0.6,NMBUS
ADD R2,#1 ; Multiplexed bus
NMBUS: MOV R3,#14 ; Non-multiplexed bus
JB BUSCON0.7,BIT_16_1
ADD R3,#13 ; 8-Bit bus (16 ACTs)
BIT_16_1: MOV R13,#STATES_PER_BIT ; 16-Bit bus (8 ACTs)
MUL R3,R2 ;
SUB R13,MDL
SUB R13,#4
SHR R13,#2 ; Remaining states for loop
MOV DPP0:C_VAR2,R13MOV R13,#STATES_PER_BIT ; Multiply by 1.5
MOV R3,R13
SHR R3,#1
ADD R13,R3MOV R3,#11
JB BUSCON0.7,BIT_16_2
ADD R3,#14; ; 8-Bit Bus
BIT_16_2: MUL R3,R2
SUB R13,MDL
SUB R13,#2
SHR R13,#2
MOV DPP0:C_VAR1,R13MOV R13,#STATES_PER_BIT
MOV R3,#13
JB BUSCON0.7,BIT_16_3
ADD R3,#10 ; 8-Bit Bus
BIT_16_3: MUL R3,R2
SUB R13,MDL
SUB R13,#4
SHR R13,#2
MOV DPP0:C_VAR3,R13
POP MDL
POP MDH
POP MDC
RET$ENDIF
INSTALLCODE ENDP
INIT_CODE ENDSEND
E-mail: info@telesys.ru