51单片机,串行口通讯

要求:

主机:每隔1秒读一次P1口并将读数发给从机,同时接收从机的信号,若与所发数相同,则P3.2的灯亮,若不同或不回答则P3.3的灯亮。
从机:将接收的数据从P1口推出,并回发此数据
波特率自定,编写主机程序和从机程序。

程序代码:

主机部分:

     org  0000h
     sjmp MAIN
     org  000bh
     sjmp READY
MAIN:
     MOV  TMOD , #21H
     MOV  TL0  , #0B0H
     MOV  TH0  , #3CH
     MOV  TL1  , #0FAH
     MOV  TH1  , #0FAH
     SETB EA
     SETB EX0
     SETB ET0
     SETB IT0
     SETB TR0
     SETB TR1
     ;SETB ES
     CLR  RI
     CLR  TI
     CLR  P3.3
     CLR  P3.2
     MOV  R2 ,#00H
     MOV  PCON ,#00H
     MOV  SCON ,#50H
WAIT_RECV:
     JNB  RI,WAIT_RECV
     CLR  RI
     MOV  A,SBUF
     SUBB A,R3
     JNZ  SEND_FAIL
   SEND_OK:
     SETB P3.2
     CLR  P3.3
     AJMP WAIT_RECV
   SEND_FAIL:
     SETB P3.3
     CLR  P3.2
     AJMP $
READY:
     MOV  TMOD ,#01H
     MOV  TL0  ,#0B0H
     MOV  TH0  ,#3CH
     INC  R2
     CJNE R2   ,#0AH, NOT_READY
     MOV  R2   ,#00H 
     MOV  A    ,P1
     MOV  R1   ,A ;R3 store the data  ,used for judging of received data
    
     MOV SBUF ,A
   WAIT_SEND:
     JNB  TI   ,WAIT_SEND
     CLR  TI
     RETI
NOT_READY:
     RETI

从机部分:

ORG 0000H
LJMP STAR
ORG 0023H
LJMP SINT
STAR:MOV TMOD,#20H
MOV TL1,#0FAH
MOV TH1,#0FAH
SETB TR1
MOV SCON,#50H
MOV IE,#90H
CLR TI
CLR RI
JMP$
SINT:MOV A,SBUF
MOV P1,A
MOV SBUF,A
WAIT:JNB TI,WAIT
CLR TI
CLR RI
RETI
END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值