;*******************************Tool-Relay-MAIN KVM Switch*************************************
; DATE 2007/5/8
TITLE "TOOL-RELAY-MAIN"
PROCESSOR 16F73
;**********************************************************************************************
;* BANK SPECIAL REGISTERS
;**********************************************************************************************
INDEX EQU 00H ;INDEX ADDRESS FILE
RTC EQU 01H ;REAL TIME COUNTER
PCL EQU 02H ;PROGRAM COUNTER LOW BYTE
;**********************************************************************************************
PSW EQU 03H ;PROGRAM STATUS WORD
CF EQU 0 ;CARRY FLAG
AF EQU 1 ;AUXILIARY CARRY FLAG
ZF EQU 2 ;ZERO FLAG
PDF EQU 3 ;POWER DOWN FLAG
TOF EQU 4 ;TIME-OUT FLAG
RP0 EQU 5 ;REGISTER BANK SELECT BIT 0 (DIRECT ADDRESSING 直接寻址)
RP1 EQU 6 ;REGISTER BANK SELECT BIT 1 (DIRECT ADDRESSING 直接寻址)
IRP EQU 7 ;REGISTER BANK SELECT BIT (INDIRECT ADDRESSING 间接寻址)
;***********************************************************************************************
FSR EQU 04H ;FILE SELECT REGISTER
BK0 EQU 5 ;BANK SELECTION BIT0
BK1 EQU 6 ;BANK SELECTION BIT1
;***********************************************************************************************
RA EQU 05H ;A PORT "XX00,0010 "B 00H
C1 EQU 0 ;OUTPUT
C2 EQU 1 ;OUTPUT
C3 EQU 2 ;OUTPUT
C4 EQU 3 ;OUTPUT
@RA4 EQU 4 ;OUTPUT
@RA5 EQU 5 ;OUTPUT
_RAVAL EQU b'00000000'
;************************************************************************************************
; MODIFY WILLIAM.LI
;************************************************************************************************
RB EQU 06H ;B PORT "1111,1111"B FFH
BUP_W EQU 0 ;INPUT
HBUP_W EQU 1 ;INPUT
BDP_W EQU 2 ;INPUT
HBDP_W EQU 3 ;INPUT
AUP_W EQU 4 ;INPUT
HAUP_W EQU 5 ;INPUT
ADP_W EQU 6 ;INPUT
HADP_W EQU 7 ;INPUT
_RBVAL EQU b'11111111'
;************************************************************************************************
RC EQU 07H ;C PORT "1000,0010"B 02H
SP EQU 0
BOTTON_SELECT EQU 1
SEG_DAT EQU 2
SEG_CLK EQU 3
SEG_CLR EQU 4
TEST1 EQU 5
TX EQU 6 ;输入
RX EQU 7 ;输出
_RCVAL EQU b'10000010'
;************************************************************************************************
PCLATH EQU 0AH ;PROGRAM COUNTER HIGH BYTE
SUB_0 EQU 0 ;SUBROUTINE SELECT BIT 0
SUB_1 EQU 1 ;SUBROUTINE SELECT BIT 1
SUB_2 EQU 2 ;SUBROUTINE SELECT BIT 2
PG0 EQU 3 ;PAGE SELECT BIT 0
PG1 EQU 4 ;PAGE SELECT BIT 1
INTCON EQU 0BH
PEIE EQU 6
GIE EQU 7
;***********************************************************************************************
;* BANK0 GENERAL PURPOSE REGISTERS ADD 020-06F
;* START 20-6F ADDRESS
;***********************************************************************************************
; ALL BANKS COMMON REGISTERS
;***********************************************************************************************
TIMER1 EQU 30H
TIMER2 EQU 31H
TIMER3 EQU 32H
TIMER_S EQU 33H
;***********************************************************************************************
PORT1_A EQU 34H ;count [a] side and [b] side ok's time
PORT1_B EQU 35H
PORT2_A EQU 36H
PORT2_B EQU 37H
PORT3_A EQU 38H
PORT3_B EQU 39H
PORT4_A EQU 3AH
PORT4_B EQU 3BH
PORT5_A EQU 3DH
PORT5_B EQU 3EH
PORT6_A EQU 3FH
PORT6_B EQU 40H
PORT7_A EQU 41H
PORT7_B EQU 42H
PORT8_A EQU 43H
PORT8_B EQU 44H
;***********************************************************************************************
COMSTA EQU 70H
LEADER EQU 0
ERR_F EQU 1
DATA_F EQU 2
SCAN_F EQU 3
CODE3_F EQU 4
F0_F EQU 5
SPEAKER EQU 6
;***********************************************************************************************
HEXLED EQU 71H
SNDLED EQU 72H
TEMP2 EQU 73H
TEMP3 EQU 74H
PORT_NUMBER EQU 75H
TEMP5 EQU 76H
;***********************************************************************************************
@RCTEMP EQU 77H
RECEIVE_TEMP EQU 78H
PSW_TEMP EQU 79H
@8TIME EQU 7AH
UNKNOWN1 EQU 7BH
;************************************************************************************************
@RB_STATUS EQU 7CH
@RC_STATUS EQU 7DH
;************************************************************************************************
@RBTEMP EQU 7EH ;PORTREG
PRESENT EQU 7FH
;************************************************************************************************
;* BANK1 SPECIAL REGISTERS
;************************************************************************************************
OPT_R EQU 81H
PS0 EQU 0 ;PRESCALER RATE SELECT BIT 0
PS1 EQU 1 ;PRESCALER RATE SELECT BIT 1
PS2 EQU 2 ;PRESCALER RATE SELECT BIT 2
PSA EQU 3 ;PRESCALER ASSIGNMENT BIT (0 = RTCC,1=WDT)
TOSE EQU 4 ;TMR0 SOURCE EDGE SELECT BIT (0 = RISE,1 = FALL)
TOCS EQU 5 ;TMR0 CLOCK SOURCE SELECT BIT (0 = INTERNAL 1 = RA4)
INTEDG EQU 6 ;INTERRUPT EDGE SELECT BIT (0 = FALL, 1 = RISE)
RBPU EQU 7 ;PORTB PULL-UP ENABLE BIT (0 = ENABLE,1 = DISABLE)
;**************************************************************************************************
TRISA EQU 85H ;PORT A DIRECTION CONTROLLER
TRISB EQU 86H ;PORT B DIRECTION CONTROLLER
TRISC EQU 87H ;PORT C DIRECTION CONTROLLER
;**************************************************************************************************
TXSTA EQU 98H ;TXSRA
TX9D EQU 0 ;PRINTER PORT DATA
TRMT EQU 1
BRGH EQU 2
STATONLEMENTED EQU 3
SYNC EQU 4
TXEN EQU 5
TX9 EQU 6
CSRC EQU 7
;**************************************************************************************************
PIE1 EQU 8CH ;TXSRA
TXIE EQU 4
RCIE EQU 5
;**************************************************************************************************
PIR1 EQU 0CH ;RXSRA
TXIF EQU 4
RCIF EQU 5
;**************************************************************************************************
RCSTA EQU 18H ;RXSRA
RX9D EQU 0 ;PRINTER PORT DATA
OERR EQU 1
FERR EQU 2
ADDEN EQU 3
CREN EQU 4
SREN EQU 5
RX9 EQU 6
SPEN EQU 7
;**************************************************************************************************
TXREG EQU 19H
SPBRG EQU 99H
RCREG EQU 1AH
;**************************************************************************************************
ADCON1 EQU 9FH ;PORT A ANALOG/DIGITAL DEFINE CONTROLLER
BIT_0 EQU 0
BIT_1 EQU 1
BIT_2 EQU 2
BIT_3 EQU 3
BIT_4 EQU 4
BIT_5 EQU 5
BIT_6 EQU 6
BIT_7 EQU 7
;*************************************************************************************************
;* RTCC TABLE
;*************************************************************************************************
RF0 EQU 0
RF1 EQU 1
RF2 EQU 2
RF3 EQU 3
RF4 EQU 4
RF5 EQU 5
RF6 EQU 6
RF7 EQU 7
;************************************************************************************************
PAGE0 EQU 0005H
PAGE1 EQU 0400H ;MAIN PROGRAM PIC 16F873
PAGE2 EQU 0800H
PAGE3 EQU 0C00H ;MAIN PROGRAM PIC 16F877
RST_87 EQU 0000H ;STARTING REGISTER AT 0000H
;************************************************************************************************
;** TEST PORT NUMBER
;************************************************************************************************
PORT_MAIN EQU 08H
;************************************************************************************************
;*** MACRO ***
;************************************************************************************************
;SEL_REG_BIT ; MACRO X
; LOCAL SELREG1,SELREG2
;SELREG1
; MOVF RC,W
; MOVWF @RCTEMP ;@RCTEMP为F77H
; BTFSS @RCTEMP,X
; GOTO SELREG2
; GOTO SELREG1
;SELREG2
; MOVF RC,W
; MOVWF @RCTEMP
; BTFSS @RCTEMP,X
; GOTO SELREG2
; ENDM
;*************************************************************************************************
ORG 0000H
GOTO POWERON_INITION
ORG 0004H
GOTO INT_SER
;ORG PAGE0
;*************************************************************************************************
;** TABLE HEX TO 7-SEGMENT LED SUBROUTINE
;*************************************************************************************************
SCODE
CLRF PCLATH
ADDWF PCL
RETLW 0C0H ;0
RETLW 0F9H ;1
RETLW 0A4H ;2
RETLW 0B0H ;3
RETLW 99H ;4
RETLW 92H ;5
RETLW 82H ;6
RETLW 0F8H ;7
RETLW 80H ;8
RETLW 98H ;9
RETLW 88H ;A
RETLW 83H ;B&8
RETLW 0C6H ;C
RETLW 0C0H ;D&0
RETLW 86H ;E
RETLW 8EH ;F
SHOWDISPLAY7
MOVF @RC_STATUS,W
ANDLW 0FH
CALL SHOWDISPLAY70
SWAPF @RC_STATUS,1
MOVF @RC_STATUS,W
ANDLW 0FH
CALL SHOWDISPLAY70
SWAPF @RC_STATUS,1
RETLW 0
SHOWDISPLAY99
MOVF PRESENT,W
ANDLW 0FH
CALL SHOWDISPLAY70
SWAPF PRESENT,1
MOVF PRESENT,W
ANDLW 0FH
CALL SHOWDISPLAY70
RETLW 0
SHOWDISPLAY70
CALL SCODE
MOVWF TEMP5
MOVLW 08H
MOVWF TEMP3
SHOWDISPLAY71
BSF RC,SEG_DAT ;turn off
BTFSS TEMP5,7 ;btfss temp5,7
BCF RC,SEG_DAT ;turn on
BCF RC,SEG_CLK
BSF RC,SEG_CLK
RLF TEMP5
DECFSZ TEMP3
GOTO SHOWDISPLAY71
RETLW 0
;***************************************************************************************************
; PAGE0 SUBROUTINE
;***************************************************************************************************
BEEP
BSF RC,SP ;set speaker on5k
BEP0
CLRF RTC
BEP1
BTFSS RTC,RF7
GOTO BEP1 ;set speaker 16ms
BCF RC,SP
RETLW 0
;***************************************************************************************************
; PORT() SELECT 2.PORT_MAIN(PORT ) = PORT_NUMBER PORT_NUMBER=0
;***************************************************************************************************
SELECTABLE
BSF RA,C1
BTFSS PORT_NUMBER,0
BCF RA,C1
BSF RA,C2
BTFSS PORT_NUMBER,1
BCF RA,C2
BSF RA,C3
BTFSS PORT_NUMBER,2
BCF RA,C3
BSF RA,C4
BTFSS PORT_NUMBER,3
BCF RA,C4
MOVLW PORT_MAIN
XORWF PORT_NUMBER,0
BTFSS PSW,ZF
RETLW 0
MOVLW 00H
MOVWF PORT_NUMBER
GOTO SELECTABLE
;****************************************************************************************************
DELAY_MS
CLRF RTC
DELAY_MS2
BTFSS RTC,RF7
GOTO DELAY_MS2
DECFSZ TEMP2
GOTO DELAY_MS
RETLW 0
;***************************************************************************************************
SHOW7A_MAIN
CALL SHOW7A
MOVWF PRESENT
CALL SHOWDISPLAY99
CALL SHOWDISPLAY7
RETLW 0
SHOW7B_MAIN
CALL SHOW7B
MOVWF PRESENT
CALL SHOWDISPLAY99
CALL SHOWDISPLAY7
RETLW 0
;***************************************************************************************************
SHOW7B
BTFSS @RBTEMP,0
RETLW 0BFH
RETLW 0B0H
SHOW7A
BTFSS @RBTEMP,1
RETLW 0AFH
RETLW 0A0H
;**********************************************************************************************
ONE_SECOND
MOVLW 01H
MOVWF TIMER1
LOOP1 MOVLW 0FFH
MOVWF TIMER2
LOOP2 MOVLW 0FFH
MOVWF TIMER3
LOOP3 DECFSZ TIMER3
GOTO LOOP3
DECFSZ TIMER2
GOTO LOOP2
DECFSZ TIMER1
GOTO LOOP1
RETLW 0H
;****************************************************************************************************
;初始化工作开始
POWERON_INITION
CLRF PSW ;SET REGISTERS IN BANK0
CLRF FSR ;SET REGISTERS IN BANK0
CLRF PCLATH ;SET PROGRAMS IN PAGE0
BSF PSW,RP0 ;CHANGE REGISTERS BANK TO 2ND
MOVLW 07H ;10000111
MOVWF OPT_R ;SET RTCC TIMER SCALE TO 128US EACH STEP0
MOVLW 07H
MOVWF ADCON1 ;DEFINE PORTA IS DIGITAL I/O
MOVLW _RAVAL
MOVWF TRISA
MOVLW _RBVAL
MOVWF TRISB
MOVLW _RCVAL
MOVWF TRISC
BCF PSW,RP0 ;CHANGE REGISTERS BANK TO 1ST
;****************************************************************************************************
POWERON_HAREWARE
CLRF INTCON
BCF RC,SP ;spk
BSF RC,SEG_DAT ;CLEAR DISPLAY
BCF RC,SEG_CLR
BSF RC,SEG_CLR
BSF RC,TEST1
MOVLW 00H ;PORT_EQU=0
MOVWF PORT_NUMBER ;用于致能PORT数的暂存器
MOVWF @RC_STATUS ;用于7节显示器的暂存器
CALL SELECTABLE ;致能当前PORT数为PORT_NUMBER暂存器中的值。
CALL SHOWDISPLAY7 ;使7节显示器显示数字00
CALL SHOWDISPLAY7 ;使7节显示器显示数字00
CLRF @RBTEMP
BSF @RBTEMP,7
CALL CLRF_PORT
CALL BEEP ;初始化结束.
GOTO PROGRAM_MAIN
;****************************************************************************************************
RS232_INITIAL
CLRF RCSTA
BSF RCSTA,CREN ;致能接收功能
BSF RCSTA,SPEN ;致能串列通讯模组
CLRF PIR1 ;;;;;;;;;;;;;;;
BSF PSW,RP0
MOVLW 34H ;D'52'
MOVWF SPBRG
CLRF TXSTA
BSF TXSTA,BRGH ;设定快速鲍率
BSF TXSTA,TXEN ;致能传送功能
CLRF PIE1 ;;;;;;;;;;;;;;;
BSF PIE1,RCIE
BCF PSW,RP0
return
;****************************************************************************************************
OPEN_INTERRUPT
CLRF INTCON
BSF INTCON,PEIE
BSF INTCON,GIE
return
;****************************************************************************************************
INT_SER
SWAPF PSW,0 ;储存STATUS暂存器
MOVWF PSW_TEMP
BTFSC PIR1,RCIF
GOTO RCIF_INT
GOTO INT_SER_END
RCIF_INT
MOVF RCREG,W ;MOVF RECEIVE_TEMP,0
MOVWF RECEIVE_TEMP
MOVLW 08H
MOVWF @8TIME
CALL_LPT_MAIN
CALL LPT_MAIN
CALL ONE_SECOND
DECFSZ @8TIME,1
GOTO CALL_LPT_MAIN
DECFSZ RECEIVE_TEMP,1
GOTO CONTINUE1
GOTO SEND_PORT
CONTINUE1
MOVLW 08H
MOVWF @8TIME
GOTO CALL_LPT_MAIN
SEND_PORT
CALL SEND_PORT_STATUS
CALL CLRF_PORT
CALL BEEP
INT_SER_END
SWAPF PSW_TEMP,0 ;读回STATUS暂存器
MOVWF PSW
RETFIE
;****************************************************************************************************
PROGRAM_MAIN
CALL RS232_INITIAL
CALL OPEN_INTERRUPT
GOTO $
;****************************************************************************************************
;开始进行主循环
LPT_MAIN
;SEL_REG_BIT 1
CLRF @RBTEMP
MOVF PORT_NUMBER,0
MOVWF @RC_STATUS ;POR_NUMBER的值放入@RC_MAIN2中
INCF @RC_STATUS,1
CLRF PSW
CALL CHECK_ERRR1 ;TEST RELAY
CLRF PSW
CALL CHECK_ERRR2 ;TEST RELAY
CALL SHOW7A_MAIN
CALL ONE_SECOND
CALL SHOW7B_MAIN
CALL ONE_SECOND
CALL COUNTER_OK_TIME
LPT_MAIN1
INCF PORT_NUMBER,1 ;PORT_NUMBER+1放入PORT_NUMBER中
CALL SELECTABLE
RETLW 0
;主循环结束处
;**************************************************************************************************
;**************************************************************************************************
CHECK_ERRR1
BCF RC,TEST1 ;READLY ON
MOVF RB,W
MOVWF @RB_STATUS ;A SIDE BAD?
ANDLW 0FH ;0BBH
XORLW 0EH
BTFSS PSW,ZF
CALL ERRBEEPLOB1_NG ;如果不为0,则不设置@RBTEMP暂存器,继续执行下一测试。
BTFSC PSW,ZF
CALL ERRBEEPLOB1_OK ;DISPLAY 7-SEGMENT
CLRF PSW
SWAPF @RB_STATUS
MOVF @RB_STATUS,0
ANDLW 0FH
XORLW 0EH
BTFSS PSW,ZF
CALL ERRBEEPLOA1_NG
BTFSC PSW,ZF
CALL ERRBEEPLOA1_OK
RETLW 0 ;TEST1测试完,返回调用处。
ERRBEEPLOB1_OK
BSF @RBTEMP,0
RETLW 0
ERRBEEPLOB1_NG
BCF @RBTEMP,0
RETLW 0
ERRBEEPLOA1_OK
BSF @RBTEMP,1
RETLW 0
ERRBEEPLOA1_NG
BCF @RBTEMP,1
RETLW 0
;***************************************************************************************************
CHECK_ERRR2
BSF RC,TEST1 ;READLY OFF
MOVF RB,W
MOVWF @RB_STATUS ;
ANDLW 0FH
XORLW 0BH
BTFSS PSW,ZF ;B SIDE BAD?
CALL ERRBEEPLOB1_NG
BTFSC PSW,ZF
CALL ERRBEEPLOB1_OK ;DISPLAY 7SEGMENT
CLRF PSW
SWAPF @RB_STATUS
MOVF @RB_STATUS,0
ANDLW 0FH
XORLW 0BH
BTFSS PSW,ZF
CALL ERRBEEPLOA1_NG
BTFSC PSW,ZF
CALL ERRBEEPLOA1_OK
RETLW 0
;**********************************************************************************************
COUNTER_OK_TIME
CLRF PSW
MOVF @RC_STATUS,0
XORLW 01H
BTFSS PSW,ZF
GOTO NEXT_PORT2
BTFSC @RBTEMP,0
INCF PORT1_B
BTFSC @RBTEMP,1
INCF PORT1_A
RETLW 0
NEXT_PORT2
CLRF PSW
MOVF @RC_STATUS,0
XORLW 02H
BTFSS PSW,ZF
GOTO NEXT_PORT3
BTFSC @RBTEMP,0
INCF PORT2_B
BTFSC @RBTEMP,1
INCF PORT2_A
RETLW 0
NEXT_PORT3
CLRF PSW
MOVF @RC_STATUS,0
XORLW 03H
BTFSS PSW,ZF
GOTO NEXT_PORT4
BTFSC @RBTEMP,0
INCF PORT3_B
BTFSC @RBTEMP,1
INCF PORT3_A
RETLW 0
NEXT_PORT4
CLRF PSW
MOVF @RC_STATUS,0
XORLW 04H
BTFSS PSW,ZF
GOTO NEXT_PORT5
BTFSC @RBTEMP,0
INCF PORT4_B
BTFSC @RBTEMP,1
INCF PORT4_A
RETLW 0
NEXT_PORT5
CLRF PSW
MOVF @RC_STATUS,0
XORLW 05H
BTFSS PSW,ZF
GOTO NEXT_PORT6
BTFSC @RBTEMP,0
INCF PORT5_B
BTFSC @RBTEMP,1
INCF PORT5_A
RETLW 0
NEXT_PORT6
CLRF PSW
MOVF @RC_STATUS,0
XORLW 06H
BTFSS PSW,ZF
GOTO NEXT_PORT7
BTFSC @RBTEMP,0
INCF PORT6_B
BTFSC @RBTEMP,1
INCF PORT6_A
RETLW 0
NEXT_PORT7
CLRF PSW
MOVF @RC_STATUS,0
XORLW 07H
BTFSS PSW,ZF
GOTO NEXT_PORT8
BTFSC @RBTEMP,0
INCF PORT7_B
BTFSC @RBTEMP,1
INCF PORT7_A
RETLW 0
NEXT_PORT8
CLRF PSW
MOVF @RC_STATUS,0
XORLW 08H
BTFSS PSW,ZF
GOTO NEXT_PORT_END
BTFSC @RBTEMP,0
INCF PORT8_B
BTFSC @RBTEMP,1
INCF PORT8_A
NEXT_PORT_END
RETLW 0
;**********************************************************************************************
CLRF_PORT
CLRF PORT1_A
CLRF PORT1_B
CLRF PORT2_A
CLRF PORT2_B
CLRF PORT3_A
CLRF PORT3_B
CLRF PORT4_A
CLRF PORT4_B
CLRF PORT5_A
CLRF PORT5_B
CLRF PORT6_A
CLRF PORT6_B
CLRF PORT7_A
CLRF PORT7_B
CLRF PORT8_A
CLRF PORT8_B
RETLW 0
;**********************************************************************************************
SEND_PORT_STATUS
CALL ONE_SECOND
MOVF PORT1_A,0
MOVWF TXREG
TXIF_WAIT1_A BTFSS PIR1,TXIF
GOTO TXIF_WAIT1_A
CALL ONE_SECOND
MOVF PORT1_B,0
MOVWF TXREG
TXIF_WAIT1_B BTFSS PIR1,TXIF
GOTO TXIF_WAIT1_B
CALL ONE_SECOND
MOVF PORT2_A,0
MOVWF TXREG
TXIF_WAIT2_A BTFSS PIR1,TXIF
GOTO TXIF_WAIT2_A
CALL ONE_SECOND
MOVF PORT2_B,0
MOVWF TXREG
TXIF_WAIT2_B BTFSS PIR1,TXIF
GOTO TXIF_WAIT2_B
CALL ONE_SECOND
MOVF PORT3_A,0
MOVWF TXREG
TXIF_WAIT3_A BTFSS PIR1,TXIF
GOTO TXIF_WAIT3_A
CALL ONE_SECOND
MOVF PORT3_B,0
MOVWF TXREG
TXIF_WAIT3_B BTFSS PIR1,TXIF
GOTO TXIF_WAIT3_B
CALL ONE_SECOND
MOVF PORT4_A,0
MOVWF TXREG
TXIF_WAIT4_A BTFSS PIR1,TXIF
GOTO TXIF_WAIT4_A
CALL ONE_SECOND
MOVF PORT4_B,0
MOVWF TXREG
TXIF_WAIT4_B BTFSS PIR1,TXIF
GOTO TXIF_WAIT4_B
CALL ONE_SECOND
MOVF PORT5_A,0
MOVWF TXREG
TXIF_WAIT5_A BTFSS PIR1,TXIF
GOTO TXIF_WAIT5_A
CALL ONE_SECOND
MOVF PORT5_B,0
MOVWF TXREG
TXIF_WAIT5_B BTFSS PIR1,TXIF
GOTO TXIF_WAIT5_B
CALL ONE_SECOND
MOVF PORT6_A,0
MOVWF TXREG
TXIF_WAIT6_A BTFSS PIR1,TXIF
GOTO TXIF_WAIT6_A
CALL ONE_SECOND
MOVF PORT6_B,0
MOVWF TXREG
TXIF_WAIT6_B BTFSS PIR1,TXIF
GOTO TXIF_WAIT6_B
CALL ONE_SECOND
MOVF PORT7_A,0
MOVWF TXREG
TXIF_WAIT7_A BTFSS PIR1,TXIF
GOTO TXIF_WAIT7_A
CALL ONE_SECOND
MOVF PORT7_B,0
MOVWF TXREG
TXIF_WAIT7_B BTFSS PIR1,TXIF
GOTO TXIF_WAIT7_B
CALL ONE_SECOND
MOVF PORT8_A,0
MOVWF TXREG
TXIF_WAIT8_A BTFSS PIR1,TXIF
GOTO TXIF_WAIT8_A
CALL ONE_SECOND
MOVF PORT8_B,0
MOVWF TXREG
TXIF_WAIT8_B BTFSS PIR1,TXIF
GOTO TXIF_WAIT8_B
RETLW 0
;**********************************************************************************************
END