你的位置: 首页 > 家电弱电 > 单片机

单片机串口通信

2016-11-30 10:45:52 | 人围观 | 评论:

    串口通信是单片机一个重要的部分,单片机和PC,单片机和单片机之间的通信大都用串口。单片机的串口是全双工异步串口通信方式。通过TXD(P3.1)发送,RXD(P3.0)引脚接收输入。串口传送数据是一帧一帧发送的,它有四种工作方式,同时也可以做并行I/O的扩展。

    图上是串口的结构图。

    SBUF是数据缓冲寄存器,发送和接收用的是一个地址,但是不用担心冲突,读只能从接收缓冲区,写只能在发送缓冲区里。

    寄存器SCON(SM0 SM1 SM2 REN TB8 RB8 TI RI)

    SM0和SM1: 工作方式选择(0-3),方式1和方式3使用T1产生波特率,方式0和方式2是固定速率。

    SM2 :在方式2和方式3的多级通信控制位

    REN:允许串行接收控制位,0禁止接收

    TB8:对于方式2和方式3,是发送的第9位

    RB8:对于方式2和方式3,是接收的第9位;对于方式1,是接收到的停止位

    TI:发送中断标志,发送完一帧后置位,必须由软件清零

    RI:发送中断标志,接收完一帧后置位,必须由软件清零

    寄存器PCON(最高位SMOD)

    SMOD=1时,波特率加倍

    程序:PC与单片机通信,PC发送字符,单片机接收后返回给PC

    PC端程序,VB编写,使用MSCOMM控件

    Private Sub Command1_Click()

    MSComm1.Output = Text1.Text '发送数据

    End Sub

    Private Sub Form_Load()

    MSComm1.CommPort = 4 '设置串口的端口号

    MSComm1.Settings = "9600,n,8,1" '设置串口的波特率等参数

    MSComm1.RThreshold = 1 '设置最小接收的字节数

    MSComm1.PortOpen = True '打开串口

    End Sub

    Private Sub MSComm1_OnComm()

    Select Case MSComm1.CommEvent

    Case comEvReceive

    Text2.Text = Text2.Text & MSComm1.Input '接收数据

    End Select

    End Sub

    单片机程序:

    #include

    void UartInit();

    void UartSendChar(unsigned char ch);

    void main(void)

    {

    UartInit();

    while(1);

    }

    void UartInit()

    {

    SCON = 0x50; // SCON: 模式1

    TMOD = 0x20; // TMOD: 定时器1 模式2

    PCON = 0x00; // SMOD=0;

    TH1 = 0xFD; // Baud:9600 波特率=2SMOD×fosc/(32×12×(256-TH1))

    TL1 = 0xFD;

    IE = 0x90;

    TR1 = 1;

    EA = 1;

    }

    void UartSendChar(unsigned char ch)

    {

    SBUF = ch;

    while(TI==0);

    TI=0;

    }

    void UartRec() interrupt 4

    {

    unsigned char ch;

    ch = SBUF;

    if(RI)

    {

    RI = 0;

    UartSendChar(ch);

    }





标签: