单片机串行接口

  • 串行口控制寄存器SCON   

                       

                              

                               

  • 电源控制寄存器PCON      

                               

  • 工作方式

                      

            

1. 工作方式0

  • 波特率=fosc/12
  • SCON中SM2=0(非多机通讯)
  • 8位串行数据从RXD输入或输出,TXD输出同步脉冲,每个机器周期传输1位数据
  • 输出:CPU将数据写入发送寄存器时,立即启动发送,8位数据从RXD输出时,低位在前,高位在后;发送完一帧数据后,发送中断标志TI由硬件置位;
  • 输入:RI=0REN=1同时满足时,有移位脉冲开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI

1.1 使用89C51串行口外接串入并出寄存器74HC164扩展并行口,8位并行口的每位接一个发光二极管,要求发光二极管以1s的延迟轮流循环显示。 

 

ORG  0000H
LJMP MAIN
ORG  0023H
LJMP SBR
ORG  0100H

MAIN: SETB ES
      SETB EA
      MOV SCON,#00H ;工作方式0
      MOV A,#7FH    ;准备发送数据
      MOV SBUF,A    ;发送
LOOP: NOP
      SJMP LOOP

;中断程序
SBR: SETB P1.0
     LCALL DELAY
     CLR TI  ;手动清0,发送完成的标志位
     RR A
     MOV SBUF,A
     RETI

;延时子程序
DELAY1S: MOV R6,#10 ;估计是11.0592Hz
DELAY0:  MOV R5,#200
DELAY1:  MOV R4,#230
DELAY2:  DJNZ R4,DELAY2
         DJNZ R5.DELAY1
         DJNZ R6,DELAY0

2.工作方式1

  • 发送或接收一帧信息,包括1个起始位08个数据位和1个停止位1
  • 发送:靠写入SBUF的指令来启动的。
  • 接收:在REN=1时,串行口采样RXD引脚
    • 接收值是3次采样中至少两次相同的值;
    • 采样到10的跳变(起始位)时,开始接收一帧数据;
    • 满足(1)RI=0,(2)停止位=1时,8数据进入接收寄存器,并由硬件置位中断标志RI
  • 波特率设置 
    • 8位URAT

                                      

3.工作方式2   -9位URAT      

  • 发送或接收一帧信息,包括1个起始位09数据位(多一位自定义位TB8/RB81个停止位1
  • 发送或接收控制同方式1    
  •        

4.方式3   -9位URAT

  • 接收和发送时序同方式2
  • 使用注意事项同方式2
  • 波特率设定同方式1

                             

5.串行口的应用

单片机89C51甲为下位机,当自身工作正常时向上位机单片机89C51乙发送数据00H;若出现异常,则发送故障号XXH上位机在P1口显示下位机故障。

上位机和下位机串口采用方式1,晶振选择11.0592MHz,通信波特率为9600bpsT1为波特率发生器,选择工作方式2。上、下位机发送接收数据采用中断方式。

                      

解:工作方式1

  • SCON的SM0,SM1=01
  • PCON的SMOD位为0
  • T1工作方式2,TMOD=20H,晶振选择11.0592MHz,通信波特率为9600bps

             

计算得出T1装入的初值为:X=253(FDH)

;下位机程序
ORG 0000H
LJMP START
ORG 0023H  ;串行口中断
LJMP SEND
ORG 0100H
START: MOV SCON,#01000000B ;上下位机工作方式为1
       MOV PCON,#00H       ;波特率不提高一倍
       MOV TMOD,#20H       ;定时器T1,模式2,256
       MOV TH1,#0FDH       ;初始化波特率
       MOV TL1,#0FDH       ;
       MOV 70H,#0H         ;准备送的数
       SETB EA             ;开总中断
       SETB ES             ;开串口中断
       SETB ET1            ;开T1中断
       SETB TR1            ;
       MOV A,70H   ;故障号
       MOV SBUF,A
LOOP:NOP
     LCALL CHECK ;检错程序
     LJMP LOOP
CHECK:........RET
SEND: CLR TI  ;必须手动清除传送完成标志
      MOV A,70H
      MOV SBUF,A
     RETI

END
;上机位程序
ORG   0000H
LJMP START
ORG   0023H            ;串行口中断
LJMP RECIVE
ORG   100H
START:  MOV  SCON, #40H    ; UART 方式1
        MOV  PCON, #00H    ; SMOD=0
        MOV  TMOD, #20H    ; T1: 模式2
        MOV  TH1, #0FDH    ; 初始化波特率
        MOV  TL1, #0FDH
        SETB  EA           ; 开总中断
        SETB  ES           ; 开串口中断
        SETB  ET1          ; 开T1中断
        MOV   71H, #0H 
        SETB TR1           ; T1开始工作
        SETB REN           ;允许接收              
LOOP:NOP
     MOV P1,71H
     NOP
     SJMP LOOP
RECIVE: CLR RI
        MOV A,SBUF
        MOV 71H,A
     RETI
END

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值