关 闭

新闻中心

EEPW首页>安全与国防>设计应用> 基于AT89C51的单线双机通信协议

基于AT89C51的单线双机通信协议

作者: 时间:2008-03-07 来源:网络 收藏
X

  ;按键功能入口

  FUNCTION:

 A,KBUF1

  CJNEA,#07FH,FUN1;+1

  ;A,STATE

  ;ADDA,#01H

 A,#01H

  MOV STATE,A

  MOV SDATX,A

  SETBSDF

  CPL A

  MOV P0,A

  RET

  FUN1:

  CJNEA,#0F7H,FUN2;+2

  ;MOVA,STATE

  ;ADDA,#02H

  MOV A,#02H

  MOV STATE,A

  MOV SDATX,A

  SETBSDF

  CPL A

  MOV P0,A

  RET

  FUN2:

  CJNEA,#0BFH,FUN3;+4

  ;MOVA,STATE

  ;ADDA,#04H

  MOV A,#03H

  MOV STATE,A

  MOV SDATX,A

  SETBSDF

  CPL A

  MOV P0,A

  RET

  FUN3:

  CJNEA,#0FBH,FUN4;+8

  ;MOVA,STATE

  ;ADDA,#08H

  MOV A,#04H

  MOV STATE,A

  MOV SDATX,A

  SETBSDF

  CPL A

  MOV P0,A

  RET

  FUN4:

  CJNEA,#0DFH,FUN5;+16

  ;MOVA,STATE

  ;ADDA,#10H

  MOV A,#05H

  MOV STATE,A

  MOV SDATX,A

  SETBSDF

  CPL A

  MOV P0,A

  RET

  FUN5:

  CJNEA,#0FDH,FUN6;+32

  MOV A,STATE

  ;ADDA,#20H

  XRL A,#08H

  MOV STATE,A

  MOV SDATX,A

  SETBSDF

  CPL A

  MOV P0,A

  RET

  FUN6:

  CJNEA,#0EFH,FUN7;+64

  MOV A,STATE

  ADD A,#40H

  MOV STATE,A

  MOV SDATX,A

  SETBSDF

  CPL A

  MOV P0,A

  RET

  FUN7:

  CJNEA,#0FEH,FUN8;+128

  MOV A,STATE

  ADD A,#80H

  MOV STATE,A

  MOV SDATX,A

  SETBSDF

  CPL A

  MOV P0,A

  RET

  FUN8:

  RET

  ;=====================================================================

  KEYREAD:

  CLR P2.7

  SETBP2.6

  MOV A,P2

  ANL A,#0FH

  MOV KBUF0,A

  SETBP2.7

  CLR P2.6

  MOV A,P2

  ANL A,#0FH

  SWAPA

  ORL A,KBUF0

  MOV KBUF0,A

  CJNEA,KBUF1,KEYRD3

  MOV A,KCNT

  CJNEA,#03H,KEYRD1

  RET

  KEYRD1:

  INC A

  INC KCNT

  CJNEA,#03H,KEYRD4

  MOV A,KBUF1

  CJNEA,#0FFH,KEYRD2

  RET

  KEYRD2:

  CALLFUNCTION

  RET

  KEYRD3:

  MOV KBUF1,A

  MOV KCNT,#00H

  KEYRD4:

  RET

  ;==============================================================

  INT_X0:

  MOV RSCNT,#00H

  MOV TH0,#00H

  MOV TL0,#00H

  MOV TMOD,#02H ;工作模式为定时方式2

  MOV TCON,#10H ;允许定时器0工作

  MOV IE,#82H ;允许定时器0中断

  RETI

  ;===============================================================

  INT_T0:

  PUSH

  PUSHA

  MOV DPTR,#T0_ENTRY

  MOV A,RSCNT

  INC RSCNT

  RLA

  JMP @A+DPTR

  T0_ENTRY:

  AJMPINT_T0N0;

  AJMPINT_T010;响应

  AJMPINT_T0N0

  AJMPINT_T020;标志0

  AJMPINT_T0N0

  AJMPINT_T030;标志1

  AJMPINT_T0N0

  AJMPINT_T0W0

  AJMPINT_T0R0

  AJMPINT_T0W1

  AJMPINT_T0R1

  AJMPINT_T0W2

  AJMPINT_T0R2

  AJMPINT_T0W3

  AJMPINT_T0R3

  AJMPINT_T0W4

  AJMPINT_T0R4

  AJMPINT_T0W5

  AJMPINT_T0R5

  AJMPINT_T0W6

  AJMPINT_T0R6

  AJMPINT_T0W7

  AJMPINT_T0R7

  ;AJMP INT_T0W8

  ;AJMP INT_T0R8

  ;AJMP INT_T0W9

  ;AJMP INT_T0R9

  AJMPINT_T0WE;写结束位(写数据)

  AJMPINT_T0RE;读结束位(读数据)

  AJMPINT_T0WAL ;写响应位(读数据)/终止结束位(写数据)

  AJMPINT_T0RA;读响应位(写数据)写结束

  AJMPINT_T0WAH ;终止响应位(读数据)读结束

  ;==============================================================

  INT_T0N0: ;

 A



  RETI

  ;==============================================================

  INT_T010: ;响应

  ;CLR

  ;CLRTSIO

  MOV P3,#00H

 A

  POP

  RETI

  ;==============================================================

  INT_T020: ;标志0

  JBSDF,INT_T021

  CLR RSF ;无数据发送,设置读标识

  ;SETB

  ;SETB TSIO

  MOV P3,#0FFH

  POP A

  POP PSW

  RETI

  INT_T021:

  SETBRSF ;有数据发送,设置写标志

  ;CLR

  ;CLRTSIO

  MOV P3,#00H

  POP A

  POP PSW

  RETI

  ;==============================================================

  INT_T030: ;标志1

  JBRSF,INT_031

  ;CLRCTPIO

  ;CLRTSIO

  MOV P3,#00H

  POP A

  POP PSW

  RETI

  INT_031 :

  ;SETB CTPIO

  ;SETB TSIO

  MOV P3,#0FFH

  POP A

  POP PSW

  RETI

  ;==============================================================

  INT_T0W0:

  JNB RSF,T0W01

  JNB SDATX.0,T0W02 ;写第一位

  T0W01 :

  ;SETB CTPIO

  ;SETB TSIO

  MOV P3,#0FFH

  POP A

  POP PSW

  RETI

  T0W02 :

  ;CLRCTPIO

  ;CLRTSIO

  MOV P3,#00H

  POP A

  POP PSW

  RETI

  ;==============================================================

  INT_T0R0:

  JBRSF,T0R02 ;读第一位

  JNB CTPIO,T0R01

  SETBRDATX.0

  POP A

  POP PSW

  RETI

  T0R01 :

  CLR RDATX.0

  T0R02 :

  POP A

  POP PSW

  RETI

  ;==============================================================

  INT_T0W1:

  JNB RSF,T0W12

  JNB SDATX.1,T0W11

  ;SETB CTPIO

  ;SETB TSIO

  MOV P3,#0FFH

  POP A

  POP PSW

  RETI

  T0W11 :

  ;CLRCTPIO

  ;CLRTSIO

  MOV P3,#00H

  T0W12 :

  POP A

  POP PSW

  RETI

  ;==============================================================

  INT_T0R1:

  JBRSF,T0R12

  JNB CTPIO,T0R11

  SETBRDATX.1

  POP A

  POP PSW

  RETI

  T0R11 :

  CLR RDATX.1

  T0R12 :

  POP A

  POP PSW

  RETI

  ;===============================



评论


相关推荐

技术专区

关闭