51单片机——串口1简单通信

1. 串口怎么用

2. 设置工作方式

一般使用工作方式2

TMOD寄存器使用从高位到低位,选择方式2,M1M0为1/0,即值为,TMOD值为0x20

3. 波特率设置

使用STC-ISP自带的波特率计算器

4. 开启串口、开启中断

5. 写中断服务

清除标志位

6. 写发送函数

串口一次只能发一个字节,也就是8位,发完才能开始下一个,因此写一个发送字符串的函数调用发送字节的函数即可

7. 代码如下

#include <STC15.H>
#include "intrins.h"

typedef unsigned char BYTE;

bit busy;
void SendData(BYTE dat);
void SendString(char *s);

void main()
{
    SCON = 0x50;  //8位可变波特率
    AUXR = 0x40;  //定时器1为1T模式
    TMOD = 0x20;  //定时器1为模式2(8位自动重载)
    TL1 = 0xFD;   //设置波特率重装值
    TH1 = 0xFD;
    TR1 = 1;      //定时器1开始工作
    ES = 1;       //使能串口中断
    EA = 1;

    SendString("LED666 !\r\n");
    while(1);
}


void Uart() interrupt 4
{
    if (RI)
    {
        RI = 0;                 //清除RI位
        P0 = SBUF;              //P0显示串口数据
    }
    if (TI)
    {
        TI = 0;                 //清除TI位
        busy = 0;               //清忙标志
    }
}

/*----------------------------
发送串口数据
----------------------------*/
void SendData(BYTE dat)
{
    while (busy);               //等待前面的数据发送完成
    ACC = dat;                  //获取校验位P (PSW.0)
    busy = 1;
    SBUF = ACC;                 //写数据到UART数据寄存器
}

/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
{
    while (*s)                  //检测字符串结束标志
    {
        SendData(*s++);         //发送当前字符
    }
}

8. 实验现象

因为是只实现了最简单的串口发送功能,并且是没有循环发送,因此只能在开机瞬间发送字符串。

看到的现象就是在ISP的串口接收区域可以看见,每次断电开机都会打印字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值