51串口发送数据

本文介绍了51单片机进行串口通信的基础知识,包括波特率、起始位、停止位和校验位的概念,并展示了如何使用STC-ISP软件配置串口。代码示例中详细阐述了初始化串口、发送字节和字符串以及中断处理的过程,同时讲解了如何重定义putchar函数以支持printf函数在串口上的输出。
摘要由CSDN通过智能技术生成

串口通信

需要知道几个基础知识点。
波特率 起始位 停止位 校验位,具体的可以去查书。
串口通信为串行通信方式,即每次只能发送一位,且为单工,一端固定为发送端,另一端为接收端。
51单片机的串口需要配置的寄存器可以直接通过STC-ISP这个软件配置,选择好晶振的频率和波特率直接生成就可以了
在这里插入图片描述下面直接贴代码

bit uart1_busy=0;

void UartInit(void) //115200bps@12.000MHz
{
    SCON = 0x50;  //8位数据,可变波特率
    AUXR |= 0x01; //串口1选择定时器2为波特率发生器
    AUXR |= 0x04; //定时器2时钟为Fosc,即1T
    T2L = 0xE6;   //设定定时初值
    T2H = 0xFF;   //设定定时初值
    AUXR |= 0x10; //启动定时器2
}

void uart1_sendByte(char byte)	//串口发送一个字节
{
    while (uart1_busy);
    uart1_busy = 1;
    SBUF = byte;
    TI = 0;
}

void uart1_sendstring(char* str)	//串口发送字符串
{
    while(*str)
    {
        uart1_sendByte(*str++);
    }
}

char putchar(char c)		//	用于printf函数
{
    uart1_sendByte(c);
    return c;
}

void UART1_IRQ_Handle(void) interrupt 4 using 1
{
    if (TI)
    {
        TI = 0;
        uart1_busy = 0;
    }
    if (RI)
    {
        RI = 0;
    }
}

void Delay100ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 5;
	j = 144;
	k = 71;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
    UartInit(); //初始化串口
    EA = 1;     //开总中断
    ES=1;		//打开串口中断
    while (1)
    {
        uart1_sendstring("Hellow World!\n");
        Delay100ms();
        printf("Hello World!\n"); //串口打印结果
    }
}

51单片机用SBUF来储存发送和接收的到的数据,所以可以直接将需要发送的值赋值给SBUF。另外如果想要使用printf函数,需要重定义一下putchar函数才行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值