Tool-Relay(M)

;*******************************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             
;***********************************************************************************************
;*                   BANK0  GENERAL  PURPOSE  REGISTERS        ADD 020-06F
;                    普通 用途 暂存器 库0
;*                   START 20-6F ADDRESS
;***********************************************************************************************                 
;                    ALL BANKS COMMON REGISTERS
;                    所有的  库   共同的 暂存器
;***********************************************************************************************
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
TIMER1               EQU               78H
TIMER2               EQU               79H
TIMER3               EQU               7AH
TIMER_S              EQU               7BH
;************************************************************************************************
@RB_STATUS           EQU               7CH
@RC_STATUS           EQU               7DH
;************************************************************************************************
@RBTEMP              EQU               7EH                  ;PORTREG
PRESENT              EQU               7FH
;************************************************************************************************
;*                   BANK1    SPECIAL    REGISTERS
;*                   库1      特殊        暂存器
;************************************************************************************************
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            
                    ; BTFSS             @RBTEMP,7
                     ;CALL              SHOW7A_MAIN               ;如果为1说明是初始化状态。                                
                     ;CALL              ONE_SECOND

                     MOVF              RC,W
                     MOVWF             @RCTEMP                   ;@RCTEMP为F77H
                     BTFSS             @RCTEMP,X
                     GOTO              SELREG2

                     ;BTFSS             @RBTEMP,7        
                     ;CALL              SHOW7B_MAIN
                     ;CALL              ONE_SECOND

                     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
;*************************************************************************************************
                     GOTO              POWERON_INITION
                     ORG               PAGE0
;*************************************************************************************************
;**                   TABLE             HEX TO 7-SEGMENT LED SUBROUTINE
;**                                            7节    LED       子程式
;*************************************************************************************************
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
;                    0页     子程式                
;***************************************************************************************************
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
;                    1.C1,C2,C3  PORT()
;                    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             07H   
                     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
  ;RS-232 PORT ,CYTEL =8 , SET RATE 9600,N,8,1
                     MOVLW             D'51'
                     MOVWF             SPBRG
                     CLRF              TXSTA
                     BSF               TXSTA,BRGH
                     BSF               TXSTA,TXEN
                     BCF               PSW,RP0                    ;CHANGE REGISTERS BANK TO 1ST
;****************************************************************************************************
POWERON_HAREWARE
                     CLRF              INTCON
                     BCF               RC,SP                 ;spk
                     BSF               RCSTA,CREN
                     BSF               RCSTA,SPEN

                     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              BEEP                  ;初始化结束.
;初始化工作结束.
;****************************************************************************************************
;开始进行主循环
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 A SIDE
 
                     CLRF              PSW
                     CALL              CHECK_ERRR2          ;TEST B SIDE
                    
                     CALL              SHOW7A_MAIN
                     CALL              ONE_SECOND
                     CALL              ONE_SECOND
                     CALL              SHOW7B_MAIN
                     CALL              ONE_SECOND
LPT_MAIN1           
                     INCF              PORT_NUMBER,1         ;PORT_NUMBER+1放入PORT_NUMBER中
                     CALL              SELECTABLE           
    
                     GOTO              LPT_MAIN
;主循环结束处
;**************************************************************************************************
;**************************************************************************************************
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
;**********************************************************************************************
                     END
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值