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

📄 slavetel.asm.bak

📁 医院语音寻孚系统的汇编源代码
💻 BAK
字号:
;**************从控制器芯片电话接收*********************************
; 从控制器,主要管理2路电话;并且把数据整理好,得到允许之后,发给主控制器
;
;****************************************************************
;DATAOUT接到主控制器的P3.5,DATACLK接到P3.4
;REQ用于数据准备好之后向主控制器的P0.0发送请求信号。从主控制器的P2.0回到INT1
;****************************************************************************
;  I/O PORT PIN DEFINED

 TEL_DATA  EQU P1     ;   LOW NIABBLE

  TEL1_HOLD BIT P1.7
  TEL1_RING BIT P1.6
  TEL1_TOE  BIT P1.5
  TEL1_STD  BIT P1.4
  TEL1_MUSIC0 BIT P2.0
  TEL1_MUSIC1 BIT P2.1


  TEL2_HOLD BIT P3.7
  TEL2_RING BIT P3.6
  TEL2_TOE  BIT P3.5
  TEL2_STD  BIT P3.4

  TEL2_MUSIC0  BIT P2.2
  TEL2_MUSIC1  BIT P2.3

REQ		BIT	P	;请求接收 OUTPUT
DATAOUT		BIT
DATACLK		BIT




;***********************************************************************
;   自己使用的RAM的定义

 BIT  00H	;发送完成标志位。=1,还未完成。20H.1
     TEL1_STRU  EQU  21H   ;  2 TEL LINE STRU
;            .0   TEL  RING OPENED CONTIU
;            .1   TEL  KEY END
;            .2   TEL  OPENDED
;            .3   TEL  DATA IN DISABLE
;            .4   TEL  DISABLE

    TEL1_NUM    EQU   2BH      ; TEL LINE 1 KEY NUM
    TEL1_DELAY  EQU  2CH     ;  TEL LINE 1 DELAY TIME
    TEL1_DELAY1 EQU  2DH
    TEL1_DELAY2 EQU  2EH     ;  TEL LINE 1 DELAY TIME BETWEEN 2 KEY INPUT
    TEL1_AGAIN  EQU  2FH
    TEL1_KEY    EQU  30H

    TEL2_NUM    EQU   31H     ; TEL LINE 2 KEY NUM
    TEL2_DELAY  EQU  32H     ;  TEL LINE 2 DELAY TIME
    TEL2_DELAY1 EQU  33H
    TEL2_DELAY2 EQU  34H     ;  TEL LINE 2 DELAY TIME BETWEEN 2 KEY INPUT
    TEL2_AGAIN  EQU  35H
    TEL2_KEY    EQU  36H


    TEL1_BUF   EQU   08H      ; TEL LINE 1 KEY BUFFER    08H - 1FH  24 BYTES
    TEL2_BUF   EQU   48H      ; TEL LINE 2 KEY BUFFER    48H - 5FH  24 BYTES


;***********************************************************************
ORG 0000H
	AJMP SYS_START

ORG 0003H            ; INT0外部中断0
	CLR EX0
	RETI
   	NOP
   	NOP


ORG 000BH           ; TIME0 OUT定时0中断
	CLR ET0
	RETI
 NOP
 NOP

ORG 0013H           ; INT1外部中断1
	CLR  EX1
	AJMP SEND
 NOP
 NOP

ORG 001BH          ;  TIME1 OUT定时1中断
	CLR ET1
	RETI
   NOP
   NOP
   NOP

ORG 0023H         ;  COM I/O串口中断
	CLR ES
	RETI
 NOP
 NOP

ORG 002BH         ;TIME2 OUT 降压检测中断
	CLR IEN0.5
	RETI
 NOP
 NOP

ORG 0033H    		;I2C中断
	CLR IEN1.0
	RETI
 NOP
 NOP

ORG 003BH    		;键盘中断
	CLR IEN1.1
	RETI
 NOP
 NOP

ORG 0043H    		;比较器2中断
	CLR IEN1.2
	RETI
 NOP
 NOP

ORG 0053H             ;  WDT TIMER OUT.要使用WDT
	CLR IEN0.6
	AJMP SYS_START
 NOP
 NOP

ORG 0063H		;比较器1中断
	CLR IEN1.5
	RETI

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	ORG 050H
SYS_START:

             MOV TEL1_STRU,#00H
             MOV TEL2_STRU,#00H
             MOV TEL1_DELAY,#0DH
             MOV TEL2_DELAY,#0DH
             MOV TEL1_DELAY2,#08H
             MOV TEL2_DELAY2,#08H

             MOV TEL1_AGAIN,#07H
             MOV TEL2_AGAIN,#07H
                  NOP
                  NOP
                  NOP
            ACALL INIT_TEL1
                  NOP
                  NOP
                  NOP
            ACALL INIT_TEL2
                  NOP
                  NOP

          
;*******************子程序**********************************
INIT_TEL1:    MOV R0,#TEL1_BUF
              MOV R2,#018H
              MOV A,#0CH
INIT_TEL1_2:  MOV @R0,A
              INC R0
              DJNZ R2,INIT_TEL1_2

             MOV TEL1_AGAIN,#07H
             MOV TEL1_NUM,#00H
                   NOP
                   NOP
                   NOP
              RET
                   NOP
                   NOP
                   NOP

INIT_TEL2:    MOV R0,#TEL2_BUF
              MOV R2,#018H
              MOV A,#0CH
INIT_TEL2_2:  MOV @R0,A
              INC R0
              DJNZ R2,INIT_TEL2_2

             MOV TEL2_AGAIN,#07H
             MOV TEL2_NUM,#00H
                   NOP
                   NOP
                   NOP
              RET
;************************************************************************
;
;   用来检测电话
;
;************************************************************************
TIMER_OUT:
           PUSH PSW
           PUSH ACC
           PUSH B
           MOV ACC,R0
           PUSH ACC
           MOV ACC,R2
           PUSH ACC
           MOV ACC,R3
           PUSH ACC

           MOV TH1,#0F2H

           DJNZ SYS_DELAY1,TEL_START
           DJNZ SYS_DELAY,TEL_START
           LJMP SYS_AGAIN

TEL_START:

       DJNZ TEL1_DELAY1,TEL1_1    ;  TLE LINE 1 TIMER OUT   CLOSED
       DJNZ TEL1_DELAY,TEL1_1

       CLR TEL1_HOLD              ;  CLOSE TEL1

       CLR  TEL1_MUSIC0
       CLR  TEL1_MUSIC1

       SETB TEL1_STRU.3
       MOV A,TEL1_STRU
       ANL A,#0AH
       MOV TEL1_STRU,A

       MOV TEL1_KEY,#0FFH

       LJMP TEL1_END

TEL1_1:

       JB TEL1_STRU.4,TEL1_END1    ;  IF TEL1 DISABLE TOTO TEL1_END

       JB TEL1_STRU.1,TEL1_END1    ;  IF TEL1 DATA INPUT FINISHED GOTO TEL1_END

       JB TEL1_STRU.2,TEL1_2      ;  IF TEL1 OPENED GOTO TEL1_DATA INPUT

       JB TEL1_RING,TEL1_1_1      ;  TEL1 RING NONE
          NOP
          NOP
       JB TEL1_RING,TEL1_1_1      ;  TEL1 RING NONE

       JB TEL1_STRU.0,TEL1_1_2

       SETB TEL1_STRU.0
       MOV TEL1_DELAY,#03H

TEL1_END1:

       LJMP TEL1_END

TEL1_1_1:
          CLR TEL1_STRU.0
          MOV TEL1_AGAIN,#07H       ;  TEST TEL1 RING 7 TIMES
          LJMP TEL1_END

TEL1_1_2:
          DJNZ TEL1_AGAIN,TEL1_END1

          SETB TEL1_HOLD          ; TEL1 OPEN
          SETB TEL1_MUSIC0

          SETB TEL1_STRU.2
          SETB TEL1_STRU.3
          CLR  TEL1_STRU.0

          MOV TEL1_KEY,#0FFH
          MOV TEL1_DELAY2,#0AH
          MOV TEL1_DELAY,#020H

          LJMP TEL1_END
       
TEL1_2:
          JB TEL1_STD,TEL1_2_1
             NOP
             NOP
          JB TEL1_STD,TEL1_2_1

          MOV TEL1_KEY,#0FFH

          DJNZ TEL1_DELAY2,TEL1_END1

          CLR TEL1_STRU.3           ;   INPUT DATA ENABLE

          LJMP TEL1_END

TEL1_2_1:
          MOV TEL1_DELAY2,#0AH

          JB TEL1_STRU.3,TEL1_END1  ;   IF INPUT DATA DISABLE GOTO TEL1_END

          SETB TEL1_TOE             ;  INPUT TEL1 8870 DATA
          MOV R3,#05H

TEL1_2_2:
             NOP
           MOV A,TEL_DATA
           ANL A,#00FH
           MOV R2,A
             NOP
           MOV A,TEL_DATA
           ANL A,#00FH
           XRL A,R2

           JZ  TEL1_2_3
           DJNZ R3,TEL1_2_2

           CLR TEL1_TOE
           MOV TEL1_KEY,#0FFH
           SETB TEL1_STRU.3

           AJMP TEL1_END

TEL1_2_3:
           CLR TEL1_TOE
           MOV A,R2

           JZ TEL1_2_4          ;  IF INPUT DATA = 0  ERROR

           CLR C                ;  IF INPUT DATA > 12 ERROR
           SUBB A,#0DH
           JC TEL1_2_5

TEL1_2_4:
           MOV TEL1_KEY,#0FFH    ;  DATA ERROR
           SETB TEL1_STRU.3

           AJMP TEL1_END

TEL1_2_5:
            MOV A,R2
            XRL A,TEL1_KEY
            JZ  TEL1_2_6

            MOV A,R2
            MOV TEL1_KEY,A
            MOV TEL1_AGAIN,#07H

            AJMP TEL1_END

TEL1_2_6:
           DJNZ TEL1_AGAIN,TEL1_END

           CLR TEL1_MUSIC0
           SETB TEL1_STRU.3
           MOV TEL1_DELAY,#010H
           MOV TEL1_KEY,#0FFH

           MOV A,#TEL1_BUF
           ADD A,TEL1_NUM
           MOV R0,A

           MOV A,R2
           XRL A,#0BH             ; * KEY = SPACE
           JZ  TEL1_2_7

           MOV A,R2
           XRL A,#0CH             ;  # KEY  = END
           JZ TEL1_2_8

           MOV A,R2
           MOV B,#0AH
           DIV AB
           MOV @R0,B

TEL1_2_7:  INC TEL1_NUM
           MOV A,TEL1_NUM
           XRL A,#018H         ;  ON KEY NUM = 24  END
           JZ TEL1_2_8

           AJMP TEL1_END

TEL1_2_8:
           MOV A,TEL1_NUM
           CLR C
           SUBB A,#05H
           JNC TEL1_2_9

           CLR TEL1_HOLD
           MOV TEL1_STRU,#00H
           MOV TEL1_NUM,#00H
           AJMP TEL1_END
           
TEL1_2_9:
           SETB TEL1_MUSIC1

           SETB TEL1_STRU.1
           SETB TEL1_STRU.3
           SETB TEL1_STRU.4

           MOV TEL1_DELAY,#03H
           MOV TEL1_DELAY1,#00H

TEL1_END:
       DJNZ TEL2_DELAY1,TEL2_1    ;  TLE LINE 1 TIMER OUT   CLOSED
       DJNZ TEL2_DELAY,TEL2_1

       CLR TEL2_HOLD              ;  CLOSE TEL2

       CLR  TEL2_MUSIC0
       CLR  TEL2_MUSIC1

       SETB TEL2_STRU.3
       MOV A,TEL2_STRU
       ANL A,#0AH
       MOV TEL2_STRU,A

       MOV TEL2_KEY,#0FFH

       LJMP TEL2_END

TEL2_1:

       JB TEL2_STRU.4,TEL2_END1    ;  IF TEL2 DISABLE TOTO TEL2_END

       JB TEL2_STRU.1,TEL2_END1    ;  IF TEL2 DATA INPUT FINISHED GOTO TEL2_END

       JB TEL2_STRU.2,TEL2_2      ;  IF TEL2 OPENED GOTO TEL2_DATA INPUT

       JB TEL2_RING,TEL2_1_1      ;  TEL2 RING NONE
          NOP
          NOP
       JB TEL2_RING,TEL2_1_1      ;  TEL2 RING NONE

       JB TEL2_STRU.0,TEL2_1_2

       SETB TEL2_STRU.0
       MOV TEL2_DELAY,#03H

TEL2_END1:

       LJMP TEL2_END

TEL2_1_1:
          CLR TEL2_STRU.0
          MOV TEL2_AGAIN,#07H       ;  TEST TEL2 RING 7 TIMES
          LJMP TEL2_END

TEL2_1_2:
          DJNZ TEL2_AGAIN,TEL2_END1

          SETB TEL2_HOLD          ; TEL2 OPEN
          SETB TEL2_MUSIC0

          SETB TEL2_STRU.2
          SETB TEL2_STRU.3
          CLR  TEL2_STRU.0

          MOV TEL2_KEY,#0FFH
          MOV TEL2_DELAY2,#0AH
          MOV TEL2_DELAY,#020H

          LJMP TEL2_END
       
TEL2_2:
          JB TEL2_STD,TEL2_2_1
             NOP
             NOP
          JB TEL2_STD,TEL2_2_1

          MOV TEL2_KEY,#0FFH

          DJNZ TEL2_DELAY2,TEL2_END1

          CLR TEL2_STRU.3           ;   INPUT DATA ENABLE

          LJMP TEL2_END

TEL2_2_1:
          MOV TEL2_DELAY2,#0AH

          JB TEL2_STRU.3,TEL2_END1  ;   IF INPUT DATA DISABLE GOTO TEL2_END

          SETB TEL2_TOE             ;  INPUT TEL2 8870 DATA
          MOV R3,#05H

TEL2_2_2:
             NOP
           MOV A,TEL_DATA
           ANL A,#00FH
           MOV R2,A
             NOP
           MOV A,TEL_DATA
           ANL A,#00FH
           XRL A,R2

           JZ  TEL2_2_3
           DJNZ R3,TEL2_2_2

           CLR TEL2_TOE
           MOV TEL2_KEY,#0FFH
           SETB TEL2_STRU.3

           AJMP TEL2_END

TEL2_2_3:
           CLR TEL2_TOE
           MOV A,R2

           JZ TEL2_2_4          ;  IF INPUT DATA = 0  ERROR

           CLR C                ;  IF INPUT DATA > 12 ERROR
           SUBB A,#0DH
           JC TEL2_2_5

TEL2_2_4:
           MOV TEL2_KEY,#0FFH    ;  DATA ERROR
           SETB TEL2_STRU.3

           AJMP TEL2_END

TEL2_2_5:
            MOV A,R2
            XRL A,TEL2_KEY
            JZ  TEL2_2_6

            MOV A,R2
            MOV TEL2_KEY,A
            MOV TEL2_AGAIN,#07H

            AJMP TEL2_END

TEL2_2_6:
           DJNZ TEL2_AGAIN,TEL2_END

           CLR TEL2_MUSIC0
           SETB TEL2_STRU.3
           MOV TEL2_DELAY,#010H
           MOV TEL2_KEY,#0FFH

           MOV A,#TEL2_BUF
           ADD A,TEL2_NUM
           MOV R0,A

           MOV A,R2
           XRL A,#0BH             ; * KEY = SPACE
           JZ  TEL2_2_7

           MOV A,R2
           XRL A,#0CH             ;  # KEY  = END
           JZ TEL2_2_8

           MOV A,R2
           MOV B,#0AH
           DIV AB
           MOV @R0,B

TEL2_2_7:  INC TEL2_NUM
           MOV A,TEL2_NUM
           XRL A,#018H         ;  ON KEY NUM = 24  END
           JZ TEL2_2_8

           AJMP TEL2_END

TEL2_2_8:
           MOV A,TEL2_NUM
           CLR C
           SUBB A,#05H
           JNC TEL2_2_9

           CLR TEL2_HOLD
           MOV TEL2_STRU,#00H
           MOV TEL2_NUM,#00H
           AJMP TEL2_END
           
TEL2_2_9:
           SETB TEL2_MUSIC1

           SETB TEL2_STRU.1
           SETB TEL2_STRU.3
           SETB TEL2_STRU.4

           MOV TEL2_DELAY,#03H
           MOV TEL2_DELAY1,#00H

TEL2_END:
            POP ACC
            MOV R3,ACC
            POP ACC
            MOV R2,ACC
            POP ACC
            MOV R0,ACC
            POP B
            POP ACC
            POP PSW
            SETB ET1
            RETI
************************************************************************
;
;   P1.4外部中断,把解码的电话发送给主控CPU
;
;************************************************************************
SEND:            
	
	
	
	
	
	RETI            
            
            
            
            
            
            END

⌨️ 快捷键说明

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